Zum Inhalt springen

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.

Terminal-Fenster
sudo docker network create proxy-network

Verzeichnis anlegen

Terminal-Fenster
mkdir caddy
cd caddy
mkdir data
mkdir config
touch Caddyfile docker-compose.yml

Caddyfile

.../caddy/Caddyfile
{
acme_ca https://acme.zerossl.com/v2/DV90
email mail@hello.com
}
homepage.domain.de {
reverse_proxy homepage:80
}

Beispieldienst

Als Beispieldienst nehme ich einen Web-Server.

Terminal-Fenster
mkdir homepage
cd homepage
mkdir html
touch html/index.html
touch docker-compose.yml
.../homepage/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Homepage</h1>
<p>Dies ist die Homepage.</p>
</body>
</html>
.../homepage/docker-compose.yml
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
Terminal-Fenster
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.

Terminal-Fenster
cd [...]/caddy
.../caddy/docker-compose.yml
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
Terminal-Fenster
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.

.../caddy/Caddyfile
{
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.

Update

Durch Docker ist das Update von Caddy sehr einfach. Es muss lediglich das Image aktualisiert werden.

Terminal-Fenster
sudo docker compose pull
sudo docker compose down
sudo docker compose up -d