name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main} services: postgres: image: postgres:16-alpine container_name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}-postgres restart: always environment: POSTGRES_DB: ${POSTGRES_DB:-libredecision} POSTGRES_USER: ${POSTGRES_USER:-libredecision} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-libredecision} -d ${POSTGRES_DB:-libredecision}"] interval: 10s timeout: 5s retries: 5 start_period: 30s networks: - libredecision # Pas de label SERVICE_* : postgres non exposé publiquement backend: image: libredecision-backend:latest container_name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}-backend restart: always depends_on: postgres: condition: service_healthy environment: DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-libredecision}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-libredecision} SECRET_KEY: ${SECRET_KEY} ENVIRONMENT: production DEBUG: "false" DEMO_MODE: ${DEMO_MODE:-true} CORS_ORIGINS: '["https://${APP_DOMAIN:-decision.librodrome.org}"]' DUNITER_RPC_URL: ${DUNITER_RPC_URL:-wss://gdev.p2p.legal/ws} IPFS_API_URL: http://ipfs:5001 IPFS_GATEWAY_URL: http://ipfs:8080 labels: # Registrator enregistre dans Consul, Fabio route automatiquement - SERVICE_8002_NAME=${COMPOSE_PROJECT_NAME:-ehv-decision-main}-backend-8002 - SERVICE_8002_TAGS=urlprefix-${APP_DOMAIN:-decision.librodrome.org}/api/* # TCP : HTTP check échoue si le service redirige (301/302) - SERVICE_8002_CHECK_TCP=true networks: - libredecision - sonic frontend: image: libredecision-frontend:latest container_name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}-frontend restart: always depends_on: - backend environment: NUXT_PUBLIC_API_BASE: https://${APP_DOMAIN:-decision.librodrome.org}/api/v1 labels: - SERVICE_3000_NAME=${COMPOSE_PROJECT_NAME:-ehv-decision-main}-frontend-3000 - SERVICE_3000_TAGS=urlprefix-${APP_DOMAIN:-decision.librodrome.org}/* - SERVICE_3000_CHECK_TCP=true networks: - sonic ipfs: image: ipfs/kubo:latest container_name: ${COMPOSE_PROJECT_NAME:-ehv-decision-main}-ipfs restart: always volumes: - ipfs-data:/data/ipfs networks: - libredecision # Pas de label SERVICE_* : ipfs non exposé publiquement volumes: postgres-data: ipfs-data: networks: libredecision: driver: bridge sonic: external: true