Playbooks de déploiement du site iarbre.fr (Hugo statique).
deploy/
├── ansible.cfg
├── hosts # Inventaire (prod, preprod, feature)
├── vault.key # Mot de passe du vault (gitignored)
├── website.yml # Playbook principal : build + serve via nginx
├── cleanup.yml # Suppression d'un environnement feature
├── group_vars/
│ ├── all/
│ │ ├── vars.yml # Variables communes
│ │ ├── cross_env_vars.yml
│ │ └── cross_env_vault.yml # Vault chiffré (credentials)
│ ├── prod/vars.yml
│ ├── preprod/vars.yml
│ └── feature/vars.yml # Variables paramétrées par `branch`
└── telescoop-deploy/ # Rôles et tâches partagés (sous-module)
Le vault Ansible est chiffré avec vault.key (jamais committé).
# Voir le contenu
ansible-vault view group_vars/all/cross_env_vault.yml
# Éditer
ansible-vault edit group_vars/all/cross_env_vault.ymlVariables sensibles :
vault_website_username/vault_website_password— credentials htpasswd (preprod, feature)vault_github_actions_ssh_private_key— clé SSH consommée par les workflows CI
- Générer une nouvelle
vault.key:./generate_vault_key_on_first_install.sh
- Initialiser le vault avec les credentials du nouveau projet
- Mettre à jour le secret
ANSIBLE_VAULT_KEYsur GitHub - Premier déploiement : Ansible génère une clé SSH
id_ed25519_websitesur le serveur — la clé publique doit être ajoutée comme deploy key read-only au repo GitHub :ssh -p 42722 ubuntu@<host> "sudo cat /home/iarbre/.ssh/id_ed25519_website.pub" gh repo deploy-key add /dev/stdin -R TelesCoop/iarbre-website -t "<host> deploy key"
- Relancer le playbook — le clone réussit cette fois.
Le serveur héberge aussi le projet iarbre (carte interactive). Pour éviter tout conflit de chemins :
base_project_slug: iarbre_website(distinct deiarbre)- Deploy key SSH dédiée :
id_ed25519_website(vsid_ed25519_backendpour iarbre) - L'utilisateur Unix
iarbre(UID 10045) est partagé — c'est intentionnel pour mutualiser les permissions.
# Vérifier sans appliquer
ansible-playbook website.yml -l preprod --check --diff
# Forcer un rebuild même sans changement de code
ansible-playbook website.yml -l preprod -e force_update=true
# Supprimer un environnement feature
ansible-playbook cleanup.yml -l feature -e branch=<branch-name>