Files
linearvoid/docker-compose.prod.yml
T
zwitschi 5b5cdc4cd8
CI / test (push) Successful in 9m11s
CI / docker (push) Failing after 2m39s
CI / release (push) Skipped
Release / release (push) Canceled after 2m11s
chore: release v1.0.7
Playout: slate fallback, strict ffprobe validation, Prometheus metrics
Chat: history on join, DM offline delivery, env-config rate limits,
  Redis auto-reconnect, heartbeat, ban/mute enforcement, DM metrics
Viewer: presence indicators, schedule overlay, public /api/schedule
Admin: playlist drag-reorder, schedule overrides CRUD, user actions,
  inline mod buttons, CSV export, config editor, restart buttons,
  upload normalization gate, analytics time range
nginx: CORS preflight, JSON health, stub_status
Docs: test-lab vs production distinction across all configs/docs
Infra: Redis maxmemory, CD health IP-agnostic, slate volume mount
2026-08-06 17:41:52 +02:00

154 lines
3.9 KiB
YAML

# docker-compose.prod.yml — TEST LAB DEPLOYMENT
# Target: test lab host 192.168.88.40 (NOT Hetzner production).
# Production Hetzner VPS not yet provisioned — see TODO.md Production Deployment section.
# Uses pre-built images from Gitea Container Registry (no local build).
# Override DOCKER_HOST in CD workflow to switch target.
services:
playout:
image: git.allucanget.biz/zwitschi/linearvoid/playout:latest
container_name: linearvoid-playout
restart: unless-stopped
env_file:
- .env
volumes:
- ./data/playlist:/app/playlist:rw
- ./data/media:/app/media:ro
- ./data/hls:/app/hls:rw
- ./data/slate:/app/slate:ro
networks:
- linearvoid-net
depends_on:
- redis
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081/health"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
chat:
image: git.allucanget.biz/zwitschi/linearvoid/chat:latest
container_name: linearvoid-chat
restart: unless-stopped
env_file:
- .env
ports:
- "${CHAT_PORT:-3000}:3000"
volumes:
- ./data/chat:/app:rw
- ./data/playlist:/app/playlist:rw
- ./data/media:/app/media:rw
networks:
- linearvoid-net
depends_on:
- redis
- db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
nginx:
image: git.allucanget.biz/zwitschi/linearvoid/nginx:latest
container_name: linearvoid-nginx
restart: unless-stopped
ports:
- "${NGINX_PORT:-8080}:80"
volumes:
- ./data/hls:/srv/hls:ro
networks:
- linearvoid-net
depends_on:
- playout
- chat
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
redis:
image: redis:7-alpine
container_name: linearvoid-redis
restart: unless-stopped
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redis-data:/data
networks:
- linearvoid-net
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
db:
image: postgres:15-alpine
container_name: linearvoid-db
restart: unless-stopped
environment:
POSTGRES_DB: linearvoid
POSTGRES_USER: linearvoid
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-linearvoid}
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- linearvoid-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U linearvoid"]
interval: 10s
timeout: 5s
retries: 5
prometheus:
image: prom/prometheus:latest
container_name: linearvoid-prometheus
restart: unless-stopped
volumes:
- prometheus-config:/etc/prometheus
- prometheus-data:/prometheus
ports:
- "9090:9090"
networks:
- linearvoid-net
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.console.libraries=/etc/prometheus/console_libraries"
- "--web.console.templates=/etc/prometheus/consoles"
- "--web.enable-lifecycle"
grafana:
image: grafana/grafana:latest
container_name: linearvoid-grafana
restart: unless-stopped
ports:
- "3001:3000"
volumes:
- grafana-data:/var/lib/grafana
- ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards
- ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin}
- GF_USERS_ALLOW_SIGN_UP=false
networks:
- linearvoid-net
depends_on:
- prometheus
networks:
linearvoid-net:
driver: bridge
volumes:
redis-data:
postgres-data:
prometheus-data:
prometheus-config:
grafana-data: