4.4 KiB
4.4 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 bootstrapmodules/burrow-forgejo-nsc.nix: Namespace-backed ephemeral Forgejo runner serviceshetzner-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: legacy intake bootstrap helper; current forge runtime secrets should live in../secrets/forgejo/*.age../Scripts/check-forge-host.sh: verify Forgejo, Caddy, the local runner, and optional NSC 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 bootstrap inputs and ensure the default Forgejo scope exists../secrets/forgejo/*.age: authoritative encrypted forge admin password, agent SSH key, and Namespace runtime configs for the forge 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. - Encrypt the Forgejo admin password and agent SSH key into
secrets/forgejo/{admin-password,agent-ssh-key}.age. - Let
burrow-forgejo-bootstrap.servicecreate or rotate the initial Forgejo admin account from the agenix secret path. - 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, re-encrypt the resulting NSC token + configs intosecrets/forgejo/*.age, then deploy withScripts/forge-deploy.shso agenix updates the live forgejo-nsc runtime paths. - Use
Scripts/cloudflare-upsert-a-record.shto pointgit.burrow.net,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.- 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.