Build Phase 1 application foundation
This commit is contained in:
+97
-14
@@ -1,20 +1,103 @@
|
||||
name: "${COMPOSE_PROJECT_NAME:-announcements-v2}"
|
||||
|
||||
services:
|
||||
announcements-server:
|
||||
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
|
||||
container_name: announcements-server
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "7532:7532"
|
||||
|
||||
announcements-client:
|
||||
build:
|
||||
context: ./client
|
||||
dockerfile: Dockerfile
|
||||
container_name: announcements-client
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5174:80"
|
||||
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:
|
||||
- announcements-server
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user