Caddy mit Cloudflare konfigurieren

Datum: Donnerstag, 16. Februar 2023

Tag(s): Caddy Cloudflare Konfigurieren Nginx Webserver Tutorial

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.