docs(runbook): add archicratie-web operations runbook
All checks were successful
CI / build-and-anchors (push) Successful in 2m26s
SMOKE / smoke (push) Successful in 17s

This commit is contained in:
2026-02-01 13:31:57 +01:00
parent ccaa8029fb
commit 2f296f4fe4

View File

@@ -0,0 +1,69 @@
# OPS Runbook — Archicratie Web (NAS Synology DS220 + Gitea)
## 0. Objectif
Ce document décrit la procédure **exacte** pour :
- maintenir un état cohérent entre **Local (Mac Studio)**, **Gitea**, **NAS (prod)** ;
- déployer proprement une release Docker (build, smoke, bascule) ;
- éviter les régressions (branches protégées, CI bloquante, rollback).
## 1. Invariants (à ne jamais violer)
1) **La branche `main` sur Gitea = vérité canonique.**
2) La prod NAS doit être **rebuild** depuis `main` (pas de modifications “à la main” non versionnées).
3) Les variables `PUBLIC_GITEA_*` doivent pointer vers **le bon owner/repo** (sinon 404 / login loop).
4) En solo : PR requise OK, mais **0 approval** (sinon blocage). CI doit rester bloquante.
5) Interdiction : token/secret commité dans le repo.
## 2. Topologie (NAS)
- Arborescence :
- `/volume2/docker/archicratie-web/releases/<timestamp>/app`
- `/volume2/docker/archicratie-web/current` (symlink vers release active)
- Services :
- `web_green` → port local typique `127.0.0.1:8082` (smoke)
- (optionnel) `web_blue``127.0.0.1:8081` (ancienne)
- Script :
- `/volume2/docker/archicratie-web/ops/smoke.sh <port>`
## 3. Standard Git (Gitea)
### 3.1 Branches
- `main` : branche de travail et de déploiement (par défaut)
- `master` : branche legacy (archivée / conservée pour compat si nécessaire)
- Stratégie : `master` est soit supprimée, soit alignée sur `main`, mais **pas** utilisée comme axe actif.
### 3.2 Protection branches (solo recommandé)
- `main` :
- ✅ Exiger PR (Require pull request)
- ✅ 0 approval (solo)
- ✅ Bloquer merge si CI KO (Prevent merge if checks fail)
- ✅ Désactiver force-push
- (optionnel) désactiver push direct (selon UI Gitea)
- `master` :
- ✅ Interdire push direct
- ✅ Désactiver force-push
- ✅ Mention “legacy” (si UI le permet)
## 4. Variables denvironnement (cause n°1 des 404)
### 4.1 Variables publiques injectées au build
- `PUBLIC_GITEA_BASE=https://gitea.archicratie.trans-hands.synology.me`
- `PUBLIC_GITEA_OWNER=Archicratia`
- `PUBLIC_GITEA_REPO=archicratie-edition`
### 4.2 Règle dor
- Le site génère des liens `.../<OWNER>/<REPO>/issues/new?...`
- Si OWNER/REPO est faux (ex: `archicratia/archicratie-web`) :
- `/issues` peut marcher
- MAIS `/issues/new` finit en 404 / redirect login / droits
- => corriger `.env` et rebuild
## 5. Déploiement NAS (procédure protocolaire)
### 5.1 Pré-check
Sur NAS :
- Vérifier quon est bien dans `/volume2/docker/archicratie-web/current`
- Charger `.env` (pour build args)
Commandes :
```sh
cd /volume2/docker/archicratie-web/current || exit 1
set -a
. ./.env
set +a
grep -nE '^PUBLIC_GITEA_(BASE|OWNER|REPO)=' .env