Caddy mit Cloudflare konfigurieren
Caddy ist eine perfekte Alternative zu nginx. Die Syntax von caddy
ist deutlich einfacher als die von nginx
und auch eingebaute Features wie automatische SSL-Zertifikate machen Caddy zu einem wunderbaren Webserver.
Ein Problem gibt es aber jedoch wie bei fast allen Webservern: die Konfiguration mit Cloudflare. Diese ist bei Caddy meiner Meinung nach aktuell alles andere als einfach, weshalb ich gerade diesen Blog-Artikel schreibe.
Die Installation von Caddy und des Cloudflare Plugins
Wenn man Caddy mit dem Cloudflare Plugin verwenden will, muss man Caddy anders bauen und kann nicht einfach die Standard-Version des jeweiligen Package-Managers verwenden.
Allerdings würde ich gerne alle Vorteile der Verwaltung des Package-Managers (wie z.B. das Aufsetzen von Systemd usw.) haben. Hierfür gibt es eine Lösung, diese beschreibe ich jetzt mit dem Beispiel eines Debian-Systems:
Standard-Caddy installieren
Zuerst installieren wir das Standard-Caddy Paket mit apt
:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Custom-Caddy bauen
Nun wechseln wir ins Home-Verzeichnis (cd ~
) und bauen unseren eigenen Caddy mit xcaddy
. Dafür installieren wir zuerst xcaddy
:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-xcaddy-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list
sudo apt update
sudo apt install xcaddy
Nun können wir Caddy mit dem Cloudflare-Plugin bauen:
xcaddy build --with github.com/caddy-dns/cloudflare
Konfiguration der beiden Versionen
Damit wir jetzt beide Versionen nutzen können, unsere eigene Version jedoch als Standardwert gesetzt wird, führen wir die folgenden Befehle aus:
sudo dpkg-divert --divert /usr/bin/caddy.default --rename /usr/bin/caddy
sudo mv ./caddy /usr/bin/caddy.custom
sudo update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.default 10
sudo update-alternatives --install /usr/bin/caddy caddy /usr/bin/caddy.custom 50
Konfiguration auf CloudFlare
Im Web-Interface von Cloudflare erstellen wir jetzt unter Benutzer-Icon > “My Profile” > “API Tokens” einen neuen API-Token mit dem Template “Edit zone DNS”. In den anschließenden Feldern können wir unsere Webseite auswählen und den Zugriff auf unsere Webserver-IP-Adresse beschränken.
Wir sollten zudem unter Webseite > “SSL/TLS” > “Overview” die Einstellung “Full” setzen. Mit “Flexible” hatte ich Probleme bei Caddy (jedoch nicht bei nginx).
Konfiguration der Caddyfile
Die Caddyfile (/etc/caddy/Caddyfile
) kann wie folgt konfiguriert werden:
webseite.de {
tls {
dns cloudflare HIER-DER-CLOUDFLARE-TOKEN
}
reverse_proxy h2c://localhost:8080
}
Wobei HIER-DER-CLOUDFLARE-TOKEN
selbsterklärend mit dem Cloudflare-Token ersetzt werden sollte oder auch eine Umgebungsvariable genutzt werden kann. (Für die Umgebungsvariable setzt man {env.CLOUDFLARE_AUTH_TOKEN}
an der Stelle des Tokens)
Alles ab reverse_proxy
sieht natürlich je nach Anwendung unterschiedlich aus.
Anmerkungen
Mit diesem Setup wird unsere selbst gebaute Caddy Version nicht automatisch von apt
aktualisiert. D.h. wir müssen uns selbst darum kümmern. Hierfür habe ich aber schon eine Lösung erstellt: Autoupdate prüft, ob es neue Versionen gibt und baut dann Caddy zusammen mit dem Cloudflare Plugin.
Zudem sollte die Caddyfile (/etc/caddy/Caddyfile
) regelmäßig gesichert werden. (Auch hierfür habe ich eine Lösung gebaut, die ich evtl. veröffentlichen werde)
Kommentare
Sie können Ihr Fediverse-Konto (z. B. Mastodon und viele andere) verwenden, um auf diesen Beitrag zu antworten.