Warum Caddy und nicht nginx? #
Caddy ist quasi ein “oneline” Textdokument, welches nach der Installation alle Aufgaben für SSL-Certifikate von Letsencrypt automatisch abruft und aktualisiert. “Installieren und vergessen” ist hier das Zauberwort.
Installation #
Zunächst müssen unter Apt-Distros die Repositorys und Schlüssel geholt werden, Repository update und danach die Installation:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-httpscurl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpgcurl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.listsudo apt updatesudo apt install caddyPorts am Router/Firewall freigeben #
Caddy benötigt zwingend den Port 80 und Port 443. Also den http Port und den https Port. Auch wenn man annimmt, dass andere Webservices diese Ports benötigen. Diese Webservices sollten dann auf höhere Ports umgestellt werden (vierstellig z.B.)
Caddyfile editieren #
Für die Configuration ist nur eine Datei notwendig. Die Caddyfile Datei:
sudo nano /etc/caddy/CaddyfileDer hier enthaltende Erklärungstext kann quasi komplett entfernt werden. Wir benötigen lediglich den folgenden Aufbau:
sub.domain.de {
reverse_proxy 192.168.1.21:3333
} sub.domain.de durch die eigene Domain ersetzen sowie die IP-Nummer und den Port. Es gilt vorher zu testen ob diese IP+Port aktuell auch wirklich zu dem gewünschten Webservice führen.
Caddy systemd ausführen #
Um nun Caddy als systemd Service zu nutzen ist es notwendig den systemd service zum Einen zu aktivieren:
sudo systemctl enable caddy.servicedann den Service starten:
sudo systemctl start caddy.serviceund zu guter Letzt jede Änderung der Caddyfile benötigt einen Neustart des Services, das wird wie folgt gelöst:
sudo systemctl reload caddy.serviceUm den Status zu überprüfen auf eventuelle Fehlermeldungen ist folgende Eingabe notwendig:
sudo systemctl status caddy.serviceCaddy zusätzliche Variablen und Extras #
file_server ist z.b. eine Variable die gerne bei Cloud Anwendungen notwendig ist. Andere Webdienste wie dieses Wiki oder auch Blogs wie Wordpress benötigen kleinere Funktionsergänzungen:
sub.domain.de {
reverse_proxy 192.168.1.21:3333
encode zstd gzip
header / {
Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"
X-Content-Type-Options "nosniff"
X-XSS-Protection "1; mode=block"
X-Robots-Tag "none"
X-Download-Options "noopen"
X-Permitted-Cross-Domain-Policies "none"
Referrer-Policy "no-referrer"
}
}Dies ist beispielhaft für die HSTS Funktionalität, preload in Browsern sowie gzip Komprimierung. Letztendlich alles Verbesserungen für die Geschwindigkeit.
Quellenangaben #
https://caddyserver.com/docs/install#debian-ubuntu-raspbian
Bonus: Caddy in Docker-Compose #
Wer keine Bare-Metal Installation möchte, kann Caddy auch mit Docker-Compose installieren. Dies hat u.A. den Vorteil, sehr einfach DNS-over-Quic zu nutzen bzw. http/3. Der Trick ist als Port auch 443/udp einzusetzen. Wichtig ist nur daran zu denken auch 443 udp in den entprechenden Firewall-Einträgen zu ergänzen. Danach werden quasi alle Dienste und Webdeploys per http/3 im Netz verfügbar gemacht (mit Fallback auf http/2 natürlich)
services:
caddy_reverse_proxy:
image: caddy:latest
restart: unless-stopped
container_name: caddy_proxy
ports:
- 80:80
- 443:443
- 443:443/udp
volumes:
- .Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
networks:
- caddy_net
volumes:
caddy_data: null
caddy_config: null
networks:
caddy_net: null