1
Deploiement
Nesquiik edited this page 2026-09-05 13:28:49 +02:00
Déploiement
Architecture de prod
Internet/LAN → Traefik (10.1.21.101, TLS Let's Encrypt) → http://10.1.21.13:8080
│
┌─────────────┴──────────────┐
│ edge (Caddy, conteneur) │
│ - sert le build React │
│ - reverse-proxy /auth, │
│ /users, /tamagotchis, │
│ /friendships, /shop, │
│ /health → backend │
└─────────────┬──────────────┘
│ réseau docker interne
┌─────────────────────────────┼─────────────────────┐
│ │ │
backend (uvicorn) celery (worker+beat) postgres / redis
- Serveur :
10.1.21.13(Ubuntu 26.04, 4 vCPU, 1.5 Go RAM), compte systèmeansiblepour le provisioning, compte applicatif dédiétamagotchipour faire tourner la stack. - Un seul port publié côté hôte :
8080(le conteneuredge). Tout le reste (postgres, redis, backend, celery) reste interne au réseau Docker. - Pare-feu UFW :
22/tcpouvert,8080/tcpautorisé uniquement depuis10.1.21.0/24(le sous-réseau où vit Traefik,10.1.21.101). - Domaine :
tamagotchi.nesquiikhost.fr, TLS terminé par Traefik sur10.1.21.101(géré manuellement côté Traefik, pas par ce dépôt) — route à créer :Host(tamagotchi.nesquiikhost.fr)→http://10.1.21.13:8080. - Frontend et API sont servis sous le même domaine (le conteneur
edgefait aussi reverse-proxy) : ça évite tout souci de cookie cross-origin sur le refresh token (httpOnly +sameSite=strict).
Provisioning (premier déploiement, ou après un changement d'infra)
Tout est dans ansible/ à la racine du dépôt de code.
cd ansible
ansible-galaxy collection install -r requirements.yml # une fois, sur le poste qui lance le playbook
ansible-playbook -i inventory.ini playbook.yml \
--vault-password-file ~/.secrets/tamagotchi_ansible_vault_pass.txt
Le playbook est idempotent : on peut le rejouer sans risque (il installe Docker, crée l'utilisateur tamagotchi, configure le pare-feu, dépose les secrets, met en place les backups, clone le dépôt et lance le premier déploiement).
Mot de passe du vault : stocké hors du dépôt (demander à Nesquiik). Sans lui, impossible de déchiffrer ansible/group_vars/prod/vault.yml (SECRET_KEY, REFRESH_SECRET_KEY, mot de passe Postgres).
Prérequis avant de lancer le playbook la première fois
- Le compte
ansibledoit exister sur le serveur cible avec un accès SSH par clé (déjà le cas pour10.1.21.13). - La clé publique
ansible/files/repo_read_key.pubdoit être enregistrée comme Deploy Key en lecture seule sur le dépôt Forgejo (Settings→Deploy Keys). - Le secret
DEPLOY_SSH_KEY(contenu deansible/files/deploy_key, la clé privée) doit être configuré dans Forgejo (Settings→Actions→Secrets) pour que le CI puisse déclencher un déploiement.
Premier déploiement effectué le 2026-09-05
Déployé et vérifié : /health répond {"status":"ok"}, le frontend est servi, tous les conteneurs sont healthy, le pare-feu restreint bien l'accès au port 8080 au sous-réseau Traefik.