Files
tonemark/compose.yaml
T

43 lines
1.5 KiB
YAML

# Software-house outcome-gate scaffold.
#
# No `container_name` and no anonymous/random host port: `app`'s host port is a
# stable, project-specific mapping (4173) that will not collide with the gate
# running this stack under a `-p <project>` prefix alongside a live deployment —
# both instances share the same compose.yaml, isolated by project name, and the
# gate/orchestrator polls this exact port for the health check (toolchain
# health_url must match).
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "4173:3000"
# WHISPER_URL/WEBHOOK_BASE_URL/VAPID_*/OUTPUT_DIR/DATA_DIR all have safe
# in-app defaults (see src/lib/server/*.ts) — override via a .env file or
# `environment:` here for a real deployment; nothing is required to boot.
environment:
NODE_ENV: production
volumes:
# Named volume at $HOME for the `node` user (uid 1000) — the base image
# already owns /home/node, so Docker seeds the volume with that ownership
# on first create. Persists jobs.db + transcripts across restarts.
- tonemark-data:/home/node
healthcheck:
# Node 22 has global fetch (undici) — no curl/wget needed in the runtime image.
test:
[
"CMD",
"node",
"-e",
"fetch('http://localhost:3000/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
]
interval: 10s
timeout: 5s
retries: 10
start_period: 15s
restart: unless-stopped
volumes:
tonemark-data: