diff --git a/README.md b/README.md new file mode 100644 index 0000000..86b45bc --- /dev/null +++ b/README.md @@ -0,0 +1,319 @@ +# Castaldi Family Homelab + +> **A GitOps-managed, self-hosted infrastructure running media services, container orchestration, and automation across distributed ARM and x86 nodes.** + +[![GitOps](https://img.shields.io/badge/GitOps-Komodo-blue?style=flat-square)](https://komo.do) +[![Infrastructure](https://img.shields.io/badge/Infrastructure-Multi--Node-green?style=flat-square)](#architecture) +[![Documentation](https://img.shields.io/badge/Docs-KBAs%20%2B%20SOPs-orange?style=flat-square)](documentation/) + +--- + +## πŸš€ Why This Homelab? + +- **Zero-Touch Deployments:** Push to Git β†’ Auto-deploy via webhooks β†’ Containers update automatically +- **Infrastructure as Code:** All services defined in version-controlled `compose.yaml` files +- **GPU Transcoding:** Hardware-accelerated media streaming with NVIDIA GTX 1060 +- **Distributed Architecture:** Services intelligently distributed across VM, physical server, and Raspberry Pi +- **Self-Hosted Git:** No external dependenciesβ€”Gitea runs on-premise with automated backups +- **Production-Grade Networking:** Traefik reverse proxy with automatic SSL (Cloudflare DNS challenge) + +--- + +## πŸ—οΈ Architecture + +```mermaid +graph TB + subgraph Internet + CF[Cloudflare DNS] + end + + subgraph "Heimdall (Proxmox VM - 10.0.0.151)" + Traefik[Traefik Reverse Proxy
:80, :443] + Komodo[Komodo Core
Container Orchestrator] + Gitea[Gitea
Self-Hosted Git] + Redis[Redis Cache] + end + + subgraph "Waldorf (Physical Server - 10.0.0.251)" + Plex[Plex Media Server
GPU Transcoding] + Tunarr[Tunarr
IPTV Channels] + GPU[NVIDIA GTX 1060] + end + + subgraph "Watchtower (Raspberry Pi 5 - 10.0.0.200)" + Periphery[Komodo Periphery
Remote Agent] + end + + subgraph "TerraMaster NAS (10.0.0.250)" + NFS[NFS Storage
/Volume1/appdata] + end + + CF -->|HTTPS| Traefik + Traefik --> Gitea + Traefik --> Komodo + Traefik --> Plex + Traefik --> Tunarr + + Komodo <-->|WebSocket| Periphery + Gitea -->|Webhook| Komodo + + Plex --> GPU + Tunarr --> GPU + + Heimdall -.->|NFSv3| NFS + Waldorf -.->|NFSv3| NFS + Watchtower -.->|NFSv3| NFS + + style Traefik fill:#326ce5,color:#fff + style Komodo fill:#ff6b6b,color:#fff + style GPU fill:#76b900,color:#fff + style NFS fill:#f9a825,color:#000 +``` + +--- + +## πŸ“¦ Infrastructure Inventory + +| Node | IP | Hardware | Role | Services | +|------|------|----------|------|----------| +| **Heimdall** | `10.0.0.151` | Proxmox VM
Intel N100, 16GB RAM | Core Services | Komodo, Gitea, Traefik, Redis | +| **Waldorf** | `10.0.0.251` | Physical Server
i7-7820HQ, GTX 1060, 16GB | Media Processing | Plex, Tunarr (GPU transcoding) | +| **Watchtower** | `10.0.0.200` | Raspberry Pi 5
ARM Cortex-A76, 16GB | Periphery Node | Komodo Agent | +| **TerraMaster** | `10.0.0.250` | NAS | Shared Storage | NFSv3 (`/Volume1/appdata`) | + +--- + +## ⚑ Quick Start + +### Prerequisites + +- SSH access to nodes +- Git configured with credentials: + ```bash + git config --global credential.helper wincred # Windows + git config --global core.autocrlf true + ``` + +### Clone & Deploy + +```bash +# Clone from self-hosted Gitea +git clone https://git.castaldifamily.com/nathan/homelab.git +cd homelab + +# Deploy a service (via Komodo UI or SSH) +ssh chester@10.0.0.251 +cd /etc/komodo/stacks/tunarr +docker compose up -d +``` + +### Automated GitOps Workflow + +1. **Edit** `nodes/{node}/{service}/compose.yaml` +2. **Commit** and push to `main` branch +3. **Webhook** triggers Komodo pull +4. **Auto-deploy** updates running containers + +--- + +## 🎯 Active Missions + +> **Traffic Light System:** 🟒 Complete | 🟑 In Progress | πŸ”΄ Blocked + +| Status | Mission | Details | +|--------|---------|---------| +| 🟒 | **GitOps Migration** | All production stacks migrated to Git-based deployment | +| 🟒 | **Webhook Automation** | Gitea webhooks trigger auto-deploy on push | +| 🟒 | **GPU Passthrough** | NVIDIA GTX 1060 accessible in Plex/Tunarr containers | +| 🟒 | **Documentation Structure** | KBAs and SOPs organized in `documentation/` | +| 🟑 | **Hardware Transcoding Validation** | Monitor Plex for `(hw)` indicator during active streams | +| 🟒 | **NFS Mount Stability** | NFSv3 forced on Raspberry Pi to prevent ID-domain errors | +| 🟒 | **Credential Security** | Secrets managed via Komodo Environment Variables (not Git) | + +--- + +## πŸ“‚ Repository Structure + +``` +homelab/ +β”œβ”€β”€ nodes/ # Service definitions per node +β”‚ β”œβ”€β”€ heimdall/ # Core infrastructure (VM) +β”‚ β”‚ β”œβ”€β”€ core/ # Komodo, Traefik, Redis +β”‚ β”‚ └── gitea/ # Self-hosted Git +β”‚ β”œβ”€β”€ waldorf/ # Media services (Physical) +β”‚ β”‚ β”œβ”€β”€ plex/ # Media server + GPU +β”‚ β”‚ └── tunarr/ # IPTV channels + GPU +β”‚ └── watchtower/ # Periphery agent (Pi 5) +β”œβ”€β”€ documentation/ # Technical knowledge base +β”‚ β”œβ”€β”€ KBAs/ # Troubleshooting guides +β”‚ β”œβ”€β”€ SOPs/ # Operational procedures +β”‚ └── TECHNICAL_RUNBOOK.md # Emergency reference +β”œβ”€β”€ ansible/ # (Future) Automated provisioning +└── scripts/ # Utility scripts +``` + +--- + +## πŸ”§ Common Operations + +### Deploy a New Stack + +```bash +# 1. Create directory structure +mkdir -p nodes/waldorf/sonarr + +# 2. Create compose.yaml +cat > nodes/waldorf/sonarr/compose.yaml <