my infra
diagram: https://jackharrhy.github.io/infra/infra.svg
.github/workflows/pages.yml: deploysdocs/to GitHub Pagesaws/: Pulumi bitsdns/: octoDNS config and zone filesdocs/: generated D2/SVG diagram and old planning noteshosts/mug/: DigitalOcean host compose stackhosts/newport/: home host compose stackhosts/newport/cheesetown/: cheesetown Minecraft stackscripts/: small helper scriptscli.py: theinfraCLIinfra.yml: host metadata and diagram hints
uv run cli.py installinfra status
infra status newport
infra update newport
infra refresh newport
infra refresh mug --service radio-celld
infra diagram
infra diagram --format png
infra diagram --no-renderinfra diagram reads the compose files plus infra.yml, writes docs/infra.d2, and renders docs/infra.svg if d2 is installed.
Use repeatable refresh HOST --service NAME options for a scoped application rollout. This
pulls and starts only the named services without starting dependencies or pruning rollback
images. A full-host refresh retains its existing image-pruning behavior. Storage-format
upgrades still require stopping writers and taking a consistent backup before refresh.
Secrets are SOPS-encrypted YAML files. Rendered .env files go under sibling .runtime-secrets/ directories.
sops hosts/{host}/secrets/{service}.enc.yaml
./scripts/render-secrets.sh newportDNS is managed with octoDNS and DigitalOcean.
infra dns dump
infra dns diff
infra dns diff jackharrhy.com.
infra dns sync
infra dns sync jackharrhy.com.sync shows the plan first and asks before applying.
NAS commands use nas/secrets/synology.enc.yaml.
infra nas login-check
infra nas shares
infra nas debug-share SHARE
infra nas nfs list SHARE
infra nas nfs grant SHARE CLIENT_PATTERN
infra nas nfs revoke SHARE CLIENT_PATTERN --yescheesetown lives in its own Compose project