Self-hosted infrastructure as code — ~50 Docker services, Prometheus + Grafana power-monitoring, defense-in-depth security, fully reproducible.
- Defense-in-depth security — UFW + Suricata IDS + fail2ban + VPN killswitch + zero open ports.
- Power-aware monitoring — Prometheus + Grafana + Scaphandre measure real wattage and cost.
- Event-driven alerting — ~20 ntfy callers push SSH, sudo, IDS hits to phone in seconds.
| services | inbound ports | metric retention | UFW drops / 7d |
Sourced from docs/metrics.md — every figure links back to the command or dashboard that produced it.
Full per-service catalogue: docker/README.md

Homepage — themed dashboards · live tiles · *arr stack

Grafana — power, energy, cost, capacity
![]() deploy.sh — idempotent rsync with conditional reloads |
![]() ntfy — event-driven push alerts to phone |
.
├── docker/ # Compose stack (~50 services) + .env.example
├── homepage/ # Dashboard config (services + widgets)
├── scripts/ # deploy, healthcheck, backup/, security/, monitoring/, maintenance/, motd/, systemd/
├── security/ # UFW, fail2ban, SSH, hardening checklist
├── docs/ # Architecture, security model, threat model, runbook, DR, cost, decisions
└── .github/workflows/ # CI: shellcheck + yamllint + markdownlint + gitleaks + sanitize-check
git clone https://github.com/MrTorriz/homelab.git ~/homelab
cd ~/homelab
# 1. Configure
cp docker/.env.example docker/.env
$EDITOR docker/.env
# 2. Bring up the stack
docker network create homelab
cd docker && docker compose up -d
# 3. Apply security baseline
sudo bash ../security/ufw-baseline.sh
sudo bash ../security/install-fail2ban.sh
# 4. Deploy via the same flow on every change
../scripts/deploy.shNote: set
LAN_IFACEin.envto match your NIC name.eth0is a placeholder — modern Ubuntu typically usesenp*orens*(check withip -br link).
External access is opt-in — set up a Cloudflare Tunnel and point it at npm:443 (no router port-forwarding needed).
docs/architecture.md— How traffic, storage, and trust flow through the systemdocs/security.md— Defense-in-depth model + STRIDE analysisdocs/observability.md— Three-layer model: metrics (Prometheus + Grafana + Scaphandre), events (~20 ntfy callers across 7 security + 13 operational sources), health (healthcheck cron) — dashboard screenshotdocs/metrics.md— What the system actually catches (real numbers)docs/runbook.md— Incident playbooks: what to do at 03:00docs/disaster-recovery.md— RTO/RPO targets + zero-to-running restoredocs/cost.md— What it actually costs to run, with receiptsdocs/hardware.md— Specs, storage layout, GPU roledocs/decisions.md— Why these tools and not the alternatives
MIT — fork it, copy bits, learn from it.

