Production homelab: 50+ services บน 3 nodes

Ubuntu 3 เครื่อง Caddy reverse proxy ตัวเดียว self-hosted services 50+ ตัว ที่ดูแลทุกอย่าง — email, git, CI/CD, dashboards, password manager, photo backup และ Kubernetes cluster เล็ก ๆ สำหรับงานที่ต้องการ

Stack

Nodeบทบาทสเปค
edge-01Reverse proxy + firewall2 vCPU, 4GB RAM, public IP
app-01Application workloads8 vCPU, 32GB RAM, NVMe
data-01Databases + storage8 vCPU, 32GB RAM, 2×4TB HDD (RAID1)

รันอะไรที่ไหน

edge-01 (public-facing):

  • Caddy auto HTTPS ผ่าน Cloudflare DNS-01
  • Crowdsec + fail2ban สำหรับ intrusion detection
  • WireGuard สำหรับ admin access

app-01 (workloads):

  • Woodpecker CI
  • Gitea (lightweight self-hosted Git)
  • Drone runners (3 instances)
  • Plausible Analytics
  • Uptime Kuma
  • Healthchecks.io (cron monitoring)

data-01 (stateful):

  • PostgreSQL 16 (single primary, streaming replication ไป app-01)
  • Redis 7
  • MinIO (S3-compatible สำหรับ backup + media)
  • Restic repo (nightly snapshots → B2 + local)

Orchestration

docker-compose.yml ไฟล์เดียวต่อ service เก็บใน private Gitea repo Deploy ผ่าน bash script เล็ก ๆ ที่:

  1. Pull config ล่าสุดจาก Gitea
  2. รัน docker compose pull
  3. Health-check ก่อนหยุด container เก่า
  4. Roll back อัตโนมัติถ้า health check fail

Zero-downtime deploys สำหรับทุกอย่างที่ stateless

Monitoring

  • Prometheus บน data-01, scrape ทั้ง 3 nodes ผ่าน node-exporter
  • Grafana dashboards สำหรับ CPU, RAM, disk, network, Docker containers
  • Uptime Kuma สำหรับ external service health
  • Alertmanager → Telegram เมื่อมีอะไรผิดปกติ

Backups

  • Restic → Backblaze B2 (encrypted, deduplicated)
  • Snapshot databases ทุกชั่วโมง อย่างอื่นทุกวัน
  • 30-day retention + monthly archive
  • Restore drill ทุกเดือน (ใช่ ผมทดสอบจริง ๆ)

ต่อไป

  • เปลี่ยน PostgreSQL เดี่ยวเป็น Patroni + etcd (HA)
  • ย้าย stateless workloads ไป k3s cluster เล็ก ๆ
  • เพิ่ม Ceph สำหรับ distributed storage จริง ๆ

Config + dashboards ทั้งหมด: github.com/nuteo/homelab (placeholder)