Rebuild a node¶
Bring a wiped node back into service from this repository and the backups. Order matters: platform, network, data, then services.
vps-apps¶
- OS: Debian, non-root user with sudo + docker group.
- Docker: install, then apply the daemon policy from the repo:
log caps (
max-size 10m,max-file 3), MTU, DNS (pi-home mesh IP +9.9.9.9) — mirror/etc/docker/daemon.json. - NFS mounts: recreate the
wg-directclient config for/mnt/pi-hdd(exports restrict to this host's tunnel IP) and mount thenfs_*volume trees. - Repo: clone to
/opt/homelab, install the sync timer, then for each tracked stackcp .env.example → .envand fill from the secret vault beforecompose up -d. - Data: restore from restic per
restore.mdinto/opt/homelab-data/. - Timers:
docker-prune, musicload purge, model refresh, session prune (unit files ship in the repo undervps-apps/maintenance/, hermes-agent). - Mesh: re-register the peer; restore its mesh IP assignment.
- Verify the whole manifest against
nodes.md.
pi-home¶
- OS: Raspberry Pi base image; set hostname; create admin user.
- Storage: mount/format the HDD at
/mnt/pi-hdd; recreate the userdata tree;nfs-serverexports re-point to the vps-apps tunnel IP. - Units: re-install the native units (vaultwarden, radicale, ntfy,
pocket-id, hydroxide, filebrowser, syncthing, beszel hub/agents, cloudflared,
telegram-bot, pihole-FTL config, dropbear on the custom port, fail2ban+ufw),
then apply the mesh bind ordering drop-ins
(
pi-home/cleanup/mesh-bind-order-fix.sh) and install the watchdog (pi-home/mesh-watchdog/). - Netbird: register as a peer (it is also mesh DNS + nameserver target).
- Tunnels: recreate
wg-directserver side andwgr-vpsnetclient. - Data: restore the userdata tree per
restore.md.
vps-net¶
Deliberate, reviewed, with a store backup first. Full procedure:
netbird-down.md for recovery and the pinned-version discipline for the
stack. If the control-plane store is lost, peers must be re-enrolled — treat
as a last resort.
After any rebuild¶
- Fresh backups run and verify on the recovered node.
- Docs still match reality; fix
nodes.mdif the rebuilt node disagrees.