Master Recovery Checklist¶
Use this page during an actual recovery. It assumes the physical server (
chronobyte) and everything on it (Proxmox, VMs, k3s, workloads, PVC data) is a total loss — but every cloud/SaaS dependency is still intact and reachable: GitHub, AWS (S3 + IAM), Cloudflare, Bitwarden, and Tailscale.This is the condensed, tick-the-box version of the full guide. Each item links back to the relevant phase doc for full explanations, troubleshooting, and exact commands.
Part 1 — Overview Checklist (bare minimum)¶
The absolute minimum path to a fully-restored cluster, in strict order:
- 0. Confirm the Bitwarden vault has every credential in Phase 0, and
BW_ACCESS_TOKENis set as a GitHub Actions secret - 1. Confirm GitHub, AWS S3, Cloudflare, and Tailscale are all reachable — Phase 1
- 2. Install Proxmox VE on the new hardware, configure networking, join Tailscale, build the cloud-init VM template — Phase 2
- 3. Run Actions → OpenTofu Apply (
proxmox, thencloudflare,tailscale,aws) — recreates all 4 VMs, DNS records, both S3 buckets, and the Velero IAM user — Phase 3 - 4. Run the k3s Ansible workflows to deploy the control plane and join both workers — Phase 4
- 5. Bootstrap Flux CD against this repo and let it reconcile every workload — Phase 5
- 6. Run Actions → k3s - Patch Cluster Secrets with
target: bw-auth-token, wait ~5 min, then run it again withtarget: all— Phase 6 - 8. Run Actions → k3s - Velero Cluster Restore with
dry_run: true, review, then re-run withdry_run: false— restores your actual data — Phase 8 - 7. Work through the Phase 7 Validation checklist top-to-bottom
- Clean up any stale Tailscale device entries and confirm Cloudflare Tunnel/Email Routing status
If everything above is green, the homelab is fully recovered — infrastructure, workloads, and data.
Part 2 — Per-Step Checklist (full rebuild, new hardware)¶
Use this when the old hardware (SSD/RAM/CPU) is gone entirely and you are starting from a brand-new box.
Step 0 — Gather credentials¶
- Open Bitwarden, confirm every secret listed in Phase 0 exists (Cloudflare, AWS, Tailscale, SSH/Git, sm-operator bootstrap token)
- Confirm
BW_ACCESS_TOKENexists as a GitHub Actions secret in this repo
Step 1 — Confirm cloud services are up¶
- AWS S3 buckets
chronobyte-homelab-tf-stateand the Velero/game-server backup buckets are reachable - Cloudflare zone and API token work (
https://dash.cloudflare.com) - Tailscale admin console reachable,
tag:server/tag:ciACL tags still exist - GitHub repo and Actions are reachable
Step 2 — Rebuild the physical host¶
- Rack/connect the new box, boot Proxmox VE installer, install fresh
- Configure the Proxmox management network/bridge to match prior LAN addressing
- Join the Proxmox host to Tailscale (
tag:server) - Create/verify the cloud-init-enabled Ubuntu VM template OpenTofu expects (see Phase 2 for the exact template steps)
- Confirm an API token exists for the Proxmox OpenTofu provider
Step 3 — Provision everything with OpenTofu¶
Run Actions → OpenTofu Apply for each stack (or tofu apply locally if Actions is
unavailable), in this order:
-
proxmox— createsk3s-server,k3s-agent-1,k3s-agent-2,game-serverVMs -
tailscale— recreates the auth key + ACL policy used by the new VMs -
cloudflare— recreates DNS A/SRV records -
aws— recreates both S3 buckets (game-server backups +daggertooth-cluster-backups) and thehomelab-veleroIAM user/access key - Confirm all 4 VMs boot and are reachable over Tailscale SSH
Step 4 — Deploy k3s¶
- Run the k3s server Ansible playbook against
k3s-server - Run the k3s agent Ansible playbook against
k3s-agent-1andk3s-agent-2 -
kubectl get nodesshows all 3 nodesReady
Step 5 — Bootstrap Flux CD¶
-
flux bootstrap github --owner=hexabyte8 --repository=homelab --path=k3s/flux/clusters/<cluster>(see Phase 5 for exact invocation) -
flux get kustomizations -A— everything reconciles (expectsm-operator/app Secrets to be missing/broken until Step 6)
Step 6 — Restore secrets¶
- Run Actions → k3s - Patch Cluster Secrets with
target: bw-auth-token - Wait ~5 minutes for the sm-operator to sync every
BitwardenSecret -
kubectl get bitwardensecret -A— allReady - Run Actions → k3s - Patch Cluster Secrets with
target: all - Run OpenTofu Apply for
authentikif SSO flows/providers need reprovisioning
Step 8 — Restore data with Velero¶
-
kubectl get pods -n velero— velero + node-agent podsRunning -
velero backup-location get—defaultisAvailable - Run Actions → k3s - Velero Cluster Restore with
dry_run: true— review the plan - Re-run with
dry_run: false - Wait for the restore to reach
Completed(velero restore get) - Spot-check that PVC data actually came back (e.g. Jellyfin library, Authentik users)
Step 7 — Validate everything¶
Work through Phase 7: Validation in full, including the new 7.9.1 Velero Backup Health check. At minimum:
- All nodes
Ready, all Flux Kustomizations reconciled - Cloudflare Tunnel + DNS resolving, cert-manager issuing certificates
- Longhorn all volumes healthy
- Authentik SSO login works
- Velero BSL
Available, scheduleEnabled, restoreCompleted
Post-recovery cleanup¶
- Remove stale/duplicate Tailscale device entries from the old hardware
- Confirm the daily Velero schedule (
velero-daily-full, 02:00 UTC) is enabled going forward - Trigger one more manual backup (
velero backup create post-recovery-check --wait) to confirm the full backup path still works end-to-end