feat(open-notebook): env contract — CPU guard, credential store, auth posture
The two knobs that keep the box alive: TTS_BATCH_SIZE=1 and
OPEN_NOTEBOOK_WORKER_MAX_TASKS=1. Upstream ships 5 x 5; frank-tts spawns one
~8 GiB, 8-thread engine process per synthesis request on a machine that also
serves two LLMs, so a five-way fan-out is a self-inflicted shutdown. The worker
knob is real, not decorative: the image's supervisord expands
${OPEN_NOTEBOOK_WORKER_MAX_TASKS:-5} into the worker command
(supervisord.conf:25).
Both ESPERANTO_* timeouts go above upstream's 300 s defaults, sized for CPU
synthesis (SHIM_TIMEOUT=600, LLAMA_TTS_THREADS=8) — one episode is dozens of
per-line /audio/speech calls and a timeout kills the episode, not the line.
API_URL is forced for the 5055 -> 5056 remap; SURREAL_URL addresses the database
by container name; CORS_ORIGINS is origin-form (scheme://host:port), the form
the app compares against. OPEN_NOTEBOOK_PASSWORD stays absent here on purpose:
the app treats a set-but-empty value as auth-on.
Secrets stay placeholders in the tracked file and in dankclaw/.env.example, which
lists SURREAL_PASSWORD rather than SURREAL_PASS — the deployer derives the
surreal CLI's spelling from it when it seeds, so the app and the database cannot
be handed different values.
This commit is contained in:
@@ -79,3 +79,23 @@ MARRETA_APP_KEY=changeme
|
||||
# account on first boot from these values.
|
||||
MARRETA_ADMIN_EMAIL=admin@franksdank.cloud
|
||||
MARRETA_ADMIN_PASSWORD=changeme
|
||||
|
||||
# open-notebook (podcast generator; internal-only, no vhost).
|
||||
# deploy-remote.sh seeds /home/dank/Containers/open-notebook/env from these
|
||||
# values (only if that file does not already exist) and refuses to start the
|
||||
# units while any of them is blank: a blank OPEN_NOTEBOOK_PASSWORD means
|
||||
# authentication OFF, and a blank encryption key means no provider credential
|
||||
# can be saved. The seed writes SURREAL_PASS too — the spelling the `surreal`
|
||||
# CLI reads — from SURREAL_PASSWORD, so the app and the database cannot be
|
||||
# given different values.
|
||||
# OPEN_NOTEBOOK_ENCRYPTION_KEY: encrypts the stored AI provider keys at rest.
|
||||
# Generate: openssl rand -hex 32
|
||||
# Changing it after credentials are saved makes them undecryptable.
|
||||
OPEN_NOTEBOOK_ENCRYPTION_KEY=changeme
|
||||
# UI/API password. Every API route — including the episode-audio download the
|
||||
# app serves without a session — is open to the LAN while this is unset.
|
||||
OPEN_NOTEBOOK_PASSWORD=changeme
|
||||
# SurrealDB root password (the root user NAME comes from
|
||||
# scripts/open-notebook.env, so this file holds only the secret).
|
||||
# Generate: openssl rand -base64 32
|
||||
SURREAL_PASSWORD=changeme
|
||||
|
||||
Reference in New Issue
Block a user