Files
eleith e11ef0d16f
ci/woodpecker/pr/calendar Pipeline was successful
ci/woodpecker/pr/cli Pipeline was successful
ci/woodpecker/pr/config Pipeline was successful
ci/woodpecker/pr/db Pipeline was successful
ci/woodpecker/pr/jobs Pipeline was successful
ci/woodpecker/pr/video-chat Pipeline was successful
ci/woodpecker/pr/web Pipeline was successful
ci/woodpecker/pr/worker Pipeline was successful
ci/woodpecker/push/calendar Pipeline was successful
ci/woodpecker/push/cli Pipeline was successful
ci/woodpecker/push/config Pipeline was successful
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/jobs Pipeline was successful
ci/woodpecker/push/video-chat Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/worker Pipeline was successful
feat(config): make Docker onboarding YAML-first
2026-11-01 19:04:16 -08:00

69 lines
1.9 KiB
YAML

services:
when-app:
# Pin web, worker and CLI to matching published versions for controlled updates.
image: ghcr.io/eleith/when:latest
platform: linux/amd64
# Optional values for ${VAR} references in when.yaml.
env_file:
- path: .env
required: false
environment:
# Only trust this header from the private, configured reverse proxy.
PROTOCOL_HEADER: x-forwarded-proto
ports:
# Localhost only. Use '3000:3000' for LAN access; restrict it with your firewall.
- '127.0.0.1:${WHEN_HTTP_PORT:-3000}:3000'
volumes:
- ./config:/app/config:ro
- ./data:/app/data
- ./public:/app/public:ro
restart: unless-stopped
depends_on:
when-worker:
condition: service_healthy
healthcheck:
test:
- CMD
- node
- --eval
- fetch('http://localhost:3000/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))
interval: 30s
timeout: 3s
start_period: 5s
retries: 3
when-worker:
image: ghcr.io/eleith/when-worker:latest
platform: linux/amd64
env_file:
- path: .env
required: false
# Health and metrics stay on the Compose network. No published worker port.
volumes:
- ./config:/app/config:ro
- ./data:/app/data
restart: unless-stopped
healthcheck:
test:
- CMD
- node
- --eval
- fetch('http://localhost:9000/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))
interval: 30s
timeout: 3s
start_period: 5s
retries: 3
when-cli:
image: ghcr.io/eleith/when-cli:latest
platform: linux/amd64
profiles:
- tools
env_file:
- path: .env
required: false
volumes:
# Writable so config init can create a starter file. Other services only read it.
- ./config:/app/config
- ./data:/app/data