Files
PleinR/docker-compose.yml
T
Claude 41d2cd785e Réseaux explicites : app et Postgres partagent un réseau interne dédié
Corrige ECONNREFUSED vers postgres:5432 apparu après l'ajout du réseau proxy.
Postgres et l'app sont désormais tous deux sur un réseau "internal" dédié
(résolution fiable de l'hôte "postgres"), l'app étant en plus sur le réseau
externe "proxy" pour le reverse proxy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XwfhYHzC9hQWPDnQ2p53GL
2026-06-26 16:58:41 +00:00

72 lines
2.5 KiB
YAML

# Plein R — single application container + external Postgres container.
#
# The app (Next.js) runs in ONE container. Postgres runs as a SEPARATE
# (external) container. For a managed/already-existing Postgres, delete the
# `postgres` service below and point DATABASE_URL at your instance.
services:
postgres:
image: postgres:16-alpine
container_name: pleinr-postgres
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER:-pleinr}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-pleinr}
POSTGRES_DB: ${POSTGRES_DB:-pleinr}
volumes:
- pgdata:/var/lib/postgresql/data
ports:
# Host port rarely used (container stays on 5432). Change the left side if needed.
- "54329:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-pleinr} -d ${POSTGRES_DB:-pleinr}"]
interval: 5s
timeout: 5s
retries: 12
networks:
- internal
app:
build: .
container_name: pleinr-app
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
DATABASE_URL: postgres://${POSTGRES_USER:-pleinr}:${POSTGRES_PASSWORD:-pleinr}@postgres:5432/${POSTGRES_DB:-pleinr}
# Optional: if left empty, the container generates and persists one
# automatically (see docker-entrypoint.sh + the app-data volume).
AUTH_SECRET: ${AUTH_SECRET:-}
AUTH_URL: ${AUTH_URL:-http://localhost:8413}
SEED_ON_START: ${SEED_ON_START:-true}
SEED_ADMIN_EMAIL: ${SEED_ADMIN_EMAIL:-admin@plein-r.fr}
SEED_ADMIN_PASSWORD: ${SEED_ADMIN_PASSWORD:-changeme123}
SEED_ADMIN_NAME: ${SEED_ADMIN_NAME:-Administrateur Plein R}
ports:
# Host port rarely used (container stays on 3000). App reachable at http://HOST:8413
- "8413:3000"
volumes:
# Persists the auto-generated AUTH_SECRET across restarts.
- appdata:/app/data
networks:
# "internal" is shared with Postgres; "proxy" is the external network
# shared with the reverse proxy (e.g. Nginx Proxy Manager) so it can reach
# the app by name: forward to pleinr-app:3000
- internal
- proxy
volumes:
pgdata:
appdata:
networks:
# Private network for app <-> Postgres communication.
internal:
driver: bridge
proxy:
# The reverse proxy's existing network. Must already exist (created by the
# NPM/nginx stack). Override the name with PROXY_NETWORK if it differs.
external: true
name: ${PROXY_NETWORK:-nginx_default}