version: "3.9" services: web: image: ${WEB_IMAGE} environment: NODE_ENV: production APP_ENV: ${ENVIRONMENT} PORT: "3000" VIDEOREG_DB_FILE: /data/videoreg.json VIDEOREG_DB_MEMORY_TTL_MS: ${VIDEOREG_DB_MEMORY_TTL_MS:-3600000} VIDEOREG_NEXT_CACHE_REVALIDATE_SECONDS: ${VIDEOREG_NEXT_CACHE_REVALIDATE_SECONDS:-3600} COMMIT_SHA: ${COMMIT_SHA} RELEASE_ID: ${RELEASE_ID} REGION: ${REGION:-} TEAM_ID: ${TEAM_ID:-} volumes: - videoreg_data:/data networks: traefik: {} healthcheck: test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:3000/health/ready >/dev/null || exit 1"] interval: 10s timeout: 3s retries: 3 start_period: 20s deploy: replicas: ${WEB_REPLICAS:-1} placement: constraints: - ${WEB_PLACEMENT_CONSTRAINT:-node.role == manager} update_config: order: start-first parallelism: 1 failure_action: rollback monitor: 45s rollback_config: order: start-first parallelism: 1 monitor: 45s restart_policy: condition: on-failure labels: - "traefik.enable=true" - "traefik.docker.network=${TRAEFIK_NETWORK}" - "traefik.http.routers.${STACK_NAME}-web.rule=Host(`${PUBLIC_HOST}`) && PathPrefix(`/`)" - "traefik.http.routers.${STACK_NAME}-web.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}" - "traefik.http.routers.${STACK_NAME}-web.tls=${TRAEFIK_TLS:-true}" - "traefik.http.services.${STACK_NAME}-web.loadbalancer.server.port=3000" stop_grace_period: 30s volumes: videoreg_data: networks: traefik: external: true name: ${TRAEFIK_NETWORK}