Jak jste se před 4 lety mohli zde dočíst, signály.cz běží v Azure - tj. v cloudu. Bohužel, Azure nenabízí zdarma automatický certifikát. Původně vůbec, aktuálně jenom pro signaly.cz
, ale ne už pro wildcard *.signaly.cz
.
Nezbylo mi při migraci nic jiného, než tam nahrát ručně generovaný Let's Encrypt zadarmo. Certifikát zadarmo má platnost asi 3 měsíce, normální placený kolem roku, někdy víc, ale to víc stojí. Roční tehdy stál cca 1500,-, bylo mi to tedy líto za to platit, ikdyž se s nahráváním certifikátu, respektive s generováním toho zdarma, pojí nemalé úsilí.
Abych ho vygeneroval, musel jsem jednou za 3 měsíce:
Ne nějak složité, ale rozhodně otravné a ještě k tomu dost pravidelně. Doménu jsme měli koupenou u Wedos a tam jsme také měli DNS. S tím je ale konec.
Nově DNS hostuje (zadarmo) Cloudflare. To je mezinárodní velké hráč s doménami. A základní DNS hosting je zadarmo - skvělé. Tím, že je mezinárodní, umí s ním spolupracovat i různé nástroje, v našem případě Terraform.
Terraform je automatizační nástroj pro infrastrukturu. Napíšete v něm definice, jak mají "věci" být. On pak porovná aktualní stav a chtěný stav, a to co chybí vytvoří, to co přebývá smaže, a to co se změnilo upraví. Umí spolupracovat s mnoha a mnoha službami. A já toho právě využil.
Nově v Terraformu zažádáme o potřebný certifikát. Terraform (respektive definice/provider v něm) si automaticky nahraje do Cloudlare DNS potřebný ověřovací hash, počká na to, pak dodělá certifikát a převede ho do potřebného zaheslovaného formátu.
Ale to není vše! Samozřejmě by byla pruda ho nahrávat, ale to jde také automatizovat. Takže terraform se dále spojí s Azure a nahraje tam certifikát, a propojí ho s potřebnými doménami. Lahoda.
Vypadá to cca takto:
resource "acme_certificate" "signalycz" {
account_key_pem = acme_registration.reg.account_key_pem
common_name = "signaly.cz"
subject_alternative_names = ["*.signaly.cz"]
certificate_p12_password = random_password.acme_signalycz_password.result
dns_challenge {
provider = "cloudflare"
}
}
resource "azurerm_app_service_certificate" "signalycz_cert" {
name = "signalycz-cert"
resource_group_name = data.azurerm_resource_group.signalycz.name
location = data.azurerm_resource_group.signalycz.location
pfx_blob = acme_certificate.signalycz.certificate_p12
password = acme_certificate.signalycz.certificate_p12_password
}
resource "azurerm_app_service_custom_hostname_binding" "signalycz" {
hostname = "signaly.cz"
app_service_name = "signalycz"
resource_group_name = data.azurerm_resource_group.signalycz.name
}
resource "azurerm_app_service_certificate_binding" "signalycz" {
hostname_binding_id = azurerm_app_service_custom_hostname_binding.signalycz.id
certificate_id = azurerm_app_service_certificate.signalycz_cert.id
ssl_state = "SniEnabled"
}
A to je pro dnešek vše :)
Nevim, proc to ctu az ted, ale je to skvela zprava!
Pro přidání komentáře se musíš přihlásit nebo registrovat na signály.cz.