+ Self-hosting docs live on the website under{" "}
+ Self-hosted reviews. Every child page below
+ is linked from that index and from the maintainer docs hub.
+
+ When you change runtime behavior, update the docs page and extend the drift
+ guard test when one exists. Env vars must stay aligned with{" "}
+ npm run selfhost:env-reference; observability configs with{" "}
+ npm run selfhost:validate-observability.
+
Defaults, optional services, and experimental surfaces
+
+
+ Core stack (default): gittensory + Redis + SQLite on the mounted data
+ volume; SELFHOST_DEPLOYMENT_MODE=dry-run in{" "}
+ .env.selfhost.example.
+
+
+ Optional profiles: Postgres, REES sidecar, observability (Prometheus,
+ Grafana, OTEL, Tempo, Loki), and backup — each documented on its concern page; none are
+ required for a first healthy instance.
+
+
+ Sentry: opt-in and off by default — set an operator-owned{" "}
+ SENTRY_DSN or mount SENTRY_DSN_FILE; see{" "}
+ Operations.
+
+
+ AI / RAG / REES: off in the starter env until webhook delivery and
+ deterministic review are verified; each has explicit enablement switches.
+
+
+ Operator-owned paths:gittensory-config/,{" "}
+ gittensory-data, and secrets via .env or *_FILE{" "}
+ mounts — never baked into images.
+
+
+
+
Loose docs consolidation
+
+ Root-level markdown outside the website must either link to the canonical website page or
+ stay intentionally separate (convergence runbooks, contributor notes). Do not duplicate
+ self-host operator instructions in a second place that will drift.
+