Zum Hauptinhalt 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.

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

.../caddy/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
.../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
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
.../caddy/docker-compose.yml
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.

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