Aller au contenu

EPIDOCS — Runbook (Site down)

Procédure d'urgence

Ce document décrit les étapes à suivre quand le site EPIDOCS est inaccessible. Suivre les étapes dans l'ordre.

Étape 1 : Identifier le problème

# Se connecter au VPS
ssh root@VPS_IP

# Vérifier si le conteneur frontend tourne
docker ps | grep epidocs_frontend
# Si aucun résultat → le conteneur est arrêté → Étape 2

# Vérifier la santé
docker inspect epidocs_frontend_container --format='{{.State.Health.Status}}'
# Si "unhealthy" → Étape 3

# Vérifier si le port répond
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:7012
# Si timeout ou erreur → Étape 3
# Si 502/504 → Étape 4 (problème Nginx)
# Si 200 → Étape 5 (problème DNS/Nginx externe)

Étape 2 : Conteneur arrêté — Redémarrer

cd /root/projects/epidocs/epidocs-frontend

# Vérifier les logs avant de redémarrer
docker logs epidocs_frontend_container --tail 50

# Redémarrer
docker compose -f docker-compose.prod.yml up -d

# Attendre 40 secondes (start_period du healthcheck)
sleep 40

# Vérifier
docker ps | grep epidocs_frontend
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:7012

Étape 3 : Conteneur unhealthy — Diagnostiquer

# Voir les logs récents
docker logs epidocs_frontend_container --tail 100

# Causes fréquentes :
# 1. Mémoire insuffisante → vérifier
free -h
docker stats --no-stream

# 2. Port déjà utilisé
lsof -i :7012

# 3. Variables d'environnement manquantes
docker exec epidocs_frontend_container env | grep NEXT_PUBLIC

# Si rien ne fonctionne, recréer le conteneur
docker compose -f docker-compose.prod.yml down
docker compose -f docker-compose.prod.yml up -d

Étape 4 : Problème Nginx (502/504)

# Vérifier que Nginx tourne
docker ps | grep nginx

# Tester la config Nginx
docker exec nginx-proxy nginx -t

# Voir les logs d'erreur Nginx
docker exec nginx-proxy tail -20 /var/log/nginx/error.log

# Vérifier que le frontend est accessible en direct (sans Nginx)
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:7012
# Si 200 → le frontend fonctionne, c'est Nginx qui ne route pas correctement

# Recharger Nginx
docker exec nginx-proxy nginx -s reload

Étape 5 : Frontend OK mais site inaccessible depuis l'extérieur

# Vérifier les DNS
dig mydocs.epitools.bj
# Doit pointer vers l'IP du VPS

# Vérifier le certificat TLS
curl -vI https://mydocs.epitools.bj 2>&1 | grep -i "ssl\|certificate\|expire"

# Vérifier le firewall
ufw status | grep "80\|443"
# Doit montrer ALLOW pour les ports 80 et 443

Étape 6 : Le frontend fonctionne mais l'API est down

Si le site s'affiche mais aucune donnée ne charge :

# Vérifier le backend
docker ps | grep epidocs_backend
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:7010/admin/system-status

# Si le backend est down, redémarrer
cd /root/projects/epidocs/epidocs-backend
docker compose -f docker-compose.prod.yml up -d

# Vérifier la maintenance
curl -s http://127.0.0.1:7010/admin/system-status | python3 -m json.tool
# Si isActive: false → le système est en maintenance
# Désactiver la maintenance si nécessaire (voir troubleshooting)

Étape 7 : Rollback si le déploiement a cassé le site

cd /root/projects/epidocs/epidocs-frontend

# Lister les images disponibles
docker images ghcr.io/epitechafrik/epidocs-frontend --format "table {{.Tag}}\t{{.CreatedAt}}"

# Rollback vers une version précédente
# Éditer docker-compose.prod.yml et changer le tag de l'image
# image: ghcr.io/epitechafrik/epidocs-frontend:sha-XXXXXXX

docker compose -f docker-compose.prod.yml down
docker compose -f docker-compose.prod.yml up -d

# Vérifier
sleep 40
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:7012

Résumé des ports et chemins

Élément Valeur
Frontend port hôte 127.0.0.1:7012
Frontend port conteneur 3000
Backend port hôte 127.0.0.1:7010
Conteneur frontend epidocs_frontend_container
Chemin VPS frontend /root/projects/epidocs/epidocs-frontend
Chemin VPS backend /root/projects/epidocs/epidocs-backend
Image GHCR ghcr.io/epitechafrik/epidocs-frontend
URL prod https://mydocs.epitools.bj
URL API https://api-mydocs.epitools.bj

Contacts

Rôle Contact
Développeur & Mainteneur YemalinModesteyemalin1.agbangla@epitech.eu