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.
caution
Auf einigen Geräten (insbesondere auf fertigen NAS Geräten) ist es nicht möglich, den Port 80 und 443 freizugeben, weil diese Ports bereits von einem anderen Dienst genutzt werden. An dieser Stelle kann dann zunächst ein Macvlan Netzwerk erstellt werden, auf welchem widerrum die Ports 80 und 443 freigegeben werden können.
sudo docker network create proxy-network
Verzeichnis anlegen
mkdir caddy
cd caddy
mkdir data
mkdir config
touch Caddyfile docker-compose.yml
Caddyfile
{
acme_ca https://acme.zerossl.com/v2/DV90
email mail@hello.com
}
homepage.domain.de {
reverse_proxy homepage:80
}
info
In meinem Beispiel wird ZeroSSL genutzt.
Beispieldienst
Als Beispieldienst nehme ich einen Web-Server.
mkdir homepage
cd homepage
mkdir html
touch html/index.html
touch docker-compose.yml
<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Homepage</h1>
<p>Dies ist die Homepage.</p>
</body>
</html>
version: "3.7"
networks:
proxy-network:
external:
name: proxy-network
### 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
version: "3.7"
networks:
proxy-network:
external:
name: proxy-network
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
info
Für Docker Compose Version 1 lautet der Befehl sudo docker-compose up -d
.
info
Befindet man sich im Netzwerk mit einem Router, der vorgeschaltet ist, muss die Portfreigabe von Port 80 und 443 an den Server erfolgen.
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.zerossl.com/v2/DV90
email mail@hello.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
Dank Docker und Docker Compose ist das Updaten von Caddy einfach.
sudo docker compose pull
sudo docker compose down
sudo docker compose up -d