version: '3.8' services: # Base de données PostgreSQL postgres: image: postgres:16-alpine container_name: socialflow-db restart: unless-stopped ports: - "4523:4523" environment: POSTGRES_DB: ${PGDATABASE:-socialflow} POSTGRES_USER: ${PGUSER:-socialflow} POSTGRES_PASSWORD: ${PGPASSWORD:-changeme} PGPORT: 4523 volumes: - postgres_data:/var/lib/postgresql/data networks: - internal - nginx_default healthcheck: test: [ "CMD-SHELL", "pg_isready -U ${PGUSER:-socialflow}" ] interval: 10s timeout: 5s retries: 5 # Application Social Flow app: build: context: . dockerfile: Dockerfile container_name: socialflow-app restart: unless-stopped environment: NODE_ENV: production PORT: 5555 DATABASE_URL: postgresql://${PGUSER:-socialflow}:${PGPASSWORD:-changeme}@postgres:4523/${PGDATABASE:-socialflow} OPENROUTER_API_KEY: ${OPENROUTER_API_KEY} SESSION_SECRET: ${SESSION_SECRET:-your-secret-key-change-me} APP_URL: ${APP_URL:-http://localhost:5555} # Configuration FFmpeg Service FFMPEG_API_URL: http://ffmpeg-api:8000 FFMPEG_API_KEY: ${FFMPEG_API_KEY:-socialflow-secret-ffmpeg-key} networks: - internal - nginx_default depends_on: postgres: condition: service_healthy volumes: - encryption_key:/app/.encryption-key-data - audio_uploads:/app/uploads/audio command: npm run start # Service FFmpeg dédié ffmpeg-api: build: context: ./ffmpeg-service dockerfile: Dockerfile container_name: socialflow-ffmpeg restart: unless-stopped environment: API_KEY: ${FFMPEG_API_KEY:-socialflow-secret-ffmpeg-key} networks: - internal expose: - "8000" volumes: postgres_data: driver: local encryption_key: driver: local audio_uploads: driver: local networks: # Réseau interne pour la communication DB <-> App internal: driver: bridge # Réseau externe pour nginx reverse proxy nginx_default: external: true