Files
meetrec/server/whisper-server/docker-compose.yml
T
fegger ce1880dc90 whisper-server: move to port 8085 (8080 taken on the host)
Consistent across compose, entrypoint default, Dockerfile EXPOSE,
healthcheck, and README examples.
2026-09-07 12:27:44 +02:00

48 lines
1.7 KiB
YAML

# whisper.cpp inference server for meetrec, with Vulkan GPU support
# (AMD Radeon AI PRO R9700), reachable over Tailscale.
#
# RENDER_GID=$(getent group render | cut -d: -f3) docker compose up -d --build
#
# Security: whisper.cpp's server has NO authentication. The port below is
# bound ONLY to the Tailscale interface (100.103.83.12), so the API is
# never exposed to the LAN or the internet. Tailscale must own that IP
# before the container starts, otherwise the bind fails — start order:
# tailscale first, then `docker compose up -d`. If you would rather
# tolerate LAN exposure, use "8085:8085" instead.
services:
whisper-server:
build: .
image: meetrec-whisper-server:latest
container_name: whisper-server
restart: unless-stopped
environment:
# tiny | base | small | medium | large-v3 (downloads on first start)
MODEL: large-v3
THREADS: 8
HOST: 0.0.0.0 # inside the container; the host bind is below
PORT: 8085
# NO_GPU: 1 # force CPU if the GPU ever misbehaves
volumes:
- ./models:/models # keep downloads across container rebuilds
ports:
- "100.103.83.12:8085:8085" # tailscale-only; see note above
# GPU passthrough: the render group must match the host's GID, hence
# the RENDER_GID env var in the comment at the top of this file.
devices:
- /dev/dri:/dev/dri
group_add:
- video
- "${RENDER_GID:-110}"
healthcheck:
# any HTTP response counts as healthy (the server has no /health)
test: ["CMD-SHELL", "curl -s -o /dev/null http://localhost:8085/ || exit 1"]
interval: 30s
timeout: 5s
retries: 3
start_period: 60s