docs: self-hosting guide for what the quick start doesn't cover - #11
Merged
Conversation
Deploying to a real Proxmox LXC surfaced four failure modes, each of which fails quietly and none of which the README addressed. New docs/self-hosting.md covers container sizing and the unprivileged LXC features Chromium needs, binding when the reverse proxy runs on a different host, CLI-agent setup, backups, upgrades, and a symptom/cause/fix table. The two that cost the most time: - The unit binds 127.0.0.1. With the proxy on another host that reads as a proxy fault — 502 outside, healthy inside. The fix is a wider bind plus a network restriction, applied through a systemd DROP-IN rather than an edit to the installed unit, because install-lxc.sh rewrites that file and would silently revert it on the next upgrade. - board-oss spawns a CLI agent by bare command name, so systemd's minimal PATH cannot find a binary the operator's shell finds. Authentication is also interactive and must run as the service user with the unit's HOME, and reproducing as root tests a different environment than the service uses. README gains CAPTURE_TIMEOUT_MS in the config table, the cross-host bind case, the CLI-agent failure modes, and the tar backup under Portability. Written against the vault house style: American English, no stock phrases, answer-first opener, headings that carry meaning on their own. That pass also corrected British spellings in prose I wrote earlier this session (two code comments and a test name) — text only, no behavior change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Deploying board-oss to a Proxmox LXC surfaced four failure modes the README didn't cover. Each one fails quietly, which is what made them expensive.
New:
docs/self-hosting.mdContainer sizing and the unprivileged LXC features Chromium needs, binding when the reverse proxy runs on a different host, CLI-agent setup, backups, upgrades, and a symptom → cause → fix table.
The two that cost the most time:
The unit binds
127.0.0.1. With the proxy on another host this reads as a proxy fault — 502 from outside, healthy inside,/healthzpassing. The fix is a wider bind plus a network-layer restriction, applied through a systemd drop-in rather than an edit to the installed unit. That distinction matters:scripts/install-lxc.shrunsinstall -m 644 … /etc/systemd/system/board-oss.service, overwriting unconditionally, so an in-place edit is silently reverted on the next upgrade and the service goes unreachable again.board-oss spawns a CLI agent by bare command name, with
cwdset to a temp directory (src/llm/cli-provider.ts). So systemd's minimalPATHcannot find a binary the operator's shell finds. Authentication is also interactive and must run as the service user with the unit'sHOME, and reproducing as root exercises a different environment than the service uses.README
CAPTURE_TIMEOUT_MSadded to the config table, with the real number behind it: a CLI agent routinely takes 90–100s per item, so the 180s default is sized, not generous..tarbackup (boards, items, and image bytes) alongside the existing "copyDATA_DIR" advice, and notes that a container snapshot is a different backup covering the install and credentials that the collection export deliberately doesn't carry.Voice
Written against the vault house style: American English, no stock phrases, answer-first opener, headings that carry meaning when skimmed alone. That pass replaced "happy path", "gotchas" and "backup stories", and rewrote a first line that restated its own heading.
It also corrected six British spellings — three in the new document, three in prose I wrote earlier in the same session (two code comments and one test name). Those three are the only non-
.mdchanges here: text only, no behavior change. 574 tests still pass.Two deliberate deviations from that style guide, which is written for vault notes: noun-phrase titles rather than claim-titles, and hard wrapping rather than one-sentence-per-line, both to match the repo's existing docs.
Not covered
Only the reader-facing docs were reviewed —
README.md, the new guide, anddocs/integrations.md(already clean). The BMAD planning artifacts (prd.md,research.md,product-brief.md,docs/bmad/,docs/planning/,docs/stories/) are untouched: ~100KB of generated internal output, far less payoff than the docs a stranger actually reads.🤖 Generated with Claude Code
https://claude.ai/code/session_01C83mrW9X8zBLY1sSZRgdCa