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.
Fonctionnement
Section titled “Fonctionnement”Le fichier principal est situé à :
/etc/caddy/CaddyfileIl contient uniquement la configuration globale et importe les configurations des différents services :
{ email admin@example.com}
import /etc/caddy/sites/*.confChaque fichier de configuration est généré à partir d’un template Ansible puis déployé dans :
/etc/caddy/sites/Par exemple :
forgejo.confpenpot.confuptime-kuma.confdocs.confCette approche permet à chaque application de gérer sa propre configuration sans modifier le fichier principal.
Structure du rôle
Section titled “Structure du rôle”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 KumaLes variables
Section titled “Les variables”Les variables sont contenues dans le fichier main.yml dans le dossier defaults.
Variables globales
Section titled “Variables globales”| 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 |
Variables des reverse proxy
Section titled “Variables des reverse proxy”| Variable | Description |
|---|---|
caddy_<service>_domain |
Nom de domaine |
caddy_<service>_upstream |
Adresse du service Docker |
Déploiement
Section titled “Déploiement”Le rôle effectue les opérations suivantes :
- Installation des dépendances nécessaires à l’ajout du dépôt officiel Caddy.
- Ajout du dépôt officiel Caddy.
- Mise à jour du cache APT si le dépôt vient d’être ajouté.
- Installation de Caddy.
- Création des répertoires :
/etc/caddy/sites/var/www/site
- Déploiement du fichier principal
Caddyfile. - Déploiement des configurations des différents sites :
site.confforgejo.confpenpot.confuptime-kuma.conf
- Validation complète de la configuration avec :
Terminal window caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile - Activation du service Caddy au démarrage.
- Démarrage du service Caddy.
- Rechargement automatique de Caddy lorsqu’une configuration est modifiée.
Handler
Section titled “Handler”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.
Ajouter un nouveau service
Section titled “Ajouter un nouveau service”Pour publier une nouvelle application derrière Caddy :
- créer un template
<service>.conf.j2 - définir les variables du domaine et de l’upstream dans le fichier
main.ymlcontenu dans le dossierdefaultsdu projet Infra - Dans le fichier
install.ymlcontenu dans le dossiertasks, ajouter une nouvelle étape dans le playbook qui permet de déployer le template créé dans le VPS à l’endroit suivant/etc/caddy/sites/ - exécuter le playbook Ansible
- vérifier que la configuration est valide
Vérification
Section titled “Vérification”Vérifier que le service est actif :
systemctl status caddyValider la configuration :
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfileTester une application :
curl -I https://forgejo.corentin-talour.frRésultat attendu :
HTTP/2 200Dépannage
Section titled “Dépannage”Afficher les journaux :
journalctl -u caddy -fVérifier les fichiers de configuration :
ls /etc/caddy/sites/Valider la configuration avant un rechargement :
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile