Files
homelab-docs/INFRASTRUCTURE.md
Hutson 93821d1557 Initial commit: Homelab infrastructure documentation
- CLAUDE.md: Main homelab assistant context and instructions
- IP-ASSIGNMENTS.md: Complete IP address assignments
- NETWORK.md: Network bridges, VLANs, and configuration
- EMC-ENCLOSURE.md: EMC storage enclosure documentation
- SYNCTHING.md: Syncthing setup and device list
- SHELL-ALIASES.md: ZSH aliases for Claude Code sessions
- HOMEASSISTANT.md: Home Assistant API and automations
- INFRASTRUCTURE.md: Server hardware and power management
- configs/: Shared shell configurations
- scripts/: Utility scripts
- mcp-central/: MCP server configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 02:31:02 -05:00

331 lines
14 KiB
Markdown

# 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.123 | 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.