Aller au contenu

🔀 Caddy — Reverse Proxy

Rôle

Caddy est le chef d'orchestre des accès web. Chaque requête vers *.galexios.fr passe par Caddy qui la redirige vers le bon service avec un certificat SSL valide automatiquement renouvelé.

Propriété Valeur
Container CT110
IP 192.168.192.110
Ports 80 (redirect HTTPS), 443 (HTTPS)
Config /etc/caddy/Caddyfile

Fonctionnement

sequenceDiagram
    participant A as Appareil
    participant AD as Active Directory .124
    participant C as Caddy .110:443
    participant S as Service cible

    A->>AD: nextcloud.galexios.fr ?
    AD-->>A: 192.168.192.110
    A->>C: HTTPS :443
    Note over C: Certificat SSL valide
    C->>S: HTTP interne
    S-->>C: Reponse
    C-->>A: Reponse chiffree TLS

Caddyfile complet

# ==========================================
# MACROS ET SNIPPETS
# ==========================================

# TLS Cloudflare avec bypass DNS
(cloudflare_tls) {
    tls {
        dns cloudflare "{env.CLOUDFLARE_API_TOKEN}"
        # Override : force Caddy a utiliser Cloudflare/Internet
        # pour la verification ACME (evite la boucle avec l'AD)
        resolvers 1.1.1.1 9.9.9.9
    }
}

# Pour les backends avec certificats auto-signes
(insecure_https) {
    transport http {
        tls_insecure_skip_verify
    }
}

# ==========================================
# INFRASTRUCTURE CORE ET HYPERVISEURS
# ==========================================

proxmox.galexios.fr {
    import cloudflare_tls
    reverse_proxy https://192.168.192.2:8006 {
        import insecure_https
    }
}

proxmoxbackupserver.galexios.fr {
    import cloudflare_tls
    reverse_proxy https://192.168.192.2:8007 {
        import insecure_https
    }
}

# ==========================================
# SECURITE ET RESEAU
# ==========================================

adguard.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.105:80
}

vaultwarden.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.103:80
}

kasm.galexios.fr {
    import cloudflare_tls
    reverse_proxy https://192.168.192.107:443 {
        import insecure_https
    }
}

# ==========================================
# APPLICATIONS
# ==========================================

jellyfin.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.100:8096
}

audiomuseai.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.100:8000
}

calibre.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.101:8083
}

kavita.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.102:5000
}

transmute.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.104:3313
}

homeassistant.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.106:8123
}

immich.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.108:2283
}

nextcloud.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.111:11000
}

stirlingpdf.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.113:8080
}

docs.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.114:80
}

paperless.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.115:8000
}

openwebui.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.116:8080
}

webtrees.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.117:8080
}

guacamole.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.118:8080
}

scrutiny.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.120:8080
}

jupyter.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.121:8888
}

iventoy.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.122:26000
}

journal.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.123:8000
}

adventurelog.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.125:8015
}

Token Cloudflare

Le token API Cloudflare est stocke dans une variable d'environnement CLOUDFLARE_API_TOKEN, jamais en dur dans le Caddyfile.


Ajouter un nouveau service

flowchart LR
    A["1. Installer\nle service (CT_ID)"] --> B["2. config 110\nnano Caddyfile"]
    B --> C["3. Ajouter bloc\nurl.galexios.fr"] --> D["4. caddy validate"]
    D --> E["5. systemctl reload caddy"]
    E --> F["6. config AD\nconfig CT_ID url.galexios.fr"]
    F --> G["Service accessible"]
# Template a copier dans le Caddyfile
nouveauservice.galexios.fr {
    import cloudflare_tls
    reverse_proxy 192.168.192.XXX:PORT
}

Commandes essentielles

# Entrer dans Caddy
config 110

# Etat du service
systemctl status caddy

# Recharger la config (sans coupure)
systemctl reload caddy

# Valider la syntaxe avant reload
caddy validate --config /etc/caddy/Caddyfile

# Logs en temps reel
journalctl -u caddy -f

# Editer la configuration
nano /etc/caddy/Caddyfile

Dépannage

flowchart TD
    ERR["Service inaccessible"] --> Q1{"Caddy tourne ?"}
    Q1 -->|Non| F1["systemctl start caddy"]
    Q1 -->|Oui| Q2{"Certificat valide ?"}
    Q2 -->|Non| F2["systemctl reload caddy\nCaddy renouvelle auto"]
    Q2 -->|Oui| Q3{"IP/port correct ?"}
    Q3 -->|Non| F3["Corriger Caddyfile\n+ reload"]
    Q3 -->|Oui| F4["CT du service\ndémarre ?"]