Skip to content

feat: multi-box deployment#1

Merged
josibake merged 3 commits into
mainfrom
feat/multi-box
May 19, 2026
Merged

feat: multi-box deployment#1
josibake merged 3 commits into
mainfrom
feat/multi-box

Conversation

@josibake
Copy link
Copy Markdown
Member

Summary

Reshape albatross from a self-contained Frigate node into an edge consumer of kingfisher's bitcoind/fulcrum/ZMQ over a private WireGuard mesh. Sidesteps the 866 GB pool capacity problem on albatross (bitcoind+txindex+fulcrum already runs over ~950 GB) without giving up the second public TLS endpoint.

  • hosts/_mesh.nix — shared peer registry for the WireGuard mesh.
  • hosts/kingfisher/:
    • wireguard.nix — mesh participant + per-host private key.
    • frigate.nix — adds exposeBackends so bitcoind RPC, ZMQ sequence and fulcrum bind on the wg interface in addition to loopback, scoped to albatross's mesh IP via interface firewall. Additive — existing public-frigate behavior unchanged.
  • hosts/albatross/:
    • wireguard.nix — mesh participant.
    • frigate.nix — drops bitcoind/fulcrum/bootstrap toggle; consumes roost.nixosModules.frigate-edge against 10.42.0.1.
  • secrets/ — agenix-encrypted bitcoind RPC creds and per-host WG private keys, with recipient list in secrets.nix.
  • flake.lock — pinned to merged roost main (b9c80be) which carries the wg-mesh + frigate-edge modules.
  • .github/workflows/check.yml — albatross added to the build matrix.

Test plan

  • CI: build green for finney, kingfisher, albatross
  • CI: nix fmt --ci green
  • Manual deploy of kingfisher: `frigate.2140.dev:50002` still serves, mesh interface up, bitcoind RPC reachable from albatross over mesh.
  • Manual deploy of albatross: frigate.service running, `albatross.2140.dev:50002` accepts Electrum traffic.
  • Seed albatross's DuckDB from kingfisher (zfs send/recv) to skip the multi-hour first-run scan.

🤖 Generated with Claude Code

josibake and others added 3 commits May 18, 2026 16:54
…edge

Reshapes albatross from a self-contained full Frigate node into an
edge consumer of kingfisher's bitcoind/fulcrum/ZMQ over a private
WireGuard mesh. Sidesteps the 866 GB pool capacity problem on
albatross (bitcoind+txindex+fulcrum already runs over ~950 GB) without
giving up the second public TLS endpoint.

  hosts/_mesh.nix
    Shared peer registry (kingfisher 10.42.0.1, albatross 10.42.0.2 on
    10.42.0.0/24). Imported by both hosts' wireguard.nix. Public keys
    are PLACEHOLDERs — real keys go in before deploy per the plan.

  hosts/kingfisher/
    + wireguard.nix      — wg-mesh participant + per-host private key
    M frigate.nix        — adds exposeBackends so bitcoind RPC, ZMQ
                           sequence, and fulcrum bind on the wg
                           interface in addition to loopback, scoped to
                           albatross's mesh IP via interface firewall.
                           rpcauth HMAC committed (one-way derived);
                           plaintext is the edge consumer's secret.

  hosts/albatross/
    + wireguard.nix      — wg-mesh participant
    M frigate.nix        — drops bitcoind/fulcrum/bootstrap toggle,
                           consumes frigate-edge against 10.42.0.1
    M hardware-configuration.nix — incidental nixfmt drift

  secrets/
    + bitcoind-rpc-creds.age      — `user:password` for albatross to
                                     auth against kingfisher bitcoind
    + wireguard-{kingfisher,albatross}.age — WG private keys, per-host
    M secrets.nix                  — recipient registry entries

  flake.nix       — kingfisher adds wireguard-mesh module; albatross
                    swaps `nixosModules.default` for
                    `nixosModules.frigate-edge` + `wireguard-mesh`.

  .github/workflows/check.yml — adds albatross to the build matrix.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Resolves every placeholder put down with the initial multi-box commit:

  flake.lock                    — bump roost to b9c80be (multi-box merged)
  hosts/_mesh.nix               — real WG public keys for kingfisher + albatross
  hosts/kingfisher/frigate.nix  — real rpcauth HMAC for the frigate-edge user
  secrets/secrets.nix           — real recipient pubkeys (josie age + two host SSH)

The three encrypted .age blobs at secrets/*.age still contain
placeholder bytes; those get rewritten with the actual ciphertext by
josie locally before deploy (the private keys never touch this commit).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces the three plaintext placeholder .age files with real
ciphertext from `agenix -e`. Each secret is encrypted to josie's
age key plus the SSH host key of whichever box decrypts it at
activation:

  bitcoind-rpc-creds.age      → josie + albatross
                                contains `frigate-edge:<password>`,
                                read by frigate-edge via LoadCredential
                                and matched against kingfisher's
                                rpcauth HMAC on bitcoind.
  wireguard-kingfisher.age    → josie + kingfisher
                                contains the WG private key matching
                                the public key in hosts/_mesh.nix.
  wireguard-albatross.age     → josie + albatross
                                same shape, albatross side.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@josibake josibake merged commit d956834 into main May 19, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant