# Homelab Infrastructure Documentation ## Network Topology ``` ┌─────────────────┐ │ Internet │ └────────┬────────┘ │ ┌────────▼────────┐ │ Router/Firewall │ │ 10.10.10.1 │ └────────┬────────┘ │ ┌────────────────────────┼────────────────────────┐ │ │ │ ┌────────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐ │ Main Switch │ │ Storage VLAN │ │ Tailscale │ │ vmbr0/vmbr2 │ │ vmbr3 │ │ 100.x.x.x/8 │ │ 10.10.10.0/24 │ │ (Jumbo 9000) │ │ │ └────────┬────────┘ └────────┬────────┘ └─────────────────┘ │ │ ┌───────────┼───────────┐ │ │ │ │ │ ┌────▼───┐ ┌────▼───┐ ┌────▼───┐ │ │ PVE │ │ PVE2 │ │ Other │ │ │ .120 │ │ .102 │ │ Devices│ │ └────┬───┘ └────┬───┘ └────────┘ │ │ │ │ └───────────┴────────────────────────┘ │ ┌───────▼───────┐ │ TrueNAS │ │ (Storage via │ │ HBA/NVMe) │ └───────────────┘ ``` ## IP Address Assignments ### Management Network (10.10.10.0/24) | IP Address | Hostname | Description | |------------|----------|-------------| | 10.10.10.1 | router | Gateway/Firewall | | 10.10.10.102 | pve2 | Proxmox Server 2 | | 10.10.10.120 | pve | Proxmox Server 1 (Primary) | | 10.10.10.125 | mac-mini | Mac Mini (Syncthing node) | | 10.10.10.150 | windows-pc | Windows PC (Syncthing node) | | 10.10.10.147 | macbook | MacBook Pro (Syncthing node) | | 10.10.10.200 | truenas | TrueNAS (Storage/Syncthing hub) | | 10.10.10.220 | gitea-vm | Git Server | | 10.10.10.221 | trading-vm | AI Trading Platform | ### Tailscale Network (100.x.x.x) | IP Address | Hostname | Description | |------------|----------|-------------| | 100.88.161.110 | macbook | MacBook | | 100.106.175.37 | phone | Mobile Device | | 100.108.89.58 | mac-mini | Mac Mini | --- ## Server Hardware ### PVE (10.10.10.120) - Primary Virtualization Host | Component | Specification | |-----------|---------------| | **CPU** | AMD Ryzen Threadripper PRO 3975WX (32C/64T, 280W TDP) | | **RAM** | 128 GB DDR4 ECC | | **Boot** | Samsung 870 QVO 4TB (mirrored) | | **NVMe Pool 1** | 2x Sabrent Rocket Q NVMe (nvme-mirror1, 3.6TB) | | **NVMe Pool 2** | 2x Kingston SFYRD 2TB (nvme-mirror2, 1.8TB) | | **GPU 1** | NVIDIA Quadro P2000 (75W) - Plex transcoding | | **GPU 2** | NVIDIA TITAN RTX (280W) - AI workloads | | **HBA** | LSI SAS2308 - Passed to TrueNAS | | **NVMe Controller** | Samsung PM9A1 - Passed to TrueNAS | ### PVE2 (10.10.10.102) - Secondary Virtualization Host | Component | Specification | |-----------|---------------| | **CPU** | AMD Ryzen Threadripper PRO 3975WX (32C/64T, 280W TDP) | | **RAM** | 128 GB DDR4 ECC | | **NVMe Pool** | 2x NVMe (nvme-mirror3) | | **HDD Pool** | 2x WD Red 6TB (local-zfs2, mirrored) | | **GPU** | NVIDIA RTX A6000 (300W) - AI Trading | --- ## Virtual Machines ### PVE (10.10.10.120) | VMID | Name | vCPUs | RAM | Storage | Purpose | Passthrough | |------|------|-------|-----|---------|---------|-------------| | 100 | truenas | 8 | 32GB | rpool | NAS/Storage | LSI SAS2308 HBA, Samsung NVMe | | 101 | saltbox | 16 | 16GB | rpool/nvme-mirror1/2 | Media automation | TITAN RTX | | 105 | fs-dev | 10 | 8GB | nvme-mirror1 | Development | - | | 110 | homeassistant | 2 | 2GB | nvme-mirror2 | Home automation | - | | 111 | lmdev1 | 8 | 32GB | nvme-mirror1 | AI/LLM development | TITAN RTX | | 201 | copyparty | 2 | 2GB | nvme-mirror1 | File sharing | - | | 206 | docker-host | 2 | 4GB | rpool | Docker services | - | ### PVE2 (10.10.10.102) | VMID | Name | vCPUs | RAM | Storage | Purpose | Passthrough | |------|------|-------|-----|---------|---------|-------------| | 300 | gitea-vm | 2 | 4GB | nvme-mirror3 | Git server | - | | 301 | trading-vm | 16 | 32GB | nvme-mirror3 | AI trading platform | RTX A6000 | --- ## LXC Containers ### PVE (10.10.10.120) | VMID | Name | Purpose | Status | |------|------|---------|--------| | 200 | pihole | DNS/Ad blocking | Running | | 202 | traefik | Reverse proxy | Running | | 205 | findshyt | Custom application | Running | | 500 | dev1 | Development | Stopped | --- ## Storage Architecture ``` PVE (10.10.10.120) ├── rpool (Samsung 870 QVO 4TB mirror) │ ├── Proxmox system │ ├── VM 100 (truenas) boot │ ├── VM 101 (saltbox) boot │ └── VM 206 (docker-host) │ ├── nvme-mirror1 (Sabrent Rocket Q mirror, 3.6TB) │ ├── VM 101 (saltbox) data │ ├── VM 105 (fs-dev) │ ├── VM 111 (lmdev1) │ └── VM 201 (copyparty) │ └── nvme-mirror2 (Kingston SFYRD mirror, 1.8TB) ├── VM 101 (saltbox) data └── VM 110 (homeassistant) PVE2 (10.10.10.102) ├── nvme-mirror3 (NVMe mirror) │ ├── VM 300 (gitea-vm) │ └── VM 301 (trading-vm) │ └── local-zfs2 (WD Red 6TB mirror) └── Backup/archive storage TrueNAS (VM 100 on PVE) ├── HBA Passthrough (LSI SAS2308) │ └── [Physical drives managed by TrueNAS] │ └── NVMe Passthrough (Samsung PM9A1) └── [NVMe drives managed by TrueNAS] ``` --- ## Services Map ``` ┌─────────────────────────────────────────────────────────────────┐ │ EXTERNAL ACCESS │ ├─────────────────────────────────────────────────────────────────┤ │ Tailscale VPN ──► All services accessible via 100.x.x.x │ │ Traefik (CT 202) ──► Reverse proxy for web services │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ CORE SERVICES │ ├─────────────────────────────────────────────────────────────────┤ │ PiHole (CT 200) ──► DNS + Ad blocking │ │ TrueNAS (VM 100) ──► NAS, Syncthing, Storage │ │ Gitea (VM 300) ──► Git repository hosting │ │ Home Assistant (VM 110) ──► Home automation │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ MEDIA SERVICES │ ├─────────────────────────────────────────────────────────────────┤ │ Saltbox (VM 101) ──► Plex, *arr stack, media automation │ │ CopyParty (VM 201) ──► File sharing │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ DEVELOPMENT/AI │ ├─────────────────────────────────────────────────────────────────┤ │ Trading VM (VM 301) ──► AI trading platform (RTX A6000) │ │ LMDev1 (VM 111) ──► LLM development (TITAN RTX) │ │ FS-Dev (VM 105) ──► General development │ │ Docker Host (VM 206) ──► Containerized services │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## Syncthing Topology ``` ┌─────────────────┐ │ TrueNAS │ │ (Hub/Server) │ │ Port 20910 │ └────────┬────────┘ │ ┌───────────────────┼───────────────────┐ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │ MacBook │ │ Mac Mini│ │ Windows │ │ .147 │ │ .123 │ │ PC .150 │ └─────────┘ └─────────┘ └─────────┘ Synced Folders: ├── antigravity (310MB) ├── bin (23KB) ├── claude-code (257MB) ├── claude-desktop (784MB) ├── config (436KB) ├── cursor (459MB) ├── desktop (7.2GB) ├── documents (11GB) ├── dotconfig (212MB) ├── downloads (38GB) ├── movies (334MB) ├── music (606KB) ├── notes (73KB) ├── pictures (259MB) └── projects (3.1GB) ``` --- ## Power Consumption ### Estimated Power Draw | Component | Idle | Load | Notes | |-----------|------|------|-------| | **PVE CPU** | 50W | 280W | TR PRO 3975WX | | **PVE2 CPU** | 50W | 280W | TR PRO 3975WX | | **TITAN RTX** | 20W | 280W | Passthrough to saltbox/lmdev1 | | **RTX A6000** | 25W | 300W | Passthrough to trading-vm | | **Quadro P2000** | 10W | 75W | Plex transcoding | | **Storage (per server)** | 30W | 50W | NVMe + SSD mirrors | | **Base system (each)** | 50W | 60W | Motherboard, RAM, fans | ### Total Estimates - **Idle**: ~400-500W combined - **Moderate load**: ~700-900W combined - **Full load**: ~1200-1400W combined ### Power Optimizations Applied 1. KSMD disabled on both hosts (saved ~10W) 2. Syncthing rescan intervals increased (saved ~60-80W from TrueNAS CPU) 3. CPU governor optimization (saved ~60-120W) - PVE: `powersave` + `balance_power` EPP (amd-pstate-epp) - PVE2: `schedutil` (acpi-cpufreq) 4. ksmtuned service disabled on both hosts (saved ~2-5W) 5. HDD spindown on PVE2 - 30 min timeout (saved ~10-16W) - local-zfs2 pool (2x WD Red 6TB) essentially empty **Total estimated savings: ~142-231W** --- ## SSH Access ### Credentials | Host | IP Address | Username | Password | Notes | |------|------------|----------|----------|-------| | Hutson-PC | 10.10.10.150 | claude | GrilledCh33s3# | Windows PC | | MacBook | 10.10.10.147 | hutson | GrilledCh33s3# | MacBook Pro | | TrueNAS | 10.10.10.200 | truenas_admin | GrilledCh33s3# | SSH key configured | ### SSH Keys The Mac Mini has an SSH key configured at `~/.ssh/id_ed25519` for passwordless authentication to Proxmox hosts and other infrastructure. For Proxmox servers (PVE and PVE2), SSH access is configured in `~/.ssh/config`: ``` Host pve HostName 10.10.10.120 User root IdentityFile ~/.ssh/ai_trading_ed25519 Host pve2 HostName 10.10.10.102 User root IdentityFile ~/.ssh/ai_trading_ed25519 ``` --- ## Credentials Management Sensitive credentials are stored in `/Users/hutson/Projects/homelab/.env` for use with infrastructure management scripts and automation. This file contains: - Service passwords - API keys - Database credentials - Other sensitive configuration values **Note**: The `.env` file is git-ignored and should never be committed to version control. --- ## Configuration Backups Configuration files are backed up in `/Users/hutson/Projects/homelab/configs/` directory. ### Current Backups | File | Description | |------|-------------| | ghostty.conf | Ghostty terminal emulator configuration | This directory serves as a centralized location for storing configuration backups from various systems and applications in the homelab environment.