Let's Encrypt Zertifikate mit Hetzner Cloud-Console-DNS erneuern

Ich betreibe im Homelab so einige Dienste auf einem openSUSE microOS Server, die mit TLS-Zertifikaten von Let's Encrypt ausgestattet sind. Mein Domain-Provider Hetzner hat vor einiger Zeit seine DNS-API umgestellt und damit musste leider auch das bisher von mir genutzte certbot-dns-hetzner Container-Image ersetzt werden. Da mein OS immutable ist (und ich es gerne auch so wenig wie möglich modifiziere), sollte wieder ein Container her, der das für mich erledigt - aber diesmal hab ich leider nichts fertiges gefunden, also selbst schlau machen. Das Ergebnis gibt's in einem kleinen how-to, vielleicht kann der eine oder andere damit etwas anfangen.

Als erstes braucht man ein API-Token, das man sich bei Hetzner in der Cloud-Konsole organisieren kann. Unter Sicherheit->API->Tokens ein neues Token erstellen, Schreib-/Lese-Zugriff auswählen. Token merken.

Dann auf meiner Maschine ein Verzeichnis erstellen:

mkdir /var/container/certbot
cd /var/container/certbot

Dort mit einem Editor der Wahl die Datei hetzner-cloud.ini anlegen und mit folgendem Inhalt befüllen:

# Hetzner Cloud API Token
dns_hetzner_cloud_api_token = <hier_token_einfügen>

Danach die Rechte passend setzen:

sudo chmod 600 hetzner-cloud.ini

Ein Containerfile erstellen mit folgendem Inhalt:

FROM python:3

WORKDIR /usr/src/app

RUN pip install certbot certbot-dns-hetzner-cloud

COPY . .

CMD [ "certbot" ]

Und das Containerimage bauen lassen. Ich nutze podman, aber das klappt auch mit Docker 1:1

podman build -t certbot-image .

Zum Schluss noch das ganze Ding starten und die Zertifikate liegen im Unterordner "live". Da ich immer mal wieder Schwierigkeiten hatte, dass die DNS-Einträge nicht sofort da waren, ist da eine 60 Sekunden Wartezeit drin.

podman run -it \
--name certbot \
--replace \
-v ${PWD}:/etc/letsencrypt:z \
certbot-image:latest \
certbot certonly \
--email "deine@email.de" \
--agree-tos \
--authenticator dns-hetzner-cloud \
--dns-hetzner-cloud-propagation-seconds=60 \
-d "deine-domain.de"

Für das Erneuern der Zertifikate reicht natürlich dann der letzte Befehl oder man kann das Ganze auch direkt als systemd-timer automatisieren.