Installation
Beschreibung:
Caddy ein letsencrypt Docker Proxy/Agent der Automatisch auch Zertifikate verlängert.
Caddy besteht aus einem Containerund einer Config Datei für die Domänen
Installation
Docker installieren
apt install curl docker.io docker-compose
Beispiel Konfig für einen apache2 der auf http port 8080 lauscht und den Caddy der auf Port 80 und 443 lauscht.
Port 80 wird auf 443 umgeleitet.
Der Port 443 wieder rum an 8080.
In der Composer Datei haben wir den port bei Apache rausgenommen, weil er auf 8080 im internet Docker Netz lauscht
Verzeichnisse erstellen
mkdir caddy_data
mkdir caddy_config
Die Compose Datei
version: '3.8'
services:
apache:
image: httpd:latest
container_name: apache-webserver
#ports:
# - "8080:8080"
volumes:
- ./apache_html:/usr/local/apache2/htdocs/
restart: unless-stopped
caddy:
image: caddy:latest
container_name: caddy-reverse-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
restart: unless-stopped
Nun noch die Caddfile anlegen
Caddyfile für die Nutzung von Lets Encrypt
nano Caddyfile
Inhalt, wenn man es erst testen möchte mit Staging einfach den Kommentar entfernen.
example.com {
reverse_proxy http://<servicename_docker_name>:8080
tls <deine_emailadresse> {
#ca https://acme-staging-v02.api.letsencrypt.org/directory
}
}
Caddyfile was selbst signiertes Zertifikat nutzen soll
Wir können einen Domain Namen angeben wenn wir einen eigenen DNS Server Betreiben, ansonsten Hostname oder ip Adressee angeben.
Es wird im Arbeitsspeicher generiert und wird somit nicht erneuert. Eine Erneuerung kann erzwungen werden in dem Caddy neu gestartet wird. Allerdings muss dann erneut das Zertifikat zur Ausnahme hinzugefügt werden.
Es muss unbedingt ein Domänen Namen verwendet werden!!!
Wenn kein eigener DNS Server vorhanden dann in die hosts Datei eintragen. IP Adresse geht nicht!!!!
example.local.lan {
reverse_proxy http://<servicename_docker_name>:8080
tls internal
}
Timer für den restart des Caddy wenn es ein self signed Zertifikat ist
Erstelle Systemd Dienst Datei
nano /etc/systemd/system/docker-container-restart.service
Inhalt:
[Unit]
Description=Restart Docker container every 6 days
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
Environment="CONTAINER_NAME=caddy" # Hier den Namen des Containers anpassen
ExecStart=/usr/bin/docker restart $CONTAINER_NAME
[Install]
WantedBy=multi-user.target
Erstelle Systemd Timer Datei
nano /etc/systemd/system/docker-container-restart.timer
Inhalt:
[Unit]
Description=Run Docker container restart service every 6 days
[Timer]
OnCalendar=*-*-* 00:00/10:00:00 # 10 Stunden
Persistent=true
[Install]
WantedBy=timers.target
Hier für 5 Minuten damit man das Testen kann.
Nach einer änderung muss immer der Daemon neugetartet werden und der Timer auch
OnCalendar=*:0/5
Systemd Daemon reload und Timer aktivieren
sudo systemctl daemon-reload
sudo systemctl enable --now docker-container-restart.timer
Fertig