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-network
Verzeichnis anlegen
mkdir caddycd caddymkdir datamkdir configtouch Caddyfile docker-compose.yml
Caddyfile
{ 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:ro
sudo docker compose up -d
Installation
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 [...]/caddy
networks: 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-network
sudo docker compose up -d
Die 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