Documentation
Le rôle documentation déploie sur le VPS le site statique généré par Astro Starlight et configure Caddy pour le rendre accessible en HTTPS.
Il est responsable de :
- vérifier que le build Starlight existe ;
- créer le répertoire de publication sur le VPS ;
- synchroniser les fichiers du site ;
- appliquer les propriétaires et permissions attendus ;
- supprimer les anciennes configurations Caddy ;
- déployer la configuration Caddy du site ;
- valider et recharger Caddy ;
- vérifier que le site répond correctement en HTTPS.
Fonctionnement
Section titled “Fonctionnement”La documentation est construite depuis le dossier docs via la commande npm run build qui génère le site statique.
Astro génère alors le site statique dans le dossier suivant :
docs/dist/La synchronisation utilise l’option delete. Les fichiers qui n’existent plus dans le build local sont donc également supprimés
du VPS.
Le rôle applique ensuite l’utilisateur et le groupe caddy à l’ensemble des fichiers déployés.
Enfin, une configuration Caddy est ajoutée afin de publier directement les fichiers statiques avec la directive file_server.
Structure du rôle
Section titled “Structure du rôle”roles/documentation/├── defaults/│ └── main.yml # Variables du rôle├── handlers/│ └── main.yml # Rechargement de Caddy si nécessaire├── tasks/│ └── main.yml # Tâches de déploiement└── templates/ └── documentation.conf.j2 # Virtual host de la documentationArchitecture
Section titled “Architecture”Client │ ▼Caddy │ file_server ▼/var/www/documentationVariables
Section titled “Variables”Les variables sont contenues dans le fichier main.yml dans le dossier defaults.
Variables globales
Section titled “Variables globales”| Variable | Type | Description |
|---|---|---|
documentation_domain |
chaîne de caractères | Nom de domaine public de la documentation |
documentation_build_directory |
chaîne de caractères | Chemin local vers le build Starlight |
documentation_web_root |
chaîne de caractères | Répertoire de publication sur le VPS |
documentation_caddy_config |
chaîne de caractères | Destination de la configuration Caddy |
documentation_legacy_caddy_configs |
liste de chaînes | Anciennes configurations Caddy à supprimer |
Exemple de fichier de configuration
Section titled “Exemple de fichier de configuration”documentation_domain: docs.corentin-talour.fr
documentation_build_directory: "{{ playbook_dir }}/../docs/dist"documentation_web_root: /var/www/documentationdocumentation_caddy_config: /etc/caddy/sites/documentation.confdocumentation_legacy_caddy_configs: - /etc/caddy/sites/docs.confConfiguration Caddy
Section titled “Configuration Caddy”Le template documentation.conf.j2 génère une configuration semblable à celle-ci :
docs.corentin-talour.fr { root * /var/www/documentation
file_server}La directive root indique le répertoire contenant le site.
La directive file_server demande à Caddy de servir directement les fichiers statiques.
Caddy gère automatiquement le certificat TLS du domaine, à condition que le DNS soit correctement configuré et que le VPS soit accessible depuis Internet.
Déploiement
Section titled “Déploiement”Le rôle réalise les opérations suivantes :
- Il vérifie sur la machine exécutant Ansible que le fichier
dist/index.htmlexiste. - Il interrompt le playbook si le build Starlight est absent.
- Il crée le répertoire
/var/www/documentation. - Il définit
caddycomme utilisateur et groupe propriétaires du répertoire. - Il synchronise le contenu du build dans le répertoire web avec
rsync. - Il supprime du VPS les fichiers qui ne sont plus présents dans le build.
- Il applique récursivement l’utilisateur et le groupe
caddyaux fichiers déployés. - Il supprime les anciennes configurations listées dans
documentation_legacy_caddy_configs. - Il génère
/etc/caddy/sites/documentation.confdepuis le template. - Il valide la configuration complète de Caddy.
- Il exécute immédiatement les handlers en attente.
- Il recharge Caddy lorsqu’un changement le nécessite.
- Il vérifie que le site répond avec un statut HTTP
200.
Synchronisation des fichiers
Section titled “Synchronisation des fichiers”La synchronisation est réalisée avec le module ansible.posix.synchronize.
Il s’appuie sur rsync pour copier le contenu du build vers le VPS :
- name: Synchronize Starlight build ansible.posix.synchronize: src: "{{ documentation_build_directory }}/" dest: "{{ documentation_web_root }}/" archive: true delete: true owner: false group: false rsync_opts: - "--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r"Les permissions appliquées sont les suivantes :
- le propriétaire peut lire, écrire et traverser les répertoires ;
- le groupe et les autres utilisateurs peuvent lire et traverser les répertoires ;
- le propriétaire peut lire et modifier les fichiers ;
- le groupe et les autres utilisateurs peuvent lire les fichiers.
L’option delete: true garantit que le contenu du VPS correspond exactement au build local.
Gestion des anciennes configurations
Section titled “Gestion des anciennes configurations”Le rôle supprime les fichiers contenus dans la variable documentation_legacy_caddy_configs.
Par défaut, le fichier suivant est supprimé :
/etc/caddy/sites/docs.confCette étape permet d’éviter que deux configurations Caddy différentes utilisent le même nom de domaine.
Pour supprimer plusieurs anciennes configurations :
documentation_legacy_caddy_configs: - /etc/caddy/sites/docs.conf - /etc/caddy/sites/old-documentation.confSi aucune ancienne configuration ne doit être supprimée :
documentation_legacy_caddy_configs: []Handler
Section titled “Handler”Le rôle contient un handler chargé de recharger Caddy :
- name: Reload Caddy ansible.builtin.systemd: name: caddy state: reloadedIl est déclenché lorsqu’une des opérations suivantes modifie le VPS :
- la synchronisation du site ;
- la suppression d’une ancienne configuration ;
- la modification de la configuration Caddy.
La tâche flush_handlers applique les changements avant la vérification HTTP finale.
Le service Caddy est rechargé et non redémarré. Cela permet d’appliquer la nouvelle configuration sans arrêter complètement le service.
Déploiement automatique
Section titled “Déploiement automatique”Le workflow Forgejo construit et déploie automatiquement la documentation lors d’une modification de l’un des éléments suivants :
- le dossier
docs/; - le rôle
roles/documentation/; - le playbook
playbooks/deploy-documentation.yml; - le fichier
playbooks/requirements.yml; - l’inventaire ;
- le workflow de déploiement.
Le pipeline réalise les opérations suivantes :
- récupération du dépôt ;
- installation des dépendances système ;
- installation des dépendances Starlight avec
npm ci; - construction du site avec
npm run build; - vérification de la présence de
docs/dist/index.html; - installation d’Ansible ;
- installation des collections Ansible ;
- configuration de la clé SSH ;
- ajout du VPS aux hôtes SSH connus ;
- configuration du mot de passe Ansible Vault ;
- test de la connexion Ansible ;
- exécution du playbook ;
- vérification finale du site avec
curl.
Le workflow peut également être lancé manuellement grâce à workflow_dispatch.
Vérification manuelle
Section titled “Vérification manuelle”Vérifier que le site répond
Section titled “Vérifier que le site répond”curl -I https://docs.corentin-talour.fr/Résultat attendu :
HTTP/2 200Valider la configuration Caddy
Section titled “Valider la configuration Caddy”caddy validate \ --config /etc/caddy/Caddyfile \ --adapter caddyfileVérifier l’état du service Caddy :
systemctl status caddyVérifier les fichiers déployés
Section titled “Vérifier les fichiers déployés”ls -la /var/www/documentationVérifier la présence de la page d’accueil
Section titled “Vérifier la présence de la page d’accueil”test -f /var/www/documentation/index.htmlVérifier la configuration du site
Section titled “Vérifier la configuration du site”cat /etc/caddy/sites/documentation.conf