name: "${COMPOSE_PROJECT_NAME:-announcements-v2}" services: web: build: context: . dockerfile: client/Dockerfile restart: unless-stopped init: true ports: - "${WEB_PORT:-5175}:80" depends_on: api: condition: service_healthy networks: - app healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1/"] interval: 15s timeout: 5s retries: 3 start_period: 10s api: build: context: . dockerfile: server/Dockerfile restart: unless-stopped init: true environment: NODE_ENV: production HOST: 0.0.0.0 PORT: "7532" DATABASE_PATH: /data/db/announcements.sqlite APP_TIMEZONE: "${APP_TIMEZONE:-America/Chicago}" SHUTDOWN_TIMEOUT_MS: "${SHUTDOWN_TIMEOUT_MS:-10000}" DATABASE_BUSY_TIMEOUT_MS: "${DATABASE_BUSY_TIMEOUT_MS:-5000}" TRUST_PROXY: "${TRUST_PROXY:-true}" S3_ENDPOINT: http://seaweedfs:8333 S3_REGION: "${S3_REGION:-us-east-1}" S3_BUCKET: "${S3_BUCKET:-announcements-v2}" S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID:?Set S3_ACCESS_KEY_ID in .env}" S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY:?Set S3_SECRET_ACCESS_KEY in .env}" S3_FORCE_PATH_STYLE: "true" MQTT_URL: "${MQTT_URL:-}" MQTT_USERNAME: "${MQTT_USERNAME:-}" MQTT_PASSWORD: "${MQTT_PASSWORD:-}" HA_WEBHOOK_URL: "${HA_WEBHOOK_URL:-}" HA_WEBHOOK_SECRET: "${HA_WEBHOOK_SECRET:-}" volumes: - app-data:/data depends_on: seaweedfs: condition: service_started networks: - app - storage healthcheck: test: - CMD - node - -e - "fetch('http://127.0.0.1:7532/health/ready').then((response) => process.exit(response.ok ? 0 : 1)).catch(() => process.exit(1))" interval: 15s timeout: 5s retries: 5 start_period: 15s stop_grace_period: 15s seaweedfs: image: chrislusf/seaweedfs:4.39 restart: unless-stopped command: ["mini", "-dir=/data", "-ip=seaweedfs"] environment: AWS_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID:?Set S3_ACCESS_KEY_ID in .env}" AWS_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY:?Set S3_SECRET_ACCESS_KEY in .env}" S3_BUCKET: "${S3_BUCKET:-announcements-v2}" volumes: - seaweedfs-data:/data expose: - "8333" networks: - storage healthcheck: test: - CMD-SHELL - >- wget -q -O /dev/null http://127.0.0.1:9333/readyz && wget -q -O /dev/null http://127.0.0.1:8333/readyz interval: 15s timeout: 5s retries: 5 start_period: 20s stop_grace_period: 30s networks: app: storage: internal: true volumes: app-data: seaweedfs-data: