5.7 KiB
OPS_COCKPIT — Exploitation “cockpit” (DS220+ / DSM 7.3)
Dernière mise à jour : 2026-01-29
Objectif : déployer en blue/green (2 slots), basculer via DSM Reverse Proxy, rollback en ~10 secondes.
1) Repères (à ne pas confondre)
- Dossier NAS :
/volume2/docker/archicratie-web/current - Domaine site :
https://archicratie.trans-hands.synology.me - Gitea public :
https://gitea.archicratie.trans-hands.synology.me - Slot BLUE : conteneur
archicratie-web-blue→127.0.0.1:8081 -> 80 - Slot GREEN : conteneur
archicratie-web-green→127.0.0.1:8082 -> 80 - DSM Reverse Proxy pointe soit vers 8081 soit vers 8082 (c’est ça la bascule)
💡 Les couleurs n’ont pas de “sens métier”.
Le slot pointé par DSM = PRODUCTION. L’autre = pré-prod / candidat.
2) Commandes “état des lieux” (30 secondes)
en bash cd /volume2/docker/archicratie-web/current
docker compose ps docker inspect -f '{{.State.Health.Status}}' archicratie-web-blue docker inspect -f '{{.State.Health.Status}}' archicratie-web-green
Test local direct (depuis le NAS)
curl -I http://127.0.0.1:8081/ | head curl -I http://127.0.0.1:8082/ | head
Pour voir quelle version est SERVIE par DSM :
curl -kI https://archicratie.trans-hands.synology.me/ | head
3) Déploiement standard (build sur slot inactif)
Hypothèse : DSM pointe actuellement sur 8081 (BLUE) → on déploie sur GREEN (8082).
3.1 Pré-check (obligatoire)
cd /volume2/docker/archicratie-web/current ls -la docker-compose.yml Dockerfile nginx.conf .env cat .env
3.2 Build GREEN (image + dist + pagefind)
cd /volume2/docker/archicratie-web/current
export DOCKER_BUILDKIT=1 export COMPOSE_DOCKER_CLI_BUILD=1
docker compose build --no-cache web_green
3.3 Démarrer GREEN
docker compose up -d --force-recreate web_green docker compose ps
3.4 Smoke test (GREEN)
./scripts/smoke.sh 8082
3.5 Health + logs (GREEN)
docker inspect -f '{{.State.Health.Status}}' archicratie-web-green docker compose logs -f --tail=80 web_green
4) Basculer PROD (DSM) — 10 secondes
Dans DSM 7.3 :
Panneau de configuration → Portail des applications → Proxy inversé
Ouvre la règle du host :
Source : https / archicratie.trans-hands.synology.me / port 443
Destination :
Protocole : http
Hôte : 127.0.0.1
Port : 8082 (pour basculer vers GREEN)
Enregistre.
Validation rapide :
Dans ton navigateur : recharge le site (Ctrl+F5)
Ou en shell :
curl -kI https://archicratie.trans-hands.synology.me/ | head
5) Rollback (si souci) — 10 secondes
Dans DSM → même écran → repasse Destination Port à 8081.
Optionnel (si GREEN est “pollué” / à arrêter) : docker compose stop web_green docker compose logs --tail=200 web_green
6) Dépannage “scénarios typiques”
A) DSM renvoie HTTP 504 (timeout)
Symptôme : curl -kI https://archicratie... → 504, et DSM affiche “noindex”.
Causes probables
Le conteneur n’écoute pas / est down
Le port DSM ne correspond pas au bon slot
Bind local absent (ports mal écrits)
Santé KO (mais DSM bascule quand même et tombe sur un truc mort)
Checklist
docker compose ps curl -I http://127.0.0.1:8081/ | head curl -I http://127.0.0.1:8082/ | head docker compose logs --tail=200 web_blue docker compose logs --tail=200 web_green
Dans DSM : vérifie Destination = http://127.0.0.1:808X
⚠️ Important : ne pas ouvrir 8081/8082 au WAN. Le reverse proxy DSM accède en loopback. Les ports restent en local (127.0.0.1:...).
B) Gitea : 404 sur la redirection “Proposer”
Ca arrive si OWNER/REPO n’existent pas, ou si la casse est mauvaise.
1) Vérifier les variables injectées
cat .env
2) Vérifier que le repo existe vraiment
BASE="https://gitea.archicratie.trans-hands.synology.me" OWNER="Archicratia" REPO="archicratie-edition"
curl -kI "$BASE/$OWNER/$REPO/" | head -n 12
3) Vérifier via API
curl -ks "$BASE/api/v1/users/$OWNER" | head -c 250; echo curl -ks "$BASE/api/v1/users/$OWNER/repos?limit=100" | grep -o '"full_name":"[^"]*"' | head
4) Si c’est bon côté Gitea mais Proposer continue à viser l’ancien repo
→ tu as juste une image web construite avec les anciennes valeurs. Rebuild le slot.
docker compose build --no-cache web_green docker compose up -d --force-recreate web_green ./scripts/smoke.sh 8082
5) Contrôle dans le HTML servi
docker exec -it archicratie-web-green sh -lc
'grep -Rin "const GITEA_BASE" /usr/share/nginx/html | head -n 20'
C) “Proposer” échoue (pas de ticket / pas de redirection)
Cas typiques :
JS inline bloqué / non injecté
la page a été rebuild sans les variables publiques
erreur CORS / cookies / mauvais domaine (http vs https)
Check rapide
Ouvre la console navigateur → onglet Network
Vérifie que la redirection pointe bien vers : https://gitea.archicratie.../Archicratia/archicratie-edition/...
Check côté build
docker exec -it archicratie-web-green sh -lc
'grep -Rin "PUBLIC_GITEA" /usr/share/nginx/html | head -n 50'
D) Pagefind ne marche plus (recherche vide / pagefind.js absent)
Check HTTP
curl -I http://127.0.0.1:8082/pagefind/pagefind.js | head
Check fichier dans le conteneur
docker exec -it archicratie-web-green sh -lc 'ls -la /usr/share/nginx/html/pagefind | head'
Causes
build lancé via astro build au lieu de npm run build (donc postbuild non exécuté)
pagefind a échoué pendant postbuild
dist non généré / non copié dans nginx
Remède
docker compose build --no-cache web_green docker compose up -d --force-recreate web_green ./scripts/smoke.sh 8082
7) Logs “propres”
docker compose logs --tail=200 web_blue docker compose logs --tail=200 web_green
Si tu veux suivre en live :
docker compose logs -f web_green