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ème ansible pour le provisioning, compte applicatif dédié tamagotchi pour faire tourner la stack.
  • Un seul port publié côté hôte : 8080 (le conteneur edge). Tout le reste (postgres, redis, backend, celery) reste interne au réseau Docker.
  • Pare-feu UFW : 22/tcp ouvert, 8080/tcp autorisé uniquement depuis 10.1.21.0/24 (le sous-réseau où vit Traefik, 10.1.21.101).
  • Domaine : tamagotchi.nesquiikhost.fr, TLS terminé par Traefik sur 10.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 edge fait 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

  1. Le compte ansible doit exister sur le serveur cible avec un accès SSH par clé (déjà le cas pour 10.1.21.13).
  2. La clé publique ansible/files/repo_read_key.pub doit être enregistrée comme Deploy Key en lecture seule sur le dépôt Forgejo (SettingsDeploy Keys).
  3. Le secret DEPLOY_SSH_KEY (contenu de ansible/files/deploy_key, la clé privée) doit être configuré dans Forgejo (SettingsActionsSecrets) 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.