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 | YemalinModeste — yemalin1.agbangla@epitech.eu |