| 1 |
# Sando daemon config (production). |
| 2 |
# Install at /etc/sando/sando-daemon.toml on the Sando host. |
| 3 |
# |
| 4 |
# Deploy-API auth is NOT configured here — the bearer token lives in the |
| 5 |
# EnvironmentFile (/etc/sando/sando.env: SANDO_API_TOKEN), generated by |
| 6 |
# bootstrap-sandod-host.sh. With a non-loopback `listen` (below) the daemon |
| 7 |
# REFUSES TO START unless that token is set (CF2): a tailnet bind is reachable |
| 8 |
# by every tailnet node, so deploy authority must be gated by more than network |
| 9 |
# position. |
| 10 |
|
| 11 |
listen = "100.103.89.95:7766" # fw13 tailnet IP; bind tailnet-only, not 0.0.0.0 — requires SANDO_API_TOKEN |
| 12 |
db_path = "/srv/sando/state/sando.db" |
| 13 |
topology_path = "/etc/sando/sando.toml" |
| 14 |
# Hostname (/proc/sys/kernel/hostname) this daemon is permitted to build on. |
| 15 |
# build::run refuses to compile on any other host, so a sandod misdeployed onto |
| 16 |
# a prod node cannot build there ("never build on prod" as an invariant). |
| 17 |
# Required — there is no safe default. |
| 18 |
build_host = "fw13" |
| 19 |
workdir = "/srv/sando/work" |
| 20 |
release_root = "/srv/sando" |
| 21 |
# Name the user explicitly. libpq (psql) defaults a missing user to the OS user, |
| 22 |
# but sqlx in a minimal systemd env (no USER/LOGNAME) defaults it to "anonymous", |
| 23 |
# so an unqualified URL peer-auth-fails and crash-loops sandod at the startup |
| 24 |
# scratch preflight (--check-config does not catch it — no DB connect). See the |
| 25 |
# maintainer notes / memory reference_sando_scratch_db. |
| 26 |
scratch_db_url = "postgres:///sando_scratch?host=/var/run/postgresql&user=sando" |
| 27 |
bin_names = ["makenotwork", "mnw-admin"] |
| 28 |
logs_root = "/srv/sando/logs" |
| 29 |
# Shared cargo target dir across per-sha worktrees. Without it every /rebuild |
| 30 |
# clean-compiles a fresh worktree (~10 min) even for a 1-line diff; with it the |
| 31 |
# incremental rebuild reuses the previous sha's compiled deps (1–2 min). Safe |
| 32 |
# because builds are serialized (a new /rebuild aborts the in-flight one). The |
| 33 |
# sando user must be able to write it; cargo creates it if absent. |
| 34 |
cargo_target_dir = "/srv/sando/cargo-target" |
| 35 |
|
| 36 |
# TypeScript frontends the code_smoke gate compiles (npm run build), before it |
| 37 |
# creates a database or boots anything. Both crates compile these from a build |
| 38 |
# script that reports a tsc error as a cargo::warning and lets the Rust build |
| 39 |
# succeed against whatever static/dist/ already holds — deliberately, so a type |
| 40 |
# error in a chat widget cannot stop the forum from compiling. The consequence is |
| 41 |
# that nothing downstream noticed either: the deploy rsynced the previous build's |
| 42 |
# bundle. This is the one place that failure is fatal. |
| 43 |
[[frontend_build]] |
| 44 |
dir = "server/frontend" |
| 45 |
|
| 46 |
[[frontend_build]] |
| 47 |
dir = "multithreaded/frontend" |
| 48 |
|
| 49 |
# Non-binary content shipped as part of each release. Multiple entries can |
| 50 |
# target the same `dst` (additive merge — used to build `docs/` from three |
| 51 |
# worktree sources). Sources are relative to the worktree root; dsts are |
| 52 |
# relative to <release_root>/releases/<v>/. |
| 53 |
# |
| 54 |
# error-pages is now only load-bearing for 502.html: the 404 and 500 pages are |
| 55 |
# embedded in the server binary and served at /__errors/, which Caddy proxies to |
| 56 |
# (server/deploy/Caddyfile). 502 is the app-is-down page, so it cannot come from |
| 57 |
# the app, and Caddy keeps reading it off disk. |
| 58 |
[[release_contents]] |
| 59 |
src = "server/deploy/error-pages" |
| 60 |
dst = "error-pages" |
| 61 |
|
| 62 |
[[release_contents]] |
| 63 |
src = "server/static" |
| 64 |
dst = "static" |
| 65 |
required = true |
| 66 |
|
| 67 |
[[release_contents]] |
| 68 |
src = "server/site-docs/public" |
| 69 |
dst = "docs/public" |
| 70 |
required = true |
| 71 |
|
| 72 |
[[release_contents]] |
| 73 |
src = "server/site-docs/examples" |
| 74 |
dst = "docs/examples" |
| 75 |
|
| 76 |
[[release_contents]] |
| 77 |
src = "server/docs/business/assumptions.toml" |
| 78 |
dst = "docs/assumptions.toml" |
| 79 |
required = true |
| 80 |
|