diff --git a/.env.example b/.env.example index 6ebe8e1..1b4382b 100644 --- a/.env.example +++ b/.env.example @@ -32,4 +32,4 @@ TRUST_PROXY=false # Application (public web port) APP_PORT=8321 # PostgreSQL, bound to 127.0.0.1 only (local admin access) -DB_PORT=56432 +DB_PORT=58412 diff --git a/README.md b/README.md index 8bac63c..1a1a588 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,10 @@ Deux conteneurs orchestrés par Docker Compose, sur des ports peu utilisés | Service | Rôle | Port hôte | |---------|------|-----------| | `app` | Node.js 22 / Express : API REST **et** frontend React compilé **et** images `/uploads` | `8321` (`APP_PORT`) | -| `db` | PostgreSQL 16 (schéma + données de démo au premier démarrage) | `127.0.0.1:56432` (`DB_PORT`) — loopback uniquement, pour l'administration locale | +| `db` | PostgreSQL 16 (schéma + données de démo au premier démarrage) | `127.0.0.1:58412` (`DB_PORT`) — loopback uniquement, pour l'administration locale | ``` -Navigateur ──> app (Express :8321) ──> db (PostgreSQL, 127.0.0.1:56432) +Navigateur ──> app (Express :8321) ──> db (PostgreSQL, 127.0.0.1:58412) ├─ /api/… API REST ├─ /uploads/… images (volume persistant) └─ /… frontend React (fallback SPA) @@ -119,6 +119,17 @@ formulaire « Mot de passe », endpoint `POST /api/auth/change-password`). - **Erreurs** : les détails restent dans les logs serveur, les clients reçoivent un message générique. +## Dépannage + +- **`password authentication failed for user "sbc_app"`** : le volume de la base + a été initialisé avec un autre `APP_DB_PASSWORD`. Le service one-shot `db-sync` + resynchronise automatiquement le mot de passe du rôle à chaque démarrage de la + stack — redéployez simplement. Si le mot de passe **superuser** a lui aussi + changé (`POSTGRES_PASSWORD`), remettez l'ancienne valeur ou supprimez le volume + `db_data` pour repartir de zéro (les données de démo seront recréées). +- **Port déjà utilisé** : changez `APP_PORT` ou `DB_PORT` dans les variables + d'environnement. + ### Pour la production - Placez l'application derrière HTTPS (reverse-proxy TLS) et passez `COOKIE_SECURE=true` diff --git a/db/sync-app-role.sh b/db/sync-app-role.sh new file mode 100644 index 0000000..7213a71 --- /dev/null +++ b/db/sync-app-role.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# Runs at every stack start (db-sync service): keeps the sbc_app role's +# password in sync with APP_DB_PASSWORD, even when the database volume was +# initialized with a different value. Idempotent. +set -eu + +ESCAPED=$(printf %s "$APP_DB_PASSWORD" | sed "s/'/''/g") + +psql -v ON_ERROR_STOP=1 <