Files
esh-pfi-infrastructure/stacks/scriberr/.env.example
T
vh efddb4e511 feat(scriberr): stand up transcription on ana-ml2, pinned to GPU1
Scriberr transcribes audio and video locally with WhisperX and
speaker diarization, and it lands on ana-ml2 rather than ana-docker
because the work is GPU-shaped: ana-docker offers eight cores already
shared with fifty containers and thirty-seven gigabytes of disk,
against ninety-six cores, terabytes on /tank and idle capacity on
GPU1. The reservation names device 1 explicitly, since GPU0 is fully
committed to the gen seat, and the container is confirmed to see that
card alone.

The image is built from source, which is not a preference. These are
Blackwell cards at sm_120; the published CUDA image covers Pascal
through Ada only, and the blackwell image the upstream README
documents has never been published at all. The path upstream actually
ships for sm_120 is Dockerfile.cuda.12.9, carrying CUDA 12.9 and cu128
torch, so that is what gets built. The compose header says so, because
the obvious cleanup is to swap in the published image and that would
silently drop the deployment to CPU.

Two configuration details are load-bearing and documented where
someone would go to change them. The application runs as uid 10001
rather than the usual 1000: that Dockerfile moves its user aside for
Ubuntu 24.04's own uid-1000 account and chowns /app accordingly, while
the entrypoint's remapping covers only the data directories, so at
1000 the process cannot open its database and restarts forever behind
a SQLite error that reads as though the machine were out of memory.
Secure cookies stay off while the service is reached over plain HTTP,
or sessions are dropped by the browser and login appears to loop for
no visible reason.

Storage is bind-mounted onto /tank because model weights run to
several gigabytes and the root pool on that host is nearly full.

Also adds the scriberr service alias to internal DNS, following the
existing alias convention so consumers name the service rather than
the box.
2026-08-23 19:28:33 -07:00

45 lines
2.8 KiB
Bash

# Scriberr — copy to .env on the host at /opt/docker/compose/scriberr/.env
# Real .env is gitignored and lives only on ana-ml2.
# ── Image ────────────────────────────────────────────────────────────────
# Built locally from Dockerfile.cuda.12.9 — see the compose header for why
# the published scriberr-cuda image is NOT usable on these Blackwell cards.
SCRIBERR_IMAGE=scriberr:local-blackwell
# ── Network ──────────────────────────────────────────────────────────────
SCRIBERR_PORT=8080
SCRIBERR_BIND=0.0.0.0
# CORS. Must list every origin the UI is actually reached from, or the
# browser blocks the API calls. Comma-separated, no spaces, no trailing /.
SCRIBERR_ALLOWED_ORIGINS=http://10.250.50.54:8080,http://scriberr.ana.internal:8080
# ── GPU ──────────────────────────────────────────────────────────────────
# GPU0 is fully committed to the `gen` seat; GPU1 is the one with headroom.
SCRIBERR_GPU_ID=1
# ── Storage (on /tank — NOT the root pool, weights are multi-GB) ─────────
SCRIBERR_DATA_DIR=/tank/scriberr/data
SCRIBERR_ENV_DIR=/tank/scriberr/whisperx-env
# ── Runtime ──────────────────────────────────────────────────────────────
# ⚠ 10001, not the fleet-usual 1000. The Blackwell image's `appuser` IS 10001
# and its PUID remapping is broken — at 1000 the app cannot open its SQLite DB
# and crash-loops. The /tank dirs are chowned to 10001:10001 to match.
# See README "The PUID trap".
SCRIBERR_PUID=10001
SCRIBERR_PGID=10001
# Keep false while the app is served over plain HTTP. Setting this true
# without TLS makes login silently fail (cookie marked Secure, dropped).
SCRIBERR_SECURE_COOKIES=false
# ── Optional: summarisation / transcript chat ────────────────────────────
# Scriberr speaks the OpenAI API. Point it at the LiteLLM gateway so this
# costs nothing and stays on-prem, rather than a paid vendor key.
# Configure the base URL in the Scriberr UI (Settings -> AI provider):
# base URL : http://10.250.50.70:4000/v1
# model : summarizer (or gen / gen-reasoning)
# The key below is the shared all-agents gateway key.
# ⚠ That key also reaches PAID passthrough models (GLM, Kimi) on a shared
# tab — keep the configured model on a free local seat.
# SCRIBERR_OPENAI_API_KEY=