version: '3.8' services: # Base de données PostgreSQL postgres: image: postgres:15-alpine container_name: regisflow-db environment: POSTGRES_DB: regisflow POSTGRES_USER: regisflow POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-regisflow2024} volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro ports: - "5432:5432" networks: - regisflow-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U regisflow -d regisflow"] interval: 10s timeout: 5s retries: 5 # Application RegisFlow regisflow: build: . container_name: regisflow-app depends_on: postgres: condition: service_healthy environment: NODE_ENV: production PORT: 5000 DATABASE_URL: postgresql://regisflow:${POSTGRES_PASSWORD:-regisflow2024}@postgres:5432/regisflow SESSION_SECRET: ${SESSION_SECRET:-your-super-secret-session-key-change-in-production} TZ: Europe/Paris volumes: - backup_data:/app/backups ports: - "5000:5000" networks: - regisflow-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:5000/health || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 60s # Nginx reverse proxy (optionnel) nginx: image: nginx:alpine container_name: regisflow-nginx depends_on: - regisflow volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro ports: - "80:80" - "443:443" networks: - regisflow-network restart: unless-stopped volumes: postgres_data: driver: local backup_data: driver: local networks: regisflow-network: driver: bridge