Caddy
Caddy ist ein freier, quelloffener Proxy-Server. Er ist so konzipiert, dass er einfach zu installieren und zu verwenden ist und sich leicht einrichten lässt.
Vorbereitung
Docker Netzwerk
Zunächst sollte ein Docker Netzwerk erstellt werden. Dadurch ist es dann nicht mehr nötig, Ports für jeden einzelnen Dienst freizugeben. Ausreichend sind dann die Ports 80 und 443 für den Proxy Manager sowie ggf. in bestimmten Fällen auch andere.
sudo docker network create proxy-networkVerzeichnis anlegen
mkdir caddycd caddymkdir datamkdir configtouch Caddyfile docker-compose.ymlCaddyfile
{ acme_ca https://acme.zerossl.com/v2/DV90 email mail@hello.com}
homepage.domain.de { reverse_proxy homepage:80}{ acme_ca https://acme-v02.api.letsencrypt.org/directory email mail@hallo.com}
homepage.domain.de { reverse_proxy homepage:80}Beispieldienst
Als Beispieldienst nehme ich einen Web-Server.
mkdir homepagecd homepagemkdir htmltouch html/index.htmltouch docker-compose.yml<!DOCTYPE html><html> <head> <title>Homepage</title> </head> <body> <h1>Homepage</h1> <p>Dies ist die Homepage.</p> </body></html>networks: proxy-network: external: true
### SERVICE ###services: homepage: container_name: homepage image: nginx:latest restart: unless-stopped networks: - proxy-network security_opt: - no-new-privileges:true volumes: - /html:/usr/share/nginx/html:rosudo docker compose up -dInstallation
Der Web-Server läuft zwar schon, aber ohne Caddy ist er nicht zu erreichen. Zunächst muss wieder in das Caddy-Verzeichnis gewechselt werden.
cd [...]/caddynetworks: proxy-network: external: true
services: caddy: image: caddy container_name: caddy restart: unless-stopped ports: - 80:80 - 443:443 volumes: - ./data:/data - ./config:/config - ./Caddyfile:/etc/caddy/Caddyfile:ro networks: - proxy-networksudo docker compose up -dDie vorher erstellte Homepage sollte nun unter homepage.domain.de erreichbar sein.
Zugriffsbeschränkung
Eine Zugriffsbeschränkung auf bestimmte IP-Adressen kann im Caddyfile erfolgen.
{ acme_ca https://acme-v02.api.letsencrypt.org/directory email mail@domain.com}
(LAN_only) { @not_local { not remote_ip 192.168.0.0/16 } respond @not_local 403}
homepage.domain.de { reverse_proxy homepage:80 import LAN_only}Damit dürfen nur noch Geräte aus dem IP-Bereich 192.168.0.0 - 192.168.255.255 auf die Homepage zugreifen.
{ acme_ca https://acme-v02.api.letsencrypt.org/directory email mail@domain.com}
homepage.domain.de { @blocked not remote_ip private_ranges respond @blocked 403 reverse_proxy homepage:80}Damit werden nur die Bereiche 10.0.0.0/8, 127.0.0.1/8, 172.16.0.0/12 und 192.168.0.0/16 zugelassen.
Update
Durch Docker ist das Update von Caddy sehr einfach. Es muss lediglich das Image aktualisiert werden.
sudo docker compose pullsudo docker compose downsudo docker compose up -d