Skip to content

Homelab Documentation

Documentation for the flomico.com homelab that spans repos: the overall architecture, why it's shaped the way it is, and records of exercises run against the live system. Repo-specific mechanics live in each repo's own README.md/CLAUDE.md; this is the layer above that.

The repos

Repo Owns
homelab-iac-common Shared building blocks: the proxmox-vm Terraform module, the flomico.homelab Ansible collection, the Bitwarden secret-loading shims, the toolbox container image, the reusable deploy-stack.yml workflow. Owns no infrastructure itself - publishes artifacts other repos pin at a version.
homelab-platform The shared VMs that run containers: apps01 (general-purpose, multi-tenant) and obs01 (observability). Provisions hosts; does not deploy applications onto them.
caddy-iac The Caddy reverse-proxy VM fronting *.flomico.com - the homelab's route registry and guest/admin traffic split.
tailscale-iac Tailscale ACLs and split DNS for flomico.com.
homelab-observability Grafana/Prometheus/Loki/Tempo stack on obs01.
homelab-homepage The dashboard app, and the one service currently deployed through the full Terraform → Ansible → CI → compose_stack pipeline end to end.
proxmox-iac (planned) Source control for the Proxmox hypervisor itself - network bridges, VLANs, storage pools, and eventually a from-scratch build procedure. See the tracked issue there for status.

How a change travels

flowchart LR
  subgraph common["homelab-iac-common"]
    MOD["terraform module<br/>proxmox-vm"]
    COL["ansible collection<br/>flomico.homelab"]
    IMG["toolbox image<br/>ghcr.io/codyecsl/homelab-toolbox"]
    WF["reusable workflow<br/>deploy-stack.yml"]
  end

  MOD -->|git module source| PLAT["homelab-platform"]
  IMG --> PLAT
  IMG --> SVC["service repos<br/>homelab-homepage, ..."]
  WF --> SVC

  PLAT -->|terraform apply| HOST["apps01<br/>192.168.10.101"]
  SVC -->|deploy| HOST
  HOST -->|reverse_proxy| CADDY["caddy-iac"]

See the Runbook for the step-by-step of each of the four everyday scenarios (stand up a service, update one, change a route, change something shared) - it used to live in homelab-iac-common, moved here 2026-08-06 since it's about how the whole fleet operates, not that one repo. This page covers the layer above the runbook: why, and what's been proven to actually work.

The real goal: disaster recovery

The pattern (Terraform + Ansible + a versioned shared collection, deployed via CI) started as an exercise in scalability patterns. The goal that actually matters now is disaster recovery: rebuild the homelab on new hardware, assuming the source drives are gone but TrueNAS (long-term data) and the Bitwarden vault (secrets) survive. See Architecture for the full reasoning, and DR Drills for what's actually been tested against that goal.