5.2 KiB
5.2 KiB
Burrow Forge Runbook
This directory contains the Burrow forge host definition and the Hetzner bootstrap shape for burrow-forge.
Mail hosting is intentionally not part of this NixOS host in the current plan. Burrow's first mail path is Forward Email with Burrow-owned custom S3 backups; see docs/FORWARDEMAIL.md.
Files
hosts/burrow-forge/default.nix: host entrypointmodules/burrow-forge.nix: Forgejo, Caddy, PostgreSQL, and admin bootstrap modulemodules/burrow-forge-runner.nix: Forgejo Actions runner and agent identity bootstrap- upstream
compatible.systems/conrad/nsc-autoscaler: Namespace-backed ephemeral Forgejo runner module consumed via the Burrow flake input modules/burrow-authentik.nix: minimal Authentik IdP for Burrow control planesmodules/burrow-headscale.nix: Headscale control plane rooted in Authentik OIDC../secrets.nix: agenix recipient map for tracked Burrow forge secretshetzner-cloud-config.yaml: desired Hetzner host shapekeys/contact_at_burrow_net.pub: initial operator SSH public keykeys/agent_at_burrow_net.pub: automation SSH public key../Scripts/hetzner-forge.sh: Hetzner inventory and replace workflow../Scripts/nsc-build-and-upload-image.sh: temporary Namespace builder -> raw image -> Hetzner snapshot../Scripts/bootstrap-forge-intake.sh: copy the Forgejo bootstrap password and agent SSH key into/var/lib/burrow/intake/../Scripts/check-forge-host.sh: verify Forgejo, Caddy, the local runner, optional NSC services, and optional Tailnet services after boot../Scripts/cloudflare-upsert-a-record.sh: upsert DNS-only CloudflareArecords for Burrow host cutovers../Scripts/forge-deploy.sh: remotenixos-rebuildentrypoint for the forge host../Scripts/provision-forgejo-nsc.sh: render Burrow Namespace dispatcher/autoscaler runtime inputs and ensure the default Forgejo scope exists../Scripts/sync-forgejo-nsc-config.sh: copy intake-backed dispatcher/autoscaler inputs to the host
Intended Flow
- Build and upload the raw NixOS image with
Scripts/hetzner-forge.sh build-imageorScripts/nsc-build-and-upload-image.sh. - Recreate
burrow-forgefrom the latest labeled snapshot withScripts/hetzner-forge.sh recreate-from-image --yes. - Run
Scripts/bootstrap-forge-intake.shto place the Forgejo bootstrap password file and automation SSH key under/var/lib/burrow/intake/. - Let
burrow-forgejo-bootstrap.servicecreate or rotate the initial Forgejo admin account. - Let
burrow-forgejo-runner-bootstrap.serviceregister the self-hosted Forgejo runner and seed Git identity asagent <agent@burrow.net>. - Run
Scripts/provision-forgejo-nsc.shlocally, thenScripts/sync-forgejo-nsc-config.shto place the raw Namespace dispatcher/autoscaler runtime inputs under/var/lib/burrow/intake/for the upstreamservices.forgejo-nscmodule. - Ensure
/var/lib/agenix/agenix.keyexists on the host, encryptsecrets/infra/authentik.env.age,secrets/infra/authentik-google-client-id.age,secrets/infra/authentik-google-client-secret.age,secrets/infra/forgejo-oidc-client-secret.age, andsecrets/infra/headscale-oidc-client-secret.age, and let agenix materialize them under/run/agenix/. - Use
Scripts/cloudflare-upsert-a-record.shto pointgit.burrow.net,burrow.net,auth.burrow.net,ts.burrow.net, andnsc-autoscaler.burrow.netat the host with Cloudflare proxying disabled for ACME. - Use
Scripts/forge-deploy.sh --allow-dirtyfor subsequent remotenixos-rebuildruns from the live workspace. - Configure Forward Email custom S3 backups for
burrow.netandburrow.rsout-of-band withTools/forwardemail-custom-s3.sh.
Current Constraints
burrow-forgeis live on NixOS inhel1at89.167.47.21, andScripts/check-forge-host.sh --expect-nscpasses locally against that host.- Authentik and Headscale secrets now live in tracked agenix blobs under
secrets/infra/and decrypt to/run/agenix/on the forge host. - Public Burrow forge cutover completed on March 15, 2026:
burrow.net,git.burrow.net, andnsc-autoscaler.burrow.netnow publish publicArecords to89.167.47.21- HTTP redirects to HTTPS on all three names
https://burrow.netreturns the root forge landing responsehttps://git.burrow.netreturns the live Forgejo front doorhttps://nsc-autoscaler.burrow.netterminates TLS on Caddy and returns the expected application-level404for/
- The Cloudflare token currently in
intake/cloudflare-token.txtis an account-scoped token:POST /accounts/<account>/tokens/verifysucceeds, whilePOST /user/tokens/verifyreturnsInvalid API Token. burrow.rsstill resolves publicly to a VercelDEPLOYMENT_NOT_FOUNDresponse.- Both domains publish Forward Email MX/TXT records.
- Forward Email custom S3 is live on both domains against the Hetzner
burrowbucket and the public regional endpointhttps://hel1.your-objectstorage.com. - The current Hetzner account contains both:
- the older Ubuntu bootstrap server in
hil - the live
burrow-forgeNixOS server inhel1
- the older Ubuntu bootstrap server in
- The remaining forge work is follow-on product/integration work, not host bring-up, mail backup wiring, or public DNS cutover.