Skip to content

Caddy

Le rôle Caddy installe et configure le reverse proxy utilisé par l’ensemble de l’infrastructure.

Il est responsable de :

  • l’installation de Caddy
  • la configuration HTTPS automatique (Let’s Encrypt)
  • le reverse proxy des applications
  • le déploiement des configurations de Caddy
  • le rechargement de la configuration lors des modifications

Il a été choisi car il est extrêmement simple d’utilisation et permet de gérer les certificats TLS automatiquement via Let’s Encrypt.

Le fichier principal est situé à :

/etc/caddy/Caddyfile

Il contient uniquement la configuration globale et importe les configurations des différents services :

{
email admin@example.com
}
import /etc/caddy/sites/*.conf

Chaque fichier de configuration est généré à partir d’un template Ansible puis déployé dans :

/etc/caddy/sites/

Par exemple :

forgejo.conf
penpot.conf
uptime-kuma.conf
docs.conf

Cette approche permet à chaque application de gérer sa propre configuration sans modifier le fichier principal.

roles/caddy/
├── defaults/
│ └── main.yml # Variables du rôle
├── handlers/
│ └── main.yml # Redémarrage de Caddy si nécessaire
├── tasks/
│ ├─ install.yml # Installation de Caddy
│ └── main.yml # Point d'entrée du rôle
└── templates/
├─ Caddyfile.j2 # Configuration principale de Caddy
├─ forgejo.conf.j2 # Virtual host de Forgejo
├─ penpot.conf.j2 # Virtual host de Penpot
├─ site.conf.j2 # Virtual host de la documentation
└── uptime-kuma.conf.j2 # Virtual host d'Uptime Kuma

Les variables sont contenues dans le fichier main.yml dans le dossier defaults.

Variable Description
caddy_admin_email Adresse à contacter en cas de problème
caddy_main_domain Nom de domaine
caddy_www_domain Nom de domaine www
caddy_site_root Emplacement du site internet Projet Davai
Variable Description
caddy_<service>_domain Nom de domaine
caddy_<service>_upstream Adresse du service Docker

Le rôle effectue les opérations suivantes :

  1. Installation des dépendances nécessaires à l’ajout du dépôt officiel Caddy.
  2. Ajout du dépôt officiel Caddy.
  3. Mise à jour du cache APT si le dépôt vient d’être ajouté.
  4. Installation de Caddy.
  5. Création des répertoires :
    • /etc/caddy/sites
    • /var/www/site
  6. Déploiement du fichier principal Caddyfile.
  7. Déploiement des configurations des différents sites :
    • site.conf
    • forgejo.conf
    • penpot.conf
    • uptime-kuma.conf
  8. Validation complète de la configuration avec :
    Terminal window
    caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
  9. Activation du service Caddy au démarrage.
  10. Démarrage du service Caddy.
  11. Rechargement automatique de Caddy lorsqu’une configuration est modifiée.

Le rôle contient un handler chargé de redémarrer Caddy lorsque l’un des templates a été modifié.

Le handler est défini dans le fichier suivant handlers/main.yml.

Le handler est appelé par la tâche qui ajoute/modifie les templates.

La directive notify déclenche le handler uniquement lorsque le fichier de configuration a réellement été modifié.

Cela permet d’éviter un redémarrage inutile du service à chaque exécution du playbook.

Pour publier une nouvelle application derrière Caddy :

  1. créer un template <service>.conf.j2
  2. définir les variables du domaine et de l’upstream dans le fichier main.yml contenu dans le dossier defaults du projet Infra
  3. Dans le fichier install.yml contenu dans le dossier tasks, ajouter une nouvelle étape dans le playbook qui permet de déployer le template créé dans le VPS à l’endroit suivant /etc/caddy/sites/
  4. exécuter le playbook Ansible
  5. vérifier que la configuration est valide

Vérifier que le service est actif :

Terminal window
systemctl status caddy

Valider la configuration :

Terminal window
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile

Tester une application :

Terminal window
curl -I https://forgejo.corentin-talour.fr

Résultat attendu :

HTTP/2 200

Afficher les journaux :

Terminal window
journalctl -u caddy -f

Vérifier les fichiers de configuration :

Terminal window
ls /etc/caddy/sites/

Valider la configuration avant un rechargement :

Terminal window
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile