Caddy Konfiguration

Caddy ist der Reverse Proxy für alle Dreylo-Services. Konfiguration in /home/revolt/Caddyfile.

Caddy neu laden

# Konfiguration neu laden (ohne Restart)
docker exec stoat-caddy-1 caddy reload --config /etc/caddy/Caddyfile

Oder Container neu starten

docker compose restart caddy

Caddyfile Grundstruktur

chat.dreylo.com {
    # API-Requests
    route /api/* {
        reverse_proxy http://api:14702
    }

# Custom Profile API
route /profile-api* {
uri strip_prefix /profile-api
reverse_proxy http://dreylo-profile-api:3010
}

# WebSocket für Events
route /events* {
reverse_proxy http://events:9000
}

# Frontend (alles andere)
route {
reverse_proxy http://web:80
}
}

Neue Route hinzufügen

Beispiel: Neuen Service unter /my-service/ erreichbar machen:

route /my-service* {
    uri strip_prefix /my-service
    reverse_proxy http://my-container:PORT
}
  1. Caddyfile bearbeiten
  2. Reload: docker exec stoat-caddy-1 caddy reload --config /etc/caddy/Caddyfile
  3. Testen: curl https://chat.dreylo.com/my-service/health

Subdomain hinzufügen

Für eine neue Subdomain (z.B. devwiki.dreylo.com):

devwiki.dreylo.com {
    root * /var/www/devwiki.dreylo.com/public
    php_fastcgi unix//run/php/php8.3-fpm.sock
    file_server
}
Bei CloudPanel wird die Subdomain über das Webinterface angelegt und Caddy/Nginx wird automatisch konfiguriert.

TLS / SSL

Caddy verwaltet TLS automatisch via Let's Encrypt. Kein manuelles Eingreifen nötig.

# Zertifikats-Status prüfen
docker exec stoat-caddy-1 caddy list-certificates

Manuell erneuern (selten nötig)

docker exec stoat-caddy-1 caddy renew

Caddy Logs

# Access Logs
docker logs stoat-caddy-1 -f

Nur Fehler

docker logs stoat-caddy-1 2>&1 | grep -i "error\|warn"

Typische Routing-Fehler

502 Bad Gateway

→ Der Ziel-Container ist nicht erreichbar oder läuft nicht.
# Container-Status prüfen
docker ps | grep CONTAINER_NAME

Verbindung testen

docker exec stoat-caddy-1 wget -qO- http://TARGET:PORT/health

Pfad wird nicht korrekt weitergeleitet

→ Prüfen ob uri strip_prefix korrekt ist.
# Testen ohne Strip
curl -v https://chat.dreylo.com/profile-api/health

vs. direkt

docker exec dreylo-profile-api wget -qO- http://localhost:3010/health