Die serversideup/php-Docker-Images erschienen als v4.6.0-beta1 mit der neuen Variable CADDY_ACME_PROFILE. Auf shortlived gesetzt, wählt sie das Kurzzeit-Profil von Let's Encrypt, das einzige Profil, unter dem die CA Zertifikate für IP-Adressen ausstellt. Ein FrankenPHP-Container, der nur über eine IP erreichbar ist, kann damit echtes HTTPS ohne DNS-Eintrag ausliefern. Jay Rogers von Server Side Up kündigte das Feature zusammen mit der Beta an.
Typische Fälle sind Staging-Systeme, interne APIs hinter einem VPN, Demo-Server und selbst gehostete Dashboards. Bisher gab es dafür selbst signierte Zertifikate mit Browser-Warnung oder einen Reverse Proxy mit dem echten Zertifikat. Let's Encrypt hat 6-Tage-Zertifikate und IP-Zertifikate im Januar allgemein verfügbar gemacht. Caddy beherrscht Profil-Auswahl und IP-Identifikatoren, und FrankenPHP bettet Caddy ein, aktuell v2.11.4.
CADDY_ACME_PROFILE ist standardmäßig aus und akzeptiert shortlived, tlsserver oder classic. Mit shortlived fordert Caddy Zertifikate mit 160 Stunden Laufzeit an und erneuert sie alle zwei Tage. Solche Kurzzeit-Zertifikate benötigen nach CA/Browser-Forum-Definition keine Sperrinformationen, das Profil verweist aber weiterhin auf eine CRL. Wer ein Profil setzt, verliert den ZeroSSL-Fallback. Der zweitägige Renewal-Zyklus bedeutet zudem weniger Puffer: Blockiert eine Firewall den Zugriff auf die ACME-API, läuft das Zertifikat nach etwa viereinhalb Tagen ab statt nach Wochen.
Das Feature existiert nur in den Beta-Tags, also auf serversideup/php:8.4-frankenphp-v4.6.0-beta1 pinnen. Das Compose-Setup nutzt SSL_MODE: "full", CADDY_AUTO_HTTPS: "on", CADDY_ACME_PROFILE: "shortlived", CADDY_HTTPS_SERVER_ADDRESS mit der IP und CADDY_GLOBAL_OPTIONS: "default_sni example.com". Der Container läuft unprivilegiert auf 8080 und 8443, daher müssen die Ports 80 und 443 gemappt und für die ACME-Challenge erreichbar sein. Der default_sni-Fallback ist nötig, weil Clients bei Verbindungen zu einer IP kein SNI senden und Caddy sonst kein Zertifikat zuordnen kann.
IPv6-Nutzer sollten vorher testen. Caddy hat die IPv6-Behandlung für IP-Zertifikate erst in Issue #7399 im April korrigiert; v2.11.4 enthält den Fix, aber IPv4 funktioniert schon länger. /config und /data als Volumes mounten: Dort liegen Zertifikate und ACME-Account-Status, und bei Verlust werden bei jedem Neustart neue Zertifikate angefordert. Let's Encrypt erlaubt fünf Zertifikate pro Identifikator-Satz in sieben Tagen, wenige Redeploys können die Woche aufbrauchen.
Außerdem vereinheitlicht die Beta TRUSTED_PROXY über FrankenPHP, NGINX und Apache hinweg, sodass request()->ip() den Besucher statt des Proxys liefert. Erlaubte Werte sind cloudflare (Standard), sucuri, local und off; Docker-interne Bereiche werden mitvertraut. FrankenPHP erhält ein caddyfile-global.d-Verzeichnis, Laravel Nightwatch ein healthcheck-nightwatch-Skript für php artisan nightwatch:status, und AUTORUN_LARAVEL_SKIP_IF_NOT_FOUND lässt Container sauber beenden, wenn Laravel noch fehlt. Als Prerelease gehört die Version nicht auf Systeme, die man sich nicht kaputt machen will.
Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.