feat(deploy): wire open-notebook through both deployers, gated on secrets
Registration is load-bearing, not cosmetic: deploy-plan.py refuses any service it does not know, so SERVICE_ORDER + DANKCLAW_SERVICES are what let `--only` and `--auto` address the pair at all; the dispatch case in deploy-remote.sh runs it; the requirement in check_prerequisites gates a manual deploy; and the dispatch regex in deploy.sh's host-mode branch decides whether a changed path dispatches a service or falls through to "no service mapped" — an omission there is silent, which is exactly how the AGENTS.md deployer-registration law was earned. The deploy seeds /home/dank/Containers/open-notebook/env (0600) from the host env and refuses to start the pair while OPEN_NOTEBOOK_ENCRYPTION_KEY or OPEN_NOTEBOOK_PASSWORD is blank: without the key no provider credential saves and without the password the API — including the episode-audio route — is open to the LAN with no auth. A seeded file is never rewritten, so re-deploying cannot clobber a rotated key, which would silently make every stored credential undecryptable. SURREAL_PASS is derived from SURREAL_PASSWORD in the same write. The gate names paths that answer, not invented ones: the database is judged by its own container health status (/surreal is-ready, verified against the pinned digest) and the app by wait_for_health on /health at the published 5056 mapping — the route is upstream's and is on the auth middleware's exclude list, so it stays 200 after the password is set. 180 s covers Next.js build + startup and a degraded-but-listening first boot, matching the sibling LLM deploys. Both digest pins are checked against local storage before restart, because Pull=never means a missing image would otherwise surface as a unit stuck in "Start request queued" (the 203/EXEC trap's sibling). The interim episode directory is created before the app starts: a missing bind source makes podman create it as root-owned and the app's mkdir would then fail.
This commit is contained in:
1 parent
032229c1e2
commit
8816a9d498
3 files changed
+116
No files matched your search
@@ -26,6 +26,7 @@ SERVICE_ORDER = (
|
||||
"marreta",
|
||||
"pihole",
|
||||
"open-webui",
|
||||
"open-notebook",
|
||||
"gitea-postgres",
|
||||
"gitea-server",
|
||||
"comfyui",
|
||||
@@ -74,6 +75,7 @@ DANKCLAW_SERVICES = {
|
||||
"marreta",
|
||||
"pihole",
|
||||
"open-webui",
|
||||
"open-notebook",
|
||||
"gitea-postgres",
|
||||
"gitea-server",
|
||||
"comfyui",
|
||||
@@ -316,6 +318,14 @@ def services_for_path(path: str, target: str) -> set[str]:
|
||||
if len(parts) >= 2 and parts[1] == "open-webui":
|
||||
_add(services, "open-webui")
|
||||
return services
|
||||
if len(parts) >= 2 and parts[1] == "open-notebook":
|
||||
# One deployable owns the app AND its SurrealDB, like the marreta
|
||||
# app/companion pair: the app alone cannot write a note and the
|
||||
# database alone is a volume nothing reads. Any change under the
|
||||
# directory (unit, network, or the interim episode mount) therefore
|
||||
# plans the pair, which deploy_open_notebook starts database-first.
|
||||
_add(services, "open-notebook")
|
||||
return services
|
||||
# frank-dragoon left the quadlet shape on 2026-09-19 (CIRU v4.4.1 host
|
||||
# build, root unit): its files live in scripts/ and map there.
|
||||
if len(parts) >= 2 and parts[1] == "observability":
|
||||
@@ -426,6 +436,12 @@ def services_for_path(path: str, target: str) -> set[str]:
|
||||
# serving Qwen3.8-Flash-Next Q8_0. The download script fetches
|
||||
# the payload, which is host-side state, so it selects nothing.
|
||||
_add(services, "frank-archon")
|
||||
if name == "open-notebook.env":
|
||||
# open-notebook's tunables live here — the only repo-tracked part of
|
||||
# either container's environment (the credentials are seeded on the
|
||||
# host, so they are never a deploy trigger). Changing it is a
|
||||
# restart of the pair, which the single deployable performs.
|
||||
_add(services, "open-notebook")
|
||||
# Deployment/test/benchmark scripts and other repo tooling do not
|
||||
# restart a runtime service.
|
||||
return services
|
||||
|
||||
Reference in new issue
Block a user