# Production overlay for the image-based stack. Supply every required value in # .env.production and combine this file with docker-compose.yml. services: database: image: ${MULTIFORUM_NEO4J_IMAGE:?Set MULTIFORUM_NEO4J_IMAGE from a release manifest} labels: net.multiforum.release: ${MULTIFORUM_RELEASE_VERSION:?Set MULTIFORUM_RELEASE_VERSION from a release manifest} net.multiforum.component: database environment: NEO4J_AUTH: neo4j/${NEO4J_PASSWORD:?Set NEO4J_PASSWORD} backend: image: ${MULTIFORUM_BACKEND_IMAGE:?Set MULTIFORUM_BACKEND_IMAGE from a release manifest} labels: net.multiforum.release: ${MULTIFORUM_RELEASE_VERSION:?Set MULTIFORUM_RELEASE_VERSION from a release manifest} net.multiforum.component: backend environment: NODE_ENV: production ENVIRONMENT: production MULTIFORUM_AUTH_PROVIDER: auth0 MULTIFORUM_AUTO_PROVISION: 'true' SUPERADMIN_EMAIL: ${MULTIFORUM_SUPERADMIN_EMAIL:?Set MULTIFORUM_SUPERADMIN_EMAIL} AUTH0_DOMAIN: ${AUTH0_DOMAIN:?Set AUTH0_DOMAIN} AUTH0_CLIENT_ID: ${AUTH0_CLIENT_ID:?Set AUTH0_CLIENT_ID} AUTH0_AUDIENCE: ${AUTH0_AUDIENCE:?Set AUTH0_AUDIENCE} FRONTEND_URL: https://${MULTIFORUM_DOMAIN:?Set MULTIFORUM_DOMAIN} NEO4J_PASSWORD: ${NEO4J_PASSWORD:?Set NEO4J_PASSWORD} PLUGIN_SECRET_ENCRYPTION_KEY: ${PLUGIN_SECRET_ENCRYPTION_KEY:?Set PLUGIN_SECRET_ENCRYPTION_KEY} GCS_BUCKET_NAME: ${GCS_BUCKET_NAME:-} GCS_PRIVATE_DOWNLOAD_BUCKET_NAME: ${GCS_PRIVATE_DOWNLOAD_BUCKET_NAME:-} GOOGLE_CREDENTIALS_BASE64: ${GOOGLE_CREDENTIALS_BASE64:-} EMAIL_PROVIDER: ${EMAIL_PROVIDER:-} EMAIL_FROM: ${EMAIL_FROM:-} RESEND_API_KEY: ${RESEND_API_KEY:-} SENDGRID_API_KEY: ${SENDGRID_API_KEY:-} SENDGRID_FROM_EMAIL: ${SENDGRID_FROM_EMAIL:-} frontend: image: ${MULTIFORUM_FRONTEND_IMAGE:?Set MULTIFORUM_FRONTEND_IMAGE from a release manifest} labels: net.multiforum.release: ${MULTIFORUM_RELEASE_VERSION:?Set MULTIFORUM_RELEASE_VERSION from a release manifest} net.multiforum.component: frontend environment: NODE_ENV: production NUXT_PUBLIC_AUTH_PROVIDER: auth0 NUXT_PUBLIC_BASE_URL: https://${MULTIFORUM_DOMAIN:?Set MULTIFORUM_DOMAIN} NUXT_PUBLIC_ENVIRONMENT: production NUXT_PUBLIC_LOGOUT_URL: https://${MULTIFORUM_DOMAIN:?Set MULTIFORUM_DOMAIN}/auth/logout NUXT_AUTH0_DOMAIN: ${AUTH0_DOMAIN:?Set AUTH0_DOMAIN} NUXT_AUTH0_CLIENT_ID: ${AUTH0_CLIENT_ID:?Set AUTH0_CLIENT_ID} NUXT_AUTH0_CLIENT_SECRET: ${NUXT_AUTH0_CLIENT_SECRET:?Set NUXT_AUTH0_CLIENT_SECRET} NUXT_AUTH0_SESSION_SECRET: ${NUXT_AUTH0_SESSION_SECRET:?Set NUXT_AUTH0_SESSION_SECRET} NUXT_AUTH0_APP_BASE_URL: https://${MULTIFORUM_DOMAIN:?Set MULTIFORUM_DOMAIN} NUXT_AUTH0_AUDIENCE: ${AUTH0_AUDIENCE:?Set AUTH0_AUDIENCE} NUXT_PUBLIC_GOOGLE_MAPS_API_KEY: ${GOOGLE_MAPS_API_KEY:-} NUXT_PUBLIC_GOOGLE_MAP_ID: ${GOOGLE_MAP_ID:-} NUXT_PUBLIC_OPEN_CAGE_API_KEY: ${OPEN_CAGE_API_KEY:-} NUXT_PUBLIC_GOOGLE_CLOUD_STORAGE_BUCKET: ${GCS_BUCKET_NAME:-} volumes: - frontend-data:/app/data caddy: image: ${MULTIFORUM_CADDY_IMAGE:?Set MULTIFORUM_CADDY_IMAGE from a release manifest} labels: net.multiforum.release: ${MULTIFORUM_RELEASE_VERSION:?Set MULTIFORUM_RELEASE_VERSION from a release manifest} net.multiforum.component: caddy restart: unless-stopped depends_on: frontend: condition: service_healthy environment: CADDY_ACME_EMAIL: ${CADDY_ACME_EMAIL:?Set CADDY_ACME_EMAIL} MULTIFORUM_DOMAIN: ${MULTIFORUM_DOMAIN:?Set MULTIFORUM_DOMAIN} ports: - '80:80' - '443:443' - '443:443/udp' volumes: - ./deploy/caddy/Caddyfile:/etc/caddy/Caddyfile:ro - caddy-data:/data - caddy-config:/config networks: - multiforum-network volumes: frontend-data: caddy-data: caddy-config: