Dépannage
Les problèmes possibles, comment les reconnaître et comment les résoudre.
Le site ou l'API ne répond pas
502 Bad Gateway
Traefik fonctionne, mais le conteneur derrière ne répond pas.
bash
cd /opt/timemanager/app
docker compose ps
docker compose logs --tail 200 back| Dans les journaux | Cause | Solution |
|---|---|---|
environment variable DATABASE_URL is missing | .env incomplet | Relancer --tags app |
environment variables WEB_URL and CORS_ORIGINS are missing | CORS_ORIGINS absent | Relancer --tags app |
Erreur pendant migrate | Une migration a échoué | Voir avec l'équipe backend, éventuellement revenir à la version précédente |
connection refused vers db | La base ne démarre pas | docker compose logs db |
| Rien, le conteneur redémarre en boucle | Plantage au démarrage | docker compose logs --tail 500 back |
Si le conteneur est Up mais Traefik ne le joint pas, vérifier qu'il est bien sur le réseau timemanager :
bash
docker network inspect timemanager | grep Name404 de Traefik
Le domaine arrive à Traefik, mais aucune route ne correspond. Vérifier traefik/dynamic/ sur tm-prod et la règle Host(...).
Certificat invalide
bash
docker logs timemanager-traefik 2>&1 | grep -i acme| Cause | Solution |
|---|---|
| Le domaine ne pointe pas vers tm-prod | Corriger le DNS, attendre la propagation |
| Le port 80 est fermé | Let's Encrypt en a besoin pour le défi. Vérifier UFW et le pare-feu Google Cloud. |
| Trop de demandes | Let's Encrypt limite le nombre de certificats par semaine. Attendre. |
acme.json mal protégé | Il doit être en 0600 : chmod 600 /opt/timemanager/traefik/acme.json |
Jenkins
Le pipeline ne se lance pas
| Cause | Vérification |
|---|---|
Le commit n'est pas dans main | git log origin/main |
| Le commit ne touche pas les bons chemins | Voir includedRegions dans job_dsl.groovy |
| Le jeton GitHub a expiré | Dans le job, Polling Log : erreur d'authentification. Renouveler github_token dans le vault, --tags jenkins. |
Le pipeline échoue
Ouvrir le build, puis Console Output.
| Étape | Message typique | Cause |
|---|---|---|
| Test | mix test avec des tests en échec | Un vrai bug : à corriger par l'équipe backend |
| Test | pg_isready dépasse 60 s | La machine est surchargée, relancer |
| Build | VITE_API_URL build argument is required | VITE_API_URL absent de casc.yml ou du .env de Jenkins |
| Build | no space left on device | Disque plein, voir Le disque |
| Scan | Total: N (CRITICAL: N) | Une faille critique dans une dépendance ou l'image de base. Mettre à jour l'image de base ou la dépendance. |
| Push | denied ou unauthorized | Jeton GHCR expiré ou sans le droit write:packages |
| Deploy | Permission denied (publickey) | La clé de Jenkins n'est plus autorisée sur deploy. Relancer --tags app. |
| Deploy | Host key verification failed | tm-prod a été recréée, son empreinte a changé. Sur tm-tooling : docker exec jenkins ssh-keygen -R 10.132.0.2. |
Jenkins ne démarre pas
bash
ssh eliashounnou@34.156.3.169
cd /opt/timemanager/jenkins
docker compose ps
docker compose logs --tail 200 jenkinsUne erreur de casc.yml (variable manquante, YAML invalide) empêche le démarrage : le message cite la ligne en cause.
Ansible
| Message | Cause | Solution |
|---|---|---|
Decryption failed | Mauvais mot de passe du vault | Le redemander à l'équipe |
Host key verification failed | La machine a été recréée | ssh-keygen -R <ip> puis se connecter une fois à la main |
UNREACHABLE | SSH impossible | Vérifier l'IP dans inventory.ini, ta clé, que la VM tourne |
'xxx' is undefined | Une variable manque | Vérifier group_vars/all.yml et le vault |
Le mobile n'arrive pas à se connecter
Le mobile appelle https://api.time.jostud.com/api, comme le web. Si le web marche et pas le mobile, le problème est côté app (voir Lancer l'app). Si les deux échouent, c'est l'API : voir plus haut.