Aller au contenu

Registre public de diplômes — Diagnostics

Vérification rapide

État du conteneur

# Le conteneur tourne ?
docker ps | grep public_diploma_verify

# Statut détaillé
docker inspect public_diploma_verify --format='{{.State.Status}}'

Pas de healthcheck Docker configuré

Ni docker-compose.yml ni docker-compose.prod.yml ne déclarent de bloc healthcheck pour ce service — docker inspect --format='{{.State.Health.Status}}' renverra une chaîne vide ou une erreur (<no value> / template invalide), ce n'est pas un signe de panne. Se fier à .State.Status (running/restarting/exited) et au test HTTP ci-dessous.

Port HTTP

curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:7015
# Attendu : 200 (port par défaut — voir le secret APP_PORT si différent)

Depuis l'extérieur (domaine + reverse proxy)

curl -s -o /dev/null -w "%{http_code}" https://diplome.epitech.africa
# Attendu : 200

Vérifier l'URL backend bakée dans un build

VITE_API_BASE_URL n'existe pas comme variable d'environnement runtime dans le conteneur (voir overview.md) — elle est gravée en clair dans le(s) fichier(s) JS servis par nginx. Pour savoir quelle URL backend un build donné utilise réellement :

# Depuis le conteneur qui tourne
docker exec public_diploma_verify sh -c \
  "grep -ohE 'https?://[a-zA-Z0-9.-]+(:[0-9]+)?' /usr/share/nginx/html/assets/*.js | sort -u"

# Ou depuis l'extérieur, sans accès au conteneur :
curl -s https://diplome.epitech.africa/ | grep -oE 'assets/index-[^"]+\.js'
# puis, avec le nom de fichier trouvé :
curl -s https://diplome.epitech.africa/assets/index-XXXXX.js \
  | grep -oE 'https?://[a-zA-Z0-9.-]+(:[0-9]+)?' | sort -u

Cette commande n'expose rien de confidentiel : VITE_API_BASE_URL n'est de toute façon pas un secret une fois le site déployé (elle est publique dans le bundle JS envoyé à chaque visiteur).

# Vérifier qu'aucune variable env liée au frontend Vite ne traîne dans le conteneur (elle ne devrait pas y être) :
docker exec public_diploma_verify env | grep VITE
# Attendu : rien (la variable n'existe qu'au moment du build, jamais au runtime)

Logs

# Dernières lignes
docker logs public_diploma_verify --tail 50

# Suivre en temps réel
docker logs public_diploma_verify -f

# Avec timestamps
docker logs public_diploma_verify --tail 100 -t

Via Grafana/Loki (si Pedago Watch est configuré)

  1. grafana.epitools.bj → Explore → source Loki
  2. Requête : {container_name="public_diploma_verify"}

Config nginx

# Config du conteneur applicatif (nginx:1.27-alpine, sert les fichiers statiques)
docker exec public_diploma_verify nginx -t
docker exec public_diploma_verify cat /etc/nginx/conf.d/default.conf

# Config du reverse-proxy partagé qui route diplome.epitech.africa vers ce conteneur
docker exec nginx-proxy nginx -t
docker exec nginx-proxy cat /var/log/nginx/access.log | grep diplome | tail -20

Rappel de ce que nginx.conf (conteneur applicatif) fait réellement aujourd'hui : location / sert try_files $uri /index.html pour tout chemin (la règle de validation par regex du matricule est commentée — voir troubleshooting.md). Ne pas s'attendre à un 404 nginx sur un chemin mal formé : le 404 éventuel viendrait de l'app React elle-même (getReferenceFromPath + message « Format incorrect »), pas de nginx.

Vérifier la connectivité vers l'API EPIDOCS

Le frontend n'a pas de couche serveur — c'est le navigateur du visiteur qui appelle l'API EPIDOCS, pas le conteneur public_diploma_verify. Un test depuis le VPS ne reproduit donc pas exactement ce que vit un visiteur, mais permet de vérifier que l'API répond :

# Remplacer <backend> par la valeur trouvée via la procédure ci-dessus (grep du bundle JS)
curl -s -o /dev/null -w "%{http_code}" "https://<backend>/api/diplomas/verify/EPA-BJ-XX-2025-0001/"
# 404 = l'API répond mais ce matricule n'existe pas (normal pour un test)
# 000 / timeout = l'API EPIDOCS est injoignable depuis ce point réseau

Voir aussi epidocs-api/diagnostics.md pour diagnostiquer l'API elle-même.

DNS et TLS

dig +short diplome.epitech.africa A
# Doit résoudre vers l'IP du VPS de production

curl -vI https://diplome.epitech.africa 2>&1 | grep -i "ssl\|certificate\|expire"

Pipeline CI/CD

gh run list --repo EpitechAfrik/public-diploma-verify
gh run view <RUN_ID> --repo EpitechAfrik/public-diploma-verify --log-failed

# Images poussées sur GHCR
docker images ghcr.io/epitechafrik/public-diploma-verify --format "table {{.Tag}}\t{{.CreatedAt}}"

Aide-mémoire des ports et chemins

Élément Valeur
Port hôte (défaut) 127.0.0.1:7015 (secrets APP_BIND/APP_PORT)
Port conteneur 80
Conteneur public_diploma_verify
Image ghcr.io/epitechafrik/public-diploma-verify (tags latest, main-<sha>)
Chemin VPS /root/projects/public-diploma-verify
URL prod https://diplome.epitech.africa