Aller au contenu

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é

  1. DATABASE_URL obsolète : Le conteneur utilisait postgresql://tekdhi_user:[REDACTED]@shared-postgres:5432/tekdhi_blogshared-postgres faisait référence à un service Docker qui n'existe plus.

  2. PostgreSQL sur l'hôte : PostgreSQL est installé directement sur l'hôte (pas dans Docker) et écoute sur 127.0.0.1:5432.

  3. Mode réseau incorrect : Le conteneur utilisait le réseau shared_infra en mode bridge, empêchant l'accès à 127.0.0.1 depuis le conteneur.

  4. 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.1 depuis un conteneur pointe vers le conteneur lui-même. Le mode host est 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 routes handle sont évaluées dans l'ordre de déclaration.

Fichiers modifiés

Fichier Changement
projets/tekdhi-site/BackEnd/docker-compose.yml network_mode: host, shared-postgres127.0.0.1, port 39023903
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