Skip to main content

max / makenotwork

3.5 KB · 80 lines History Blame Raw
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