Direkt zum Hauptinhalt

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.

Hinweis: Ein selbst signiertes Zertifikat ist nur 7 Tage gültig. 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.

 

example.com oder testserver {
    reverse_proxy http://<servicename_docker_name>:8080
    tls self_signed
}


oder

testserver {
    reverse_proxy http://<servicename_docker_name>:8080
    tls self_signed
}

oder

192.168.0.100 {
    reverse_proxy http://<servicename_docker_name>:8080
    tls self_signed
}

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:00/144:00:00  # 6 Tage (6*24 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