services: postgres: image: postgres:16-alpine environment: POSTGRES_DB: miragenflow POSTGRES_USER: miragenflow POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set} volumes: - miragenflow-postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U miragenflow -d miragenflow"] interval: 5s timeout: 3s retries: 10 redis: image: redis:7-alpine command: ["redis-server", "--appendonly", "yes"] volumes: - miragenflow-redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 server: build: context: . dockerfile: server/Dockerfile environment: NODE_ENV: production MIRAGENFLOW_HOST: 0.0.0.0 MIRAGENFLOW_PORT: 3100 # The bundled nginx listener is HTTP. Set this to true only when the # public reverse proxy terminates TLS before forwarding to the app. MIRAGENFLOW_COOKIE_SECURE: ${MIRAGENFLOW_COOKIE_SECURE:-false} MIRAGENFLOW_ACCESS_TOKEN_SECRET: ${MIRAGENFLOW_ACCESS_TOKEN_SECRET:?MIRAGENFLOW_ACCESS_TOKEN_SECRET must be set} MIRAGENFLOW_ADMIN_EMAIL: ${MIRAGENFLOW_ADMIN_EMAIL:?MIRAGENFLOW_ADMIN_EMAIL must be set} MIRAGENFLOW_ADMIN_PASSWORD: ${MIRAGENFLOW_ADMIN_PASSWORD:?MIRAGENFLOW_ADMIN_PASSWORD must be set} MIRAGENFLOW_ADMIN_MFA_SECRET: ${MIRAGENFLOW_ADMIN_MFA_SECRET:?MIRAGENFLOW_ADMIN_MFA_SECRET must be set} MIRAGENFLOW_ADMIN_MFA_REQUIRED: ${MIRAGENFLOW_ADMIN_MFA_REQUIRED:-false} MIRAGENFLOW_ADMIN_CAPTCHA_REQUIRED: ${MIRAGENFLOW_ADMIN_CAPTCHA_REQUIRED:-false} MIRAGENFLOW_USER_MFA_REQUIRED: ${MIRAGENFLOW_USER_MFA_REQUIRED:-false} MIRAGENFLOW_USER_VERIFICATION_REQUIRED: ${MIRAGENFLOW_USER_VERIFICATION_REQUIRED:-false} MIRAGENFLOW_EMAIL_REGISTRATION_VERIFICATION_REQUIRED: ${MIRAGENFLOW_EMAIL_REGISTRATION_VERIFICATION_REQUIRED:-false} MIRAGENFLOW_PHONE_REGISTRATION_VERIFICATION_REQUIRED: ${MIRAGENFLOW_PHONE_REGISTRATION_VERIFICATION_REQUIRED:-false} MIRAGENFLOW_CAPTCHA_REQUIRED: ${MIRAGENFLOW_CAPTCHA_REQUIRED:-false} MIRAGENFLOW_CHANNEL_ENCRYPTION_KEY: ${MIRAGENFLOW_CHANNEL_ENCRYPTION_KEY:?MIRAGENFLOW_CHANNEL_ENCRYPTION_KEY must be set} DATABASE_URL: postgres://miragenflow:${POSTGRES_PASSWORD:?POSTGRES_PASSWORD must be set}@postgres:5432/miragenflow REDIS_URL: redis://redis:6379 MIRAGENFLOW_PERSISTENCE_ADAPTER: postgres MIRAGENFLOW_QUEUE_ADAPTER: redis MIRAGENFLOW_STAGING_TTL_SECONDS: 604800 MIRAGENFLOW_STAGING_DIR: /var/lib/miragenflow/staging expose: - "3100" volumes: - miragenflow-server:/var/lib/miragenflow depends_on: postgres: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:3100/api/ready"] interval: 10s timeout: 3s retries: 5 app: build: context: . dockerfile: Dockerfile container_name: miragenflow ports: - "3000:3000" restart: unless-stopped depends_on: server: condition: service_healthy volumes: miragenflow-postgres: miragenflow-redis: miragenflow-server: