BetterFrame/deploy/docker/docker-compose.yml
Mitchell R cbb1683c5d feat: deployment artifacts + CEC relay + auth-check endpoint
Deployment (deploy/):
- systemd units for server (system) and kiosk (user session)
- Angie/nginx proxy config — routes admin, api, ws, node-red
- Dockerfile + docker-compose for containerized deployment
- deploy/README.md with install instructions

Auth:
- /api/admin/_check endpoint for proxy auth_request subrequest
- Returns 200 if admin session valid, 401/403 otherwise
- Sets X-BetterFrame-User header for upstream

CEC (Pi5 HDMI control):
- kiosk/src/cec.rs wraps cec-ctl subprocess
- Standby/wake/active-source commands
- WS message types "standby" / "wake" dispatched to CEC
- Admin UI: Wake/Standby buttons on kiosk edit page
- Server sendToKiosk via coordinator
2026-05-10 22:45:56 +02:00

65 lines
1.4 KiB
YAML

# BetterFrame stack — server + Angie proxy + Node-RED.
# Kiosk runs on the Pi natively (not in Docker, needs Wayland/HDMI).
#
# Usage:
# docker compose -f deploy/docker/docker-compose.yml up -d
#
# Volumes:
# betterframe-data — sqlite DB + secret.key
# nodered-data — Node-RED flows
#
# Bind 0.0.0.0:80 on the host (Angie). Backend services only reachable
# from within the Docker network.
version: "3.8"
services:
server:
build:
context: ../..
dockerfile: deploy/docker/Dockerfile.server
container_name: betterframe-server
restart: unless-stopped
volumes:
- betterframe-data:/var/lib/betterframe
- ../../sec-config.yaml:/app/sec-config.yaml:ro
expose:
- "18080"
- "18081"
- "18082"
networks:
- betterframe
angie:
image: nginx:alpine
container_name: betterframe-angie
restart: unless-stopped
depends_on:
- server
- nodered
ports:
- "80:80"
volumes:
- ../angie/betterframe.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- betterframe
nodered:
image: nodered/node-red:latest
container_name: betterframe-nodered
restart: unless-stopped
environment:
- TZ=UTC
volumes:
- nodered-data:/data
expose:
- "1880"
networks:
- betterframe
volumes:
betterframe-data:
nodered-data:
networks:
betterframe:
driver: bridge