Résolution erreur connexion PostgreSQL sur tekdhi.dev¶
Contexte¶
Le site tekdhi.dev (/blog, /admin/articles, /admin/categories) ne pouvait plus accéder à la base de données PostgreSQL. Le conteneur tekdhi-api affichait l'erreur PrismaClientInitializationError (P1001) en boucle.
Problème identifié¶
-
DATABASE_URL obsolète : Le conteneur utilisait
postgresql://tekdhi_user:[REDACTED]@shared-postgres:5432/tekdhi_blogoùshared-postgresfaisait référence à un service Docker qui n'existe plus. -
PostgreSQL sur l'hôte : PostgreSQL est installé directement sur l'hôte (pas dans Docker) et écoute sur
127.0.0.1:5432. -
Mode réseau incorrect : Le conteneur utilisait le réseau
shared_infraen mode bridge, empêchant l'accès à127.0.0.1depuis le conteneur. -
Conflit de port : Le port 3902 était déjà occupé par
gestionfichepaie-backend.
Solution appliquée¶
1. docker-compose.yml (tekdhi-site/BackEnd)¶
services:
tekdhi-api:
network_mode: "host" # ← Pour accéder à PostgreSQL sur l'hôte
environment:
DATABASE_URL: postgresql://tekdhi_user:${TEKDHI_DB_PASSWORD}@127.0.0.1:5432/tekdhi_blog # ← shared-postgres → 127.0.0.1
PORT: 3903 # ← Changement de port pour éviter le conflit
# Supprimer la section ports
2. Caddyfile (shared_infra)¶
# Ajouter la route API avant le file_server
tekdhi.dev {
@api {
path /api/*
}
handle @api {
reverse_proxy 127.0.0.1:3903
}
# ... autres routes ...
}
3. Frontend (.env)¶
VITE_API_URL=/api/v1 # ← URL relative pour production
Commandes de redéploiement¶
# Utiliser le script de déploiement mis à jour
cd /home/kanmaber/projets/tekdhi-site
./deploy.sh all # Redémarre maintenant automatiquement Caddy !
Note : Le script deploy.sh a été corrigé pour :
- Utiliser --no-cache lors du build
- Nettoyer l'ancien conteneur (docker rm -f tekdhi-api)
- Redémarrer Caddy automatiquement après le backend
- Logger le bon port 3903
Vérification¶
curl -s http://localhost:3903/health
# {"succes":true,"message":"OK",...}
curl -s https://tekdhi.dev/api/v1/categories
# {"succes":true,"message":"Catégories récupérées avec succès",...}
Points techniques clés¶
#docker-network: En mode bridge,127.0.0.1depuis un conteneur pointe vers le conteneur lui-même. Le modehostest obligatoire pour accéder aux services de l'hôte.#prisma: L'erreur P1001 indique toujours un problème de connexion réseau ou de credentials.#caddyfile: Les routeshandlesont évaluées dans l'ordre de déclaration.
Fichiers modifiés¶
| Fichier | Changement |
|---|---|
projets/tekdhi-site/BackEnd/docker-compose.yml |
network_mode: host, shared-postgres → 127.0.0.1, port 3902 → 3903 |
shared_infra/Caddyfile |
Route @api ajoutée, ports mis à jour |
projets/tekdhi-site/FrontEnd/.env |
VITE_API_URL → /api/v1 |
projets/tekdhi-site/FrontEnd/src/**/*.ts |
Fallbacks localhost:3902 → /api/v1 |
Liens connexes¶
- tekdhi/architecture/shared-infra-docker — architecture réseau Docker concernée
- shared/architecture/infrastructure-partagee-postgres-redis — migration PostgreSQL hôte
- shared/debug/caddy-docker-network-mode-host — guide sur le network mode host
- tekdhi/index — index du projet tekdhi