Sanitized mirror from private repository - 2026-04-05 12:11:15 UTC
Some checks failed
Documentation / Deploy to GitHub Pages (push) Has been cancelled
Documentation / Build Docusaurus (push) Has been cancelled

This commit is contained in:
Gitea Mirror Bot
2026-04-05 12:11:15 +00:00
commit 5cdf36e545
1395 changed files with 358118 additions and 0 deletions

View File

@@ -0,0 +1,210 @@
# ⚡ 10GbE Backbone Network
## Overview
The Concord primary location features a high-speed 10 Gigabit Ethernet backbone connecting the NAS cluster and primary workstations, enabling fast file transfers, media streaming, and backup operations.
---
## 🔌 10GbE Topology (Mermaid)
```mermaid
graph LR
subgraph Internet["☁️ Internet (25Gbps Fiber)"]
ISP["Sonic Fiber<br/>25Gbps ↑↓"]
end
subgraph Router["🌐 TP-Link Archer BE800"]
TPLINK["TP-Link Archer BE800<br/>Tri-Band WiFi 7<br/>10G + SFP+ + 4x2.5G"]
end
subgraph Switch["⚡ 10GbE Switch"]
TLSX["TP-Link TL-SX1008<br/>8-Port 10GbE<br/>Unmanaged Switch"]
end
subgraph HighSpeed["⚡ 10GbE Devices"]
ATL["🗄️ Atlantis<br/>DS1823xs+<br/>10GbE via E10M20-T1<br/>192.168.0.200"]
CAL["🗄️ Calypso<br/>DS723+<br/>10GbE via E10G22-T1-Mini<br/>192.168.0.250"]
GUA["💻 Guava<br/>TrueNAS Scale<br/>Mellanox ConnectX-5<br/>192.168.0.100"]
DSK["🖥️ Shinku-Ryuu<br/>i7-14700K + RTX 4080<br/>Mellanox ConnectX-5<br/>192.168.0.3"]
end
subgraph GigE["🔌 1GbE / Other Devices"]
PROX["🖥️ Proxmox<br/>VM Host"]
PI_V["📡 RPi 5 Vish"]
GL_MT["📡 GL-MT3000<br/>HA Router"]
GL_BE["📡 GL-BE3600<br/>Exit Node Router"]
end
ISP -->|"25Gbps"| TPLINK
TPLINK -->|"10GbE"| TLSX
TLSX -->|"10GbE"| ATL
TLSX -->|"10GbE"| CAL
TLSX -->|"10GbE"| GUA
TLSX -->|"10GbE"| DSK
TPLINK -->|"1GbE"| PROX
TPLINK -->|"1GbE"| PI_V
TPLINK -->|"1GbE"| GL_MT
TPLINK -->|"1GbE"| GL_BE
classDef switch fill:#f39c12,stroke:#333,stroke-width:2px,color:#fff
classDef nas fill:#3498db,stroke:#333,stroke-width:2px,color:#fff
classDef compute fill:#9b59b6,stroke:#333,stroke-width:2px,color:#fff
classDef router fill:#2ecc71,stroke:#333,stroke-width:2px,color:#fff
class TLSX switch
class ATL,CAL nas
class GUA,DSK,PROX,ANUB,PI_V compute
class TPLINK router
```
---
## 📝 ASCII 10GbE Layout
```
╔══════════════════════════════════════════════════════════════════════════════════════════╗
║ 10 GIGABIT ETHERNET BACKBONE ║
║ Concord, CA • 25Gbps Internet • High-Speed LAN ║
╚══════════════════════════════════════════════════════════════════════════════════════════╝
┌─────────────────────────┐
│ ☁️ INTERNET │
│ Sonic 25Gbps Fiber │
│ 25,000 Mbps ↑↓ │
└───────────┬─────────────┘
│ 25Gbps
┌─────────────────────────┐
│ 🌐 TP-Link Archer BE800 │
│ ═══════════════════════ │
│ WiFi 7 Tri-Band Router │
│ • 1x 10Gbps RJ45 Port │
│ • 1x 10Gbps SFP+ Port │
│ • 4x 2.5Gbps LAN Ports │
└─────┬─────────┬─────────┘
│ │
10GbE │ │ 2.5GbE
│ │
┌───────────────┘ └───────────────────────────┐
│ │
▼ ▼
┌───────────────────────────────┐ ┌─────────────────────────────────┐
│ ⚡ TP-Link TL-SX1008 │ │ 🔌 1GbE / ROUTER DEVICES │
│ ═══════════════════════════ │ │ ═══════════════════════════ │
│ 8-Port 10GbE Unmanaged │ │ │
│ • All ports 10GBASE-T │ │ ┌─────────┐ ┌─────────┐ │
│ • 160Gbps switching capacity │ │ │ Proxmox │ │RPi 5 │ │
│ • Fanless, silent operation │ │ │ VM Host │ │ Vish │ │
│ │ │ │ 1GbE │ │ 1GbE │ │
│ Port Layout: │ │ └─────────┘ └─────────┘ │
│ ┌───┬───┬───┬───┬───┬───┬───┬───┐ │ │
│ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ │ ┌─────────┐ ┌─────────┐ │
│ └─┬─┴─┬─┴─┬─┴─┬─┴───┴───┴───┴───┘ │ │GL-BE3600│ │GL-MT3000│ │
│ │ │ │ │ (unused) │ │exit node│ │HA subnet│ │
└────┼───┼───┼───┼──────────────────┘ │ └─────────┘ └─────────┘ │
│ │ │ │ └─────────────────────────────────┘
│ │ │ │
10GbE│ │ │ │10GbE
│ │ │ │
▼ ▼ ▼ ▼
┌────────────────────────────────────────────────────────────────────┐
│ ⚡ 10GbE CONNECTED DEVICES │
│ ══════════════════════════════════════════════════════════════ │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ ATLANTIS │ │ CALYPSO │ │ GUAVA │ │
│ │ ═════════════ │ │ ═════════════ │ │ ═════════════ │ │
│ │ 192.168.0.200 │ │ 192.168.0.250 │ │ 192.168.0.100 │ │
│ │ │ │ │ │ │ │
│ │ DS1823xs+ │ │ DS723+ │ │ TrueNAS Scale │ │
│ │ 8-Bay NAS │ │ 2-Bay NAS │ │ Ryzen 5 8600G │ │
│ │ │ │ │ │ │ │
│ │ 8x 16TB HDDs │ │ 2x 12TB HDDs │ │ 2x 4TB SSD │ │
│ │ = 128TB Raw │ │ = 24TB Raw │ │ = 8TB Raw │ │
│ │ │ │ │ │ │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │
│ │ │ E10M20-T1 │ │ │ │E10G22-T1 │ │ │ │ Mellanox │ │ │
│ │ │ 10GbE+M.2 │ │ │ │ -Mini │ │ │ │ConnectX-5 │ │ │
│ │ │ PCIe │ │ │ │ 10GbE │ │ │ │ 10/25GbE │ │ │
│ │ └───────────┘ │ │ └───────────┘ │ │ └───────────┘ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ SHINKU-RYUU │ │
│ │ ═════════════ │ │
│ │ 192.168.0.3 │ │
│ │ │ │
│ │ i7-14700K │ │
│ │ RTX 4080 16GB │ │
│ │ 96GB DDR5 │ │
│ │ ┌───────────┐ │ │
│ │ │ Mellanox │ │ │
│ │ │ConnectX-5 │ │ │
│ │ │ 10/25GbE │ │ │
│ │ └───────────┘ │ │
│ └─────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────┘
╔════════════════════════════════════════════════════════════════════════════════════════╗
║ PERFORMANCE BENCHMARKS ║
║ ═════════════════════ ║
║ ║
║ • NAS-to-NAS Transfer (Atlantis ↔ Calypso): ~1.1 GB/s (8.8 Gbps) ║
║ • Desktop → Atlantis Sequential Write: ~1.0 GB/s (8.0 Gbps) ║
║ • Atlantis → Desktop Sequential Read: ~1.1 GB/s (8.8 Gbps) ║
║ • 4K Video Stream (single): ~100 Mbps (0.1 Gbps) ║
║ • 4K Video Streams (concurrent, theoretical): ~80 streams ║
║ ║
║ Bottlenecks: ║
║ • None for 10GbE devices - full speed to switch via router's 10G uplink ║
║ • 1GbE devices: Proxmox host, RPi 5, GL routers connected via router's GbE ports ║
╚════════════════════════════════════════════════════════════════════════════════════════╝
```
---
## 📊 Hardware Specifications
### TP-Link TL-SX1008 (10GbE Switch)
| Specification | Value |
|---------------|-------|
| Ports | 8x 10GBASE-T (RJ45) |
| Switching Capacity | 160 Gbps |
| Forwarding Rate | 119.04 Mpps |
| Management | Unmanaged |
| Cooling | Fanless (silent) |
| Power | ~15W typical |
### 10GbE Network Cards
| Device | NIC Model | Interface | Notes |
|--------|-----------|-----------|-------|
| Atlantis | Synology E10M20-T1 | PCIe 3.0 x8 | Combo 10GbE + M.2 slot |
| Calypso | Synology E10G22-T1-Mini | PCIe 3.0 | Official Synology 10GbE (Intel X550-AT) |
| Guava | Mellanox ConnectX-5 (MT27800) | PCIe | 2-port; 10/25GbE capable; running at 10Gbps |
| Shinku-Ryuu | Mellanox ConnectX-5 (2-port) | PCIe | 10/25GbE capable; running at 10Gbps |
---
## 🔧 Cable Requirements
All 10GbE connections use **Cat6a or Cat7** cables for reliable 10Gbps performance:
| Connection | Cable Type | Length | Notes |
|------------|------------|--------|-------|
| Switch → Atlantis | Cat6a | ~2m | Shielded recommended |
| Switch → Calypso | Cat6a | ~2m | Shielded recommended |
| Switch → Guava | Cat6a | ~3m | |
| Switch → Desktop | Cat6a | ~5m | |
| Router → Switch | Cat6a | ~1m | 2.5GbE link |
---
## 🔗 Related Diagrams
- [Network Topology](network-topology.md) - Complete network overview
- [Storage Topology](storage-topology.md) - NAS storage configuration

115
docs/diagrams/README.md Normal file
View File

@@ -0,0 +1,115 @@
# 📊 Homelab Infrastructure Diagrams
This directory contains visual documentation of the homelab infrastructure, including network topology, service architecture, and storage layouts. All diagrams use [Mermaid.js](https://mermaid.js.org/) for rendering.
## 📁 Diagram Index
| Diagram | Description | Format |
|---------|-------------|--------|
| [Network Topology](network-topology.md) | Physical and logical network layout across all locations | Mermaid + ASCII |
| [Tailscale Mesh](tailscale-mesh.md) | VPN mesh network connecting all locations | Mermaid + ASCII |
| [10GbE Backbone](10gbe-backbone.md) | High-speed network backbone in Concord | Mermaid + ASCII |
| [Service Architecture](service-architecture.md) | How services interact, auth flows, CI/CD pipeline | Mermaid |
| [Storage Topology](storage-topology.md) | NAS cluster, volumes, and backup flows | Mermaid + ASCII |
| [Location Overview](location-overview.md) | Geographic distribution of infrastructure | Mermaid |
### Service Architecture Sections
- Media Stack (Arr suite, Plex, streaming)
- Monitoring Stack (Prometheus, Grafana)
- **Authentication Stack (Authentik + NPM)** ⭐ NEW
- Communication Stack (Matrix, Mastodon, Mattermost)
- **CI/CD Pipeline (Gitea Actions + Ansible)** ⭐ NEW
- AI/ML Stack (Ollama, vLLM, Olares)
- DCIM/IPAM (NetBox)
## 🔐 Key Architecture Components
### Authentication & Proxy Stack
```
┌─────────────────────────────────────────────────────────────────────┐
│ Internet → Cloudflare → NPM (matrix-ubuntu) → Authentik (Calypso) │
│ ↓ │
│ Protected Services │
└─────────────────────────────────────────────────────────────────────┘
```
| Component | Host | Port | Purpose |
|-----------|------|------|---------|
| **Nginx Proxy Manager** | matrix-ubuntu | :81/:443 | Reverse proxy, SSL termination |
| **Authentik Server** | Calypso | :9000 | Identity provider, SSO |
| **Authentik Outpost** | Calypso | :9444 | Forward auth proxy |
| **Headscale** | Calypso | :8080 | Self-hosted Tailscale controller |
| **WireGuard** | Atlantis | :51820 | VPN server |
### Service Protection via Authentik
| Domain | Service | Auth Type |
|--------|---------|-----------|
| sso.vish.gg | Authentik | - (IdP) |
| git.vish.gg | Gitea | OAuth2/OIDC |
| gf.vish.gg | Grafana | OAuth2/OIDC |
| nb.vish.gg | NetBox | OAuth2/OIDC |
| dash.vish.gg | Homarr | OAuth2/OIDC |
| rx.vish.gg | Reactive Resume | OAuth2/OIDC |
| immich | Immich | OAuth2/OIDC |
| headscale.vish.gg/admin | Headplane | OAuth2/OIDC |
| docs.vish.gg | Paperless-NGX | Forward Auth |
| actual.vish.gg | Actual Budget | Forward Auth |
## 🗺️ Quick Reference
### Locations
- **Concord, CA** (Primary) - Main infrastructure, 25Gbps fiber
- **Concord, CA** (Backup ISP) - Failover connectivity, 2Gbps/500Mbps
- **Tucson, AZ** - Remote NAS (Setillo)
- **Honolulu, HI** - Travel/remote access point
- **Seattle, WA** - Cloud VPS (Contabo)
### Key Infrastructure
- **3 Synology NAS** units (Atlantis, Calypso, Setillo)
- **10GbE backbone** via TP-Link TL-SX1008
- **Tailscale mesh** connecting all locations
- **Proxmox** virtualization for VMs
- **Authentik SSO** protecting 12+ services
- **Nginx Proxy Manager** routing 30+ domains
- **Olares** K8s node for local LLM inference
### Service Counts by Host
| Host | Services | Primary Role |
|------|----------|--------------|
| Atlantis | 59 | Media, downloads, DNS backup, dashboard |
| Calypso | 61 | Auth, Gitea, arr-suite, headscale |
| matrix-ubuntu | 12+ | NPM, Matrix, Mastodon, Mattermost |
| Homelab VM | 38 | Monitoring, tools, DCIM, Ansible UI |
| Concord NUC | 19 | Home Assistant, Plex, edge |
| RPi 5 | 6 | Uptime Kuma, monitoring, DIUN |
| **Total** | **~195** | **Across 5 Portainer endpoints + matrix-ubuntu** |
## 🔄 Diagram Updates
These diagrams should be updated when:
- New hosts are added
- Network topology changes
- Services are added/removed
- Storage configuration changes
- Authentication flows change
## 📝 Viewing Diagrams
These diagrams render automatically on:
- **Gitea** (git.vish.gg) - Native Mermaid support
- **GitHub** - Native Mermaid support
- **VS Code** - With Mermaid extension
For local viewing:
```bash
# Install mermaid-cli
npm install -g @mermaid-js/mermaid-cli
# Generate PNG from markdown
mmdc -i service-architecture.md -o output.png
```
---
*Last updated: 2026-03-20*

View File

@@ -0,0 +1,240 @@
# 🗺️ Geographic Location Overview
## Overview
The homelab infrastructure spans 4 physical locations plus cloud and mobile components, all connected via **Headscale** (self-hosted Tailscale control server at `headscale.vish.gg:8443` on Calypso).
---
## 🌎 Location Map (Mermaid)
```mermaid
graph TB
subgraph USA["🇺🇸 United States"]
subgraph West["West Coast"]
SEA["🌲 Seattle, WA<br/>Cloud VPS"]
CON["🏠 Concord, CA<br/>PRIMARY HQ<br/>25Gbps Fiber"]
end
subgraph Southwest["Southwest"]
TUC["🌵 Tucson, AZ<br/>Remote NAS"]
end
subgraph Pacific["Pacific"]
HON["🌺 Honolulu, HI<br/>Remote Access"]
end
end
subgraph Mobile["✈️ Mobile"]
MSI["💻 MSI Laptop<br/>Travel Workstation"]
end
%% Headscale connections
CON <-->|"Headscale<br/>Primary Hub"| SEA
CON <-->|"Headscale"| TUC
CON <-->|"Headscale"| HON
CON <-->|"Headscale"| MSI
SEA <-->|"Headscale"| TUC
SEA <-->|"Headscale"| HON
TUC <-->|"Headscale"| HON
classDef primary fill:#e74c3c,stroke:#333,stroke-width:3px,color:#fff
classDef secondary fill:#3498db,stroke:#333,stroke-width:2px,color:#fff
classDef remote fill:#2ecc71,stroke:#333,stroke-width:2px,color:#fff
classDef mobile fill:#9b59b6,stroke:#333,stroke-width:2px,color:#fff
class CON primary
class SEA secondary
class TUC,HON remote
class MSI mobile
```
---
## 📝 ASCII Location Map
```
╔══════════════════════════════════════════════════════════════════════════════════════════╗
║ HOMELAB GEOGRAPHIC DISTRIBUTION ║
║ 4 Locations + Cloud + Mobile • Headscale Mesh (headscale.vish.gg) ║
╚══════════════════════════════════════════════════════════════════════════════════════════╝
🇺🇸 UNITED STATES
═══════════════════════════════════════════════════════════════════════════════════
🌲 SEATTLE, WA
┌─────────────────┐
│ Contabo VM │
│ Cloud VPS │
│ • External │
│ Access │
└────────┬────────┘
│ Tailscale
─────────────────────────┼─────────────────────────────────────────────────────────
🏠 CONCORD, CA ◄──────── PRIMARY HEADQUARTERS
┌─────────────────────────────────────────┐
│ ★ PRIMARY LOCATION │
│ ══════════════════ │
│ │
│ Internet: 25Gbps Sonic Fiber │
│ Backup: 2Gbps/500Mbps │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Main Network (25Gbps) │ │
│ │ • Atlantis (DS1823xs+) 10GbE │ │
│ │ • Calypso (DS723+) 10GbE │ │
│ │ • Guava (TrueNAS Scale) 10GbE │ │
│ │ • Shinku-Ryuu (Desktop) 10GbE │ │
│ │ • Proxmox + Homelab VM │ │
│ │ • matrix-ubuntu (on Atlantis) │ │
│ │ • GL-BE3600 (exit node router) │ │
│ │ • GL-MT3000 (HA subnet router) │ │
│ │ • RPi 5 (Vish) │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Backup Network (2G/500M) │ │
│ │ • Concord NUC │ │
│ │ • RPi 5 Kevin │ │
│ └─────────────────────────────────┘ │
│ │
│ Services: 150+ containers │
│ Storage: 152TB across 3 NAS │
└────────────────────┬────────────────────┘
│ Tailscale (all locations mesh connected)
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
🌵 TUCSON, AZ (via Headscale) 🌺 HONOLULU, HI (via Headscale)
┌─────────────────────┐ ┌─────────────────────┐
│ Remote Backup Site │ │ Remote Access │
│ ═══════════════════│ │ ═══════════════════│
│ │ │ │
│ • Setillo DS223j │ │ • bluecrownpf │
│ (Off-site backup)│ │ (Partner's PC) │
│ │ │ • mah-pc │
│ Services: │ │ │
│ • Plex Server │ │ Access to: │
│ • AdGuard Home │ │ • Plex streaming │
│ • HyperBackup │ │ • All services via │
│ │ │ Headscale │
│ Purpose: │ │ │
│ • 3-2-1 backup │ │ │
│ • Geographic │ │ │
│ redundancy │ │ │
└─────────────────────┘ └─────────────────────┘
─────────────────────────────────────────────────────────────────────────────────────
✈️ MOBILE (Anywhere)
┌─────────────────────┐
│ MSI Laptop │
│ ═══════════════════│
│ │
│ • Full Tailscale │
│ access │
│ • Development │
│ • Remote admin │
│ • OpenHands │
│ │
│ Can connect from: │
│ • Hotels │
│ • Airports │
│ • Coffee shops │
│ • Anywhere with │
│ internet │
└─────────────────────┘
╔════════════════════════════════════════════════════════════════════════════════════════╗
║ LOCATION SUMMARY ║
╠════════════════════════════════════════════════════════════════════════════════════════╣
║ ║
║ Location │ Type │ Devices │ Bandwidth │ Primary Purpose ║
║ ────────────────┼───────────┼─────────┼──────────────┼─────────────────────────────── ║
║ Concord (Main) │ Primary │ 12+ │ 25Gbps │ Main infrastructure ║
║ Concord (Backup)│ Failover │ 3 │ 2G/500M │ Redundant connectivity + HA ║
║ Tucson │ Remote │ 1 │ ISP │ Off-site backup, Plex ║
║ Honolulu │ Remote │ 2 │ ISP │ Partner access ║
║ Seattle (Cloud) │ Cloud │ 1 │ Unmetered │ Fluxer, LLMs, exit node ║
║ Mobile │ Travel │ 1 │ Variable │ Remote administration ║
║ ║
╠════════════════════════════════════════════════════════════════════════════════════════╣
║ DISTANCES FROM PRIMARY (Concord, CA) ║
║ ───────────────────────────────────── ║
║ • Seattle, WA: ~680 miles (~1,100 km) ║
║ • Tucson, AZ: ~650 miles (~1,050 km) ║
║ • Honolulu, HI: ~2,400 miles (~3,860 km) ║
║ ║
║ Latency (typical Tailscale): ║
║ • Concord ↔ Seattle: ~25ms ║
║ • Concord ↔ Tucson: ~35ms ║
║ • Concord ↔ Honolulu: ~70ms ║
╚════════════════════════════════════════════════════════════════════════════════════════╝
```
---
## 📊 Device Distribution by Location
### 🏠 Concord, CA - Primary (Main Network)
| Device | Type | Connection | Notes |
|--------|------|------------|-------|
| Atlantis | Synology DS1823xs+ | 10GbE | Primary NAS; 51 services |
| Calypso | Synology DS723+ | 10GbE | Secondary NAS; Headscale, Authentik, Gitea, Immich |
| Guava | TrueNAS Scale (Ryzen 5 8600G) | 10GbE | Storage server; 12+ services |
| Shinku-Ryuu | Desktop workstation (i7-14700K) | 10GbE | Primary workstation |
| PVE | Proxmox host | 1GbE | Hypervisor for Homelab VM |
| Homelab VM | Proxmox VM (Ubuntu) | 1GbE | Monitoring hub; 30 services |
| matrix-ubuntu | Atlantis VM (Ubuntu 24.04), 4 vCPU, 16GB RAM, 1TB disk | 1GbE | NPM, Mastodon, Matrix, Mattermost, CrowdSec |
| GL-BE3600 | GL.iNet router | 1GbE | Exit node; subnet `192.168.8.0/24` |
| GL-MT3000 | GL.iNet router | 1GbE | HA subnet router; `192.168.12.0/24` |
| RPi 5 (Vish) | Raspberry Pi 5 16GB | 1GbE | Edge; Pi-5 node |
| Jellyfish | Raspberry Pi 5 4GB | Tailscale | NAS/media; PhotoPrism |
| Anubis | Mac Mini (Late 2014) | 1GbE | Legacy; offline/standby |
### 🏠 Concord, CA - Backup ISP (2Gbps/500Mbps)
| Device | Type | Connection | Purpose |
|--------|------|------------|---------|
| Concord NUC | Intel NUC6i3SYB | 1GbE | Home Assistant, AdGuard, exit node |
| RPi 5 (Kevin) | Raspberry Pi 5 8GB | 1GbE | Edge services |
| Home Assistant Green | HA Green | 1GbE | Smart home hub (via GL-MT3000 subnet) |
### 🌵 Tucson, AZ
| Device | Type | Connection | Purpose |
|--------|------|------------|---------|
| Setillo | Synology DS223j | 1GbE | Off-site backup, Plex, AdGuard |
### 🌺 Honolulu, HI
| Device | Type | Connection | Purpose |
|--------|------|------------|---------|
| bluecrownpassionflower | Partner's PC | Headscale | Remote homelab access |
| mah-pc | Partner's PC | Headscale | Remote homelab access |
### 🌲 Seattle, WA (Cloud)
| Device | Type | Connection | Purpose |
|--------|------|------------|---------|
| seattle (Contabo VPS) | Cloud VPS (16 vCPU, ~64GB RAM) | Internet | Fluxer, Ollama, BookStack, exit node |
### ✈️ Mobile
| Device | Type | Connection | Purpose |
|--------|------|------------|---------|
| MSI Prestige 13 AI Plus | Laptop | WiFi/Headscale | Remote administration, development |
---
## 🔗 Related Diagrams
- [Network Topology](network-topology.md) - Detailed network layout
- [Tailscale Mesh](tailscale-mesh.md) - VPN connectivity
- [Storage Topology](storage-topology.md) - Backup locations

View File

@@ -0,0 +1,265 @@
# 🌐 Network Topology
## Overview
This document shows the physical and logical network layout across all homelab locations, connected via Tailscale VPN mesh.
---
## 🗺️ Geographic Overview (Mermaid)
```mermaid
graph TB
subgraph Internet["☁️ Internet"]
ISP1["Concord Primary<br/>25Gbps Fiber"]
ISP2["Concord Backup<br/>2G↓/500M↑"]
ISP3["Tucson ISP"]
ISP4["Honolulu ISP"]
CONTABO["Contabo Cloud<br/>Seattle"]
end
subgraph Concord_Primary["🏠 Concord, CA - Primary (25Gbps)"]
TPLINK["TP-Link Archer BE800<br/>Tri-Band Router"]
SWITCH["TP-Link TL-SX1008<br/>10GbE Switch"]
subgraph NAS_Cluster["📦 NAS Cluster"]
ATLANTIS["Atlantis<br/>DS1823xs+<br/>8x16TB"]
CALYPSO["Calypso<br/>DS723+<br/>2x12TB"]
end
subgraph Compute["💻 Compute"]
GUAVA["Guava<br/>TrueNAS Scale<br/>Ryzen 5 8600G"]
DESKTOP["Shinku-Ryuu<br/>i7-14700K + RTX 4080<br/>96GB DDR5"]
PROXMOX["Proxmox Host"]
OLARES["Olares<br/>Core Ultra 9 275HX<br/>RTX 5090, 96GB"]
end
subgraph Edge_Primary["📡 Edge Devices"]
PI_VISH["RPi 5<br/>(Vish)"]
GL_MT["GL-MT3000<br/>router<br/>192.168.12.0/24"]
GL_BE["GL-BE3600<br/>router / exit node<br/>192.168.8.0/24"]
end
subgraph VMs["🖥️ Virtual Machines"]
HOMELAB_VM["Homelab VM"]
MATRIX_VM["matrix-ubuntu<br/>(on Atlantis)"]
end
end
subgraph Concord_Backup["🏠 Concord, CA - Backup ISP (2G/500M)"]
NUC["Concord NUC<br/>Intel NUC"]
PI_KEVIN["RPi 5<br/>(Kevin)"]
end
subgraph Tucson["🌵 Tucson, AZ"]
SETILLO["Setillo<br/>DS223j<br/>2x10TB WD Gold"]
end
subgraph Honolulu["🌺 Honolulu, HI"]
BCPF["bluecrownpassionflower<br/>Sibling's PC"]
end
subgraph Mobile["✈️ Mobile/Travel"]
MSI["MSI Laptop<br/>Portable Workstation"]
end
subgraph Seattle["🌲 Seattle, WA (Cloud)"]
CONTABO_VM["Contabo VM<br/>Cloud VPS"]
end
%% Internet connections
ISP1 --> TPLINK
ISP2 --> NUC
ISP3 --> SETILLO
ISP4 --> BCPF
CONTABO --> CONTABO_VM
%% Concord Primary internal
TPLINK --> SWITCH
SWITCH -->|10GbE| ATLANTIS
SWITCH -->|10GbE| CALYPSO
SWITCH -->|10GbE| GUAVA
SWITCH -->|10GbE| DESKTOP
TPLINK -->|2.5GbE| PROXMOX
TPLINK -->|2.5GbE| OLARES
TPLINK -->|1GbE| PI_VISH
TPLINK -->|1GbE| GL_MT
TPLINK -->|1GbE| GL_BE
PROXMOX --> HOMELAB_VM
ATLANTIS -->|VMM| MATRIX_VM
%% Tailscale/Headscale mesh (dashed)
ATLANTIS -.->|Headscale| SETILLO
ATLANTIS -.->|Headscale| NUC
ATLANTIS -.->|Headscale| BCPF
ATLANTIS -.->|Headscale| CONTABO_VM
ATLANTIS -.->|Headscale| MSI
classDef nas fill:#4a9eff,stroke:#333,stroke-width:2px,color:#fff
classDef compute fill:#9b59b6,stroke:#333,stroke-width:2px,color:#fff
classDef network fill:#2ecc71,stroke:#333,stroke-width:2px,color:#fff
classDef vm fill:#e74c3c,stroke:#333,stroke-width:2px,color:#fff
classDef cloud fill:#f39c12,stroke:#333,stroke-width:2px,color:#fff
classDef edge fill:#1abc9c,stroke:#333,stroke-width:2px,color:#fff
class ATLANTIS,CALYPSO,SETILLO nas
class GUAVA,DESKTOP,PROXMOX,OLARES compute
class TPLINK,SWITCH,GL_MT,GL_BE network
class HOMELAB_VM,MATRIX_VM vm
class CONTABO_VM cloud
class NUC,PI_KEVIN,PI_VISH edge
```
---
## 📝 ASCII Network Topology
```
╔══════════════════════════════════════════════════════════════════════════════════════════╗
║ HOMELAB NETWORK TOPOLOGY ║
║ 4 Locations • Tailscale Mesh • 25Gbps Primary ║
╚══════════════════════════════════════════════════════════════════════════════════════════╝
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ ☁️ INTERNET │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ [Concord 25G] [Concord 2G/500M] [Tucson] [Honolulu] [Seattle] │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ │
└─────────┼───────────────────┼──────────────────┼──────────────┼──────────────┼───────────┘
│ │ │ │ │
│ │ │ │ │
┌─────────▼───────────────────┼──────────────────┼──────────────┼──────────────┼───────────┐
│ 🏠 CONCORD, CA (PRIMARY) │ │ │ │ │
│ ════════════════════════ │ │ │ │ │
│ │ │ │ │ │
│ ┌──────────────────┐ │ │ │ │ │
│ │ TP-Link Archer BE800 │ │ │ │ │ │
│ │ (Tri-Band WiFi) │ │ │ │ │ │
│ └────────┬─────────┘ │ │ │ │ │
│ │ │ │ │ │ │
│ ▼ │ │ │ │ │
│ ┌──────────────────┐ │ │ │ │ │
│ │ TL-SX1008 10GbE │ │ │ │ │ │
│ │ 8-Port Switch │ │ │ │ │ │
│ └┬───┬───┬───┬─────┘ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ └─────────────┼──────────────────┼──────────────┼──────────────┼───────────┤
│ │ │ │ 10GbE │ │ │ │ │
│ ▼ ▼ ▼ ▼ │ │ │ │ │
│ ┌───┐┌───┐┌───┐┌───┐ │ │ │ │ │
│ │ATL││CAL││GUA││DSK│ │ │ │ │ │
│ │ ││ ││ ││ │ │ │ │ │ │
│ │8x ││2x ││ ││ │ │ │ │ │ │
│ │16T││12T││ ││ │ │ │ │ │ │
│ └───┘└───┘└───┘└───┘ │ │ │ │ │
│ │ │ │ │ │
│ ┌─────────────────┐ │ │ │ │ │
│ │ Proxmox Host │ │ │ │ │ │
│ │ ┌───────────┐ │ │ │ │ │ │
│ │ │ Homelab VM│ │ │ │ │ │ │
│ │ └───────────┘ │ │ │ │ │ │
│ └─────────────────┘ │ │ │ │ │
│ │ │ │ │ │
│ ┌─────────────────┐ │ │ │ │ │
│ │ GL-BE3600 │ │ │ │ │ │
│ │ (exit node) │ │ │ │ │ │
│ └─────────────────┘ │ │ │ │ │
│ ┌─────────────────┐ │ │ │ │ │
│ │ GL-MT3000 │ │ │ │ │ │
│ │ (HA subnet) │ │ │ │ │ │
│ └─────────────────┘ │ │ │ │ │
│ ┌─────────────────┐ │ │ │ │ │
│ │ Olares │ │ │ │ │ │
│ │ (K8s, LLM) │ │ │ │ │ │
│ └─────────────────┘ │ │ │ │ │
│ ┌─────────────────┐ │ │ │ │ │
│ │ RPi 5 (Vish) │ │ │ │ │ │
│ │ (monitoring) │ │ │ │ │ │
│ └─────────────────┘ │ │ │ │ │
│ │ │ │ │ │
└─────────────────────────────┼──────────────────┼──────────────┼──────────────┼───────────┘
│ │ │ │
┌─────────────────────────────▼──────────────────┼──────────────┼──────────────┼───────────┐
│ 🏠 CONCORD BACKUP ISP │ │ │ │
│ ════════════════════════ │ │ │ │
│ ┌─────────┐ ┌─────────┐ │ │ │ │
│ │ Concord │ │ RPi 5 │ │ │ │ │
│ │ NUC │ │ (Kevin) │ │ │ │ │
│ └─────────┘ └─────────┘ │ │ │ │
└────────────────────────────────────────────────┼──────────────┼──────────────┼───────────┘
│ │ │
┌────────────────────────────────────────────────▼──────────────┼──────────────┼───────────┐
│ 🌵 TUCSON, AZ │ │ │
│ ════════════════ │ │ │
│ ┌─────────────┐ │ │ │
│ │ Setillo │◄─ ─ ─ ─ ─ ─ ─ ─ ─Tailscale─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ │ │
│ │ Synology NAS│ │ │ │
│ └─────────────┘ │ │ │
└───────────────────────────────────────────────────────────────┼──────────────┼───────────┘
│ │
┌───────────────────────────────────────────────────────────────▼──────────────┼───────────┐
│ 🌺 HONOLULU, HI │ │
│ ════════════════ │ │
│ ┌──────────────────────┐ │ │
│ │ bluecrownpassionflower│◄─ ─ ─ ─Headscale─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ │
│ │ │ │ │
│ └──────────────────────┘ │ │
└──────────────────────────────────────────────────────────────────────────────┼───────────┘
┌──────────────────────────────────────────────────────────────────────────────▼───────────┐
│ 🌲 SEATTLE, WA (CLOUD) │
│ ══════════════════════ │
│ ┌─────────────┐ │
│ │ Contabo VM │◄─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─Tailscale─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
│ │ Cloud VPS │ │
│ └─────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────┘
╔════════════════════════════════════════════════════════════════════════════════════════╗
║ LEGEND ║
║ ══════ ║
║ ATL = Atlantis (DS1823xs+) CAL = Calypso (DS723+) GUA = Guava (TrueNAS) ║
║ DSK = Shinku-Ryuu Desktop HLB = Homelab VM ─── = Physical Connection ║
║ GL-BE = GL-BE3600 (exit node) GL-MT = GL-MT3000 (HA) ─ ─ = Headscale VPN ║
║ ║
║ 10GbE connections: Atlantis, Calypso, Guava, Desktop ║
║ All other connections: 1GbE or WiFi ║
╚════════════════════════════════════════════════════════════════════════════════════════╝
```
---
## 📊 Connection Summary
### Concord Primary (25Gbps Fiber)
| Device | Connection | Speed | Purpose |
|--------|------------|-------|---------|
| Atlantis | TL-SX1008 | 10GbE | Primary NAS, media, services |
| Calypso | TL-SX1008 | 10GbE | Secondary NAS, development |
| Guava | TL-SX1008 | 10GbE | Physical compute host |
| Desktop | TL-SX1008 | 10GbE | Workstation |
| Proxmox | TP-Link Router | 2.5GbE | VM host |
| Olares | TP-Link Router | 2.5GbE | K8s, LLM inference |
| RPi 5 (Vish) | TP-Link Router | 1GbE | Monitoring, uptime |
### Concord Backup (2Gbps/500Mbps)
| Device | Connection | Speed | Purpose |
|--------|------------|-------|---------|
| Concord NUC | Direct | 1GbE | Edge computing, failover |
| RPi 5 (Kevin) | Direct | 1GbE | Lightweight services |
### Remote Locations
| Location | Device | Connection | Purpose |
|----------|--------|------------|---------|
| Tucson | Setillo (DS223j) | Headscale | Remote NAS, offsite backup |
| Honolulu | bluecrownpassionflower | Headscale | Sibling's PC |
| Seattle | Contabo VPS (seattle) | Headscale | Cloud services, exit node |
---
## 🔗 Related Diagrams
- [Tailscale Mesh](tailscale-mesh.md) - VPN overlay network details
- [10GbE Backbone](10gbe-backbone.md) - High-speed internal network
- [Location Overview](location-overview.md) - Geographic distribution

View File

@@ -0,0 +1,856 @@
# 🏗️ Service Architecture
## Overview
This document shows how the 157+ Docker services (plus Olares K8s) interact, their dependencies, and the data flows between them.
---
## 🎬 Media Stack Architecture (Mermaid)
```mermaid
graph TB
subgraph Internet["☁️ Internet Sources"]
USENET["Usenet<br/>Providers"]
TORRENT["Torrent<br/>Trackers"]
INDEXERS["Indexers<br/>(NZB/Torrent)"]
end
subgraph Acquisition["📥 Content Acquisition (Atlantis)"]
PROWLARR["Prowlarr<br/>Indexer Manager"]
SONARR["Sonarr<br/>TV Shows"]
RADARR["Radarr<br/>Movies"]
LIDARR["Lidarr<br/>Music"]
READARR["Readarr<br/>Books"]
WHISPARR["Whisparr<br/>Adult"]
BAZARR["Bazarr<br/>Subtitles"]
SAB["SABnzbd<br/>Usenet Client"]
DELUGE["Deluge<br/>Torrent Client<br/>(via Gluetun VPN)"]
end
subgraph Storage["💾 Storage (Atlantis NAS)"]
MEDIA_TV["/volume1/media/tv"]
MEDIA_MOV["/volume1/media/movies"]
MEDIA_MUS["/volume1/media/music"]
MEDIA_BOOK["/volume1/media/books"]
end
subgraph Streaming["📺 Media Streaming"]
PLEX["Plex<br/>Media Server"]
JELLYFIN["Jellyfin<br/>Media Server"]
TAUTULLI["Tautulli<br/>Plex Analytics"]
end
subgraph Clients["📱 Client Devices"]
TV["Smart TVs"]
PHONE["Phones/Tablets"]
WEB["Web Browsers"]
APPS["Desktop Apps"]
end
%% Acquisition flow
INDEXERS --> PROWLARR
PROWLARR --> SONARR & RADARR & LIDARR & READARR & WHISPARR
SONARR --> SAB & DELUGE
RADARR --> SAB & DELUGE
LIDARR --> SAB & DELUGE
READARR --> SAB & DELUGE
WHISPARR --> SAB & DELUGE
USENET --> SAB
TORRENT --> DELUGE
%% Storage flow
SAB --> MEDIA_TV & MEDIA_MOV & MEDIA_MUS & MEDIA_BOOK
DELUGE --> MEDIA_TV & MEDIA_MOV & MEDIA_MUS & MEDIA_BOOK
BAZARR --> MEDIA_TV & MEDIA_MOV
%% Streaming flow
MEDIA_TV & MEDIA_MOV --> PLEX & JELLYFIN
PLEX --> TAUTULLI
%% Client access
PLEX & JELLYFIN --> TV & PHONE & WEB & APPS
classDef acquisition fill:#e74c3c,stroke:#333,stroke-width:2px,color:#fff
classDef storage fill:#3498db,stroke:#333,stroke-width:2px,color:#fff
classDef streaming fill:#2ecc71,stroke:#333,stroke-width:2px,color:#fff
classDef client fill:#9b59b6,stroke:#333,stroke-width:2px,color:#fff
class PROWLARR,SONARR,RADARR,LIDARR,READARR,WHISPARR,BAZARR,SAB,DELUGE acquisition
class MEDIA_TV,MEDIA_MOV,MEDIA_MUS,MEDIA_BOOK storage
class PLEX,JELLYFIN,TAUTULLI streaming
class TV,PHONE,WEB,APPS client
```
---
## 📊 Monitoring Stack Architecture
```mermaid
graph TB
subgraph Targets["🎯 Monitored Targets"]
subgraph Synology["Synology NAS"]
ATL_SNMP["Atlantis<br/>SNMP"]
CAL_SNMP["Calypso<br/>SNMP"]
SET_SNMP["Setillo<br/>SNMP"]
end
subgraph Hosts["Linux Hosts"]
NODE1["Homelab VM<br/>node_exporter"]
NODE2["Guava<br/>node_exporter"]
NODE3["Anubis<br/>node_exporter"]
end
subgraph Containers["Containers"]
CADV["cAdvisor<br/>Container Metrics"]
end
subgraph Network["Network"]
BLACK["Blackbox Exporter<br/>HTTP/ICMP Probes"]
end
end
subgraph Collection["📥 Metric Collection (Homelab VM)"]
PROM["Prometheus<br/>Time Series DB"]
SNMP_EXP["SNMP Exporter"]
end
subgraph Visualization["📈 Visualization"]
GRAFANA["Grafana<br/>Dashboards"]
end
subgraph Alerting["🚨 Alerting"]
ALERTMGR["Alertmanager"]
NTFY["ntfy<br/>Push Notifications"]
UPTIME["Uptime Kuma<br/>Status Page"]
end
%% Collection
ATL_SNMP & CAL_SNMP & SET_SNMP --> SNMP_EXP
SNMP_EXP --> PROM
NODE1 & NODE2 & NODE3 --> PROM
CADV --> PROM
BLACK --> PROM
%% Visualization
PROM --> GRAFANA
PROM --> ALERTMGR
ALERTMGR --> NTFY
%% Uptime Kuma separate
BLACK -.-> UPTIME
classDef target fill:#e67e22,stroke:#333,stroke-width:2px,color:#fff
classDef collection fill:#3498db,stroke:#333,stroke-width:2px,color:#fff
classDef viz fill:#2ecc71,stroke:#333,stroke-width:2px,color:#fff
classDef alert fill:#e74c3c,stroke:#333,stroke-width:2px,color:#fff
class ATL_SNMP,CAL_SNMP,SET_SNMP,NODE1,NODE2,NODE3,CADV,BLACK target
class PROM,SNMP_EXP collection
class GRAFANA viz
class ALERTMGR,NTFY,UPTIME alert
```
---
## 🔐 Authentication & Security Stack
### Complete Authentication Architecture
```mermaid
graph TB
subgraph External["🌐 External Access"]
USERS["👤 Users"]
CLOUDFLARE["☁️ Cloudflare<br/>DNS/WAF/DDoS"]
end
subgraph Gateway["🚪 Gateway Layer (matrix-ubuntu)"]
NPM["🔀 Nginx Proxy Manager<br/>matrix-ubuntu :81/:443<br/>Reverse Proxy + SSL"]
CFT["🚇 Cloudflare Tunnel<br/>Zero Trust Access"]
end
subgraph AuthLayer["🔐 Authentication Layer (Calypso)"]
AUTH_SRV["🔐 Authentik Server<br/>:9000"]
AUTH_PROXY["🛡️ Authentik Outpost<br/>:9444<br/>Forward Auth Proxy"]
AUTH_WRK["⚙️ Authentik Worker"]
AUTH_DB["🐘 PostgreSQL"]
AUTH_RED["🔴 Redis"]
end
subgraph VPN["🔒 VPN Layer"]
WIREGUARD["🔒 Wireguard<br/>Atlantis :51820"]
TAILSCALE["🔷 Tailscale<br/>100.x.x.x"]
HEADSCALE["🌐 Headscale<br/>Calypso :8080"]
end
subgraph DNS["🌐 DNS & Ad Blocking"]
ADGUARD1["🛡️ AdGuard<br/>Calypso :53"]
ADGUARD2["🛡️ AdGuard<br/>Atlantis :53"]
ADGUARD3["🛡️ AdGuard<br/>NUC :53"]
end
subgraph SecVault["🔑 Secrets Management"]
VAULT["🔑 Vaultwarden<br/>vault.vish.gg"]
end
subgraph ProtectedServices["🛡️ Protected Services"]
GRAFANA["📊 Grafana"]
PAPERLESS["📄 Paperless"]
IMMICH["📸 Immich"]
ACTUAL["💰 Actual Budget"]
GITEA["🔧 Gitea"]
NETBOX["🔌 NetBox"]
HOMARR["🏠 Homarr"]
RXRESUME["📝 Reactive Resume"]
HEADPLANE["🌐 Headplane"]
end
subgraph PublicServices["🌍 Public/Self-Auth Services"]
PLEX["📺 Plex"]
SEAFILE["☁️ Seafile"]
OST["🚀 OpenSpeedTest"]
NTFY["📣 ntfy"]
end
%% External flow
USERS --> CLOUDFLARE
CLOUDFLARE --> NPM
CLOUDFLARE --> CFT
USERS --> TAILSCALE
%% NPM to Auth
NPM -->|"Forward Auth<br/>Header Check"| AUTH_PROXY
AUTH_PROXY -->|"Validate Session"| AUTH_SRV
%% Auth internal
AUTH_SRV --> AUTH_DB
AUTH_SRV --> AUTH_RED
AUTH_WRK --> AUTH_DB
AUTH_WRK --> AUTH_RED
%% Protected services via NPM + Auth
NPM -->|"✓ Authenticated"| ProtectedServices
%% Public services direct
NPM --> PublicServices
%% VPN access
TAILSCALE --> HEADSCALE
WIREGUARD --> ProtectedServices
TAILSCALE --> ProtectedServices
%% DNS
ADGUARD1 -.-> ProtectedServices
ADGUARD2 -.-> PublicServices
classDef external fill:#e74c3c,stroke:#333,stroke-width:2px,color:#fff
classDef gateway fill:#f39c12,stroke:#333,stroke-width:2px,color:#fff
classDef auth fill:#9b59b6,stroke:#333,stroke-width:2px,color:#fff
classDef dns fill:#1abc9c,stroke:#333,stroke-width:2px,color:#fff
classDef protected fill:#3498db,stroke:#333,stroke-width:2px,color:#fff
classDef public fill:#27ae60,stroke:#333,stroke-width:2px,color:#fff
class USERS,CLOUDFLARE external
class NPM,CFT gateway
class AUTH_SRV,AUTH_PROXY,AUTH_WRK,AUTH_DB,AUTH_RED,VAULT auth
class ADGUARD1,ADGUARD2,ADGUARD3 dns
class GRAFANA,PAPERLESS,IMMICH,ACTUAL,GITEA,NETBOX,HOMARR,RXRESUME,HEADPLANE protected
class PLEX,SEAFILE,OST,NTFY public
```
---
### Authentik SSO Flow (Detailed)
```mermaid
sequenceDiagram
autonumber
participant U as 👤 User
participant CF as ☁️ Cloudflare
participant NPM as 🔀 NPM (matrix-ubuntu)
participant OUT as 🛡️ Outpost (Calypso)
participant AUTH as 🔐 Authentik (Calypso)
participant APP as 📱 Application
U->>CF: Request app.vish.gg
CF->>NPM: Forward (HTTPS)
NPM->>OUT: Forward Auth Request<br/>(/outpost.goauthentik.io/auth/nginx)
alt No Valid Session
OUT->>AUTH: Check Session
AUTH-->>OUT: No Session
OUT-->>NPM: 401 Unauthorized
NPM-->>U: Redirect to sso.vish.gg/flows/default-authentication/
U->>AUTH: Login Page
U->>AUTH: Submit Credentials + 2FA
AUTH->>AUTH: Validate
AUTH-->>U: Set Cookie + Redirect to app
U->>NPM: Retry with Session Cookie
NPM->>OUT: Forward Auth (with cookie)
end
OUT->>AUTH: Validate Session
AUTH-->>OUT: Valid ✓
OUT-->>NPM: 200 OK + Headers<br/>(X-authentik-username, X-authentik-email)
NPM->>APP: Proxy Request (with auth headers)
APP-->>U: Response
```
---
### NPM Proxy Host Configuration
```mermaid
graph TB
subgraph NPM["🔀 Nginx Proxy Manager (matrix-ubuntu :81)"]
subgraph ProxyHosts["Proxy Hosts"]
PH1["sso.vish.gg → Calypso:9000"]
PH2["git.vish.gg → Calypso:3052"]
PH3["gf.vish.gg → homelab-vm:3300"]
PH4["nb.vish.gg → homelab-vm:8443"]
PH5["ntfy.vish.gg → homelab-vm:8081"]
PH6["dash.vish.gg → Atlantis:7575"]
PH7["paperless.vish.gg → Calypso:8777"]
PH8["rx.vish.gg → Calypso:4550"]
PH9["actual.vish.gg → Calypso:8304"]
PH10["kuma.vish.gg → RPi5:3001"]
end
subgraph SSL["SSL Certificates"]
WILD["*.vish.gg<br/>Cloudflare DNS Challenge"]
end
subgraph AccessControl["Access Control"]
AUTH_LOC["Authentik Forward Auth<br/>Location: /outpost.goauthentik.io"]
end
end
subgraph Services["Backend Services"]
direction LR
S1["Authentik"]
S2["Gitea"]
S3["Grafana"]
S4["NetBox"]
S5["ntfy"]
S6["Homarr"]
S7["Paperless"]
S8["Reactive Resume"]
S9["Actual"]
S10["Uptime Kuma"]
end
PH1 --> S1
PH2 --> S2
PH3 --> S3
PH4 --> S4
PH5 --> S5
PH6 --> S6
PH7 --> S7
PH8 --> S8
PH9 --> S9
PH10 --> S10
```
---
### Services Protected by Authentik
| Domain | Service | Host | Auth Type | Notes |
|--------|---------|------|-----------|-------|
| `sso.vish.gg` | Authentik | Calypso | - | Identity Provider |
| `git.vish.gg` | Gitea | Calypso | OAuth2/OIDC | Source Control |
| `gf.vish.gg` | Grafana | Homelab VM | OAuth2/OIDC | Monitoring |
| `nb.vish.gg` | NetBox | Homelab VM | OAuth2/OIDC | DCIM/IPAM |
| `dash.vish.gg` | Homarr | Atlantis | OAuth2/OIDC | Dashboard |
| `rx.vish.gg` | Reactive Resume | Calypso | OAuth2/OIDC | Resume Builder |
| `immich` | Immich | Calypso | OAuth2/OIDC | Photos |
| `headscale.vish.gg/admin` | Headplane | Calypso | OAuth2/OIDC | VPN Admin |
| `paperless.vish.gg` | Paperless-NGX | Calypso | Forward Auth | Documents |
| `actual.vish.gg` | Actual Budget | Calypso | Forward Auth | Finance |
### Services NOT Protected (Public/Self-Auth)
| Domain | Service | Host | Reason |
|--------|---------|------|--------|
| `plex.vish.gg` | Plex | Atlantis | Has Plex Auth |
| `sf.vish.gg` | Seafile | Calypso | Has built-in auth + share links |
| `ntfy.vish.gg` | ntfy | Homelab | Has built-in auth + public topics |
| `ost.vish.gg` | OpenSpeedTest | Calypso | Public utility |
---
### Authentik Forward Auth Setup (NPM)
To protect a service with Authentik Forward Auth in NPM:
1. **Create Provider in Authentik**:
- Type: Proxy Provider
- External Host: `https://app.vish.gg`
- Mode: Forward auth (single application)
2. **Create Application in Authentik**:
- Link to the provider
- Set policies for access control
3. **Create Outpost in Authentik**:
- Type: Proxy
- Include the application
4. **Configure NPM Proxy Host**:
```nginx
# Custom Nginx Configuration (Advanced tab)
# Authentik Forward Auth
location /outpost.goauthentik.io {
proxy_pass http://calypso.vish.local:9444/outpost.goauthentik.io;
proxy_set_header Host $host;
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
add_header Set-Cookie $auth_cookie;
auth_request_set $auth_cookie $upstream_http_set_cookie;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
}
location / {
auth_request /outpost.goauthentik.io/auth/nginx;
error_page 401 = @goauthentik_proxy_signin;
auth_request_set $auth_cookie $upstream_http_set_cookie;
add_header Set-Cookie $auth_cookie;
# Forward auth headers to application
auth_request_set $authentik_username $upstream_http_x_authentik_username;
auth_request_set $authentik_email $upstream_http_x_authentik_email;
proxy_set_header X-authentik-username $authentik_username;
proxy_set_header X-authentik-email $authentik_email;
proxy_pass http://backend;
}
location @goauthentik_proxy_signin {
internal;
add_header Set-Cookie $auth_cookie;
return 302 /outpost.goauthentik.io/start?rd=$request_uri;
}
```
---
## 📝 ASCII Service Distribution by Host
```
╔══════════════════════════════════════════════════════════════════════════════════════════╗
║ SERVICE DISTRIBUTION BY HOST ║
╚══════════════════════════════════════════════════════════════════════════════════════════╝
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🏛️ ATLANTIS (51 Containers) - Media & Communication Hub │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ 📺 Media 🔐 Security 🛠️ Infrastructure │
│ ───────────── ───────────── ───────────────── │
│ • Plex • Vaultwarden • Portainer │
│ • Jellyfin • Wireguard • DokuWiki │
│ • Immich • Dozzle │
│ • Tautulli • Watchtower │
│ • Homarr (dash) • IT-Tools │
│ • AdGuard Home (backup DNS) │
│ │
│ 💬 Communication 📝 Productivity 🎮 Other │
│ ───────────── ───────────── ───────────── │
│ • Matrix Synapse • Documenso • Stirling PDF │
│ • Mastodon • Joplin Server • YouTube DL │
│ • Mattermost │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🏢 CALYPSO (54 Containers) - Auth, Proxy, Arr Suite & Development │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ 🔐 Auth 📥 Arr Suite 💻 Development 📦 Infrastructure │
│ ───────────── ───────────── ───────────── ───────────── │
│ • Authentik • Sonarr • Gitea • Headscale │
│ • Authentik Outpost • Radarr • Reactive Resume • AdGuard Home │
│ • Lidarr • Seafile • Portainer Agent │
│ • Readarr • Wireguard │
│ 💰 Finance • Prowlarr 📝 Productivity │
│ ───────────── • SABnzbd ───────────── │
│ • Actual Budget • Deluge (Gluetun) • Paperless-NGX │
│ • Bazarr • Rustdesk │
│ • Whisparr │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 💻 HOMELAB VM (30 Containers) - Monitoring, Tools & Privacy │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ 📊 Monitoring 🔔 Notifications 🔌 DCIM 🔧 Utilities │
│ ───────────── ───────────── ───────────── ───────────── │
│ • Grafana • ntfy • NetBox • Archivebox │
│ • Prometheus • Signal-API • Hoarder │
│ • Alertmanager 🔒 Privacy • Perplexica │
│ • SNMP Exporter 🤖 AI/Dev ───────────── • OpenHands │
│ • node_exporter ───────────── • Redlib │
│ • OpenHands • Binternet │
│ • Perplexica • ProxiTok │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🌐 CONCORD NUC (19 Containers) - Home Automation & Edge │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ 🏠 Home Automation 📺 Media 🎵 Music 🔧 Network │
│ ───────────── ───────────── ───────────── ───────────── │
│ • Home Assistant • Plex • Your-Spotify • AdGuard Home │
│ • Matter Server • Invidious • Wireguard │
│ • Whisper (STT) │
│ • Piper (TTS) │
│ • OpenWakeWord │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🍓 RPi 5 (3 Containers) - Monitoring │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ 📊 Monitoring │
│ ───────────── │
│ • Uptime Kuma │
│ • Glances │
│ • Portainer Agent │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🤖 OLARES - K8s Node (Core Ultra 9 275HX, RTX 5090, 96GB) │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ 🧠 AI/ML (Kubernetes, not Docker) │
│ ───────────────────────────────── │
│ • Ollama (LLM serving) │
│ • vLLM (high-throughput inference) │
│ • OpenClaw (robotics foundation model) │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🌵 SETILLO (4 Services) - Tucson Remote │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ 📊 Monitoring 🌐 DNS │
│ ───────────── ───────────── │
│ • Prometheus • AdGuard Home │
│ • SNMP Exporter • Syncthing │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
╔════════════════════════════════════════════════════════════════════════════════════════╗
║ SERVICE COUNT SUMMARY ║
║ ═════════════════════ ║
║ Atlantis: 59 containers │ Calypso: 61 containers ║
║ Homelab VM: 38 containers │ Concord NUC: 19 containers ║
║ RPi 5: 6 containers │ matrix-ubuntu: 12+ containers (NPM, Matrix) ║
║ Olares: K8s (~60 pods, not Portainer) ║
║ ──────────────────────────────────────────────────────────────────────────────────────║
║ TOTAL: ~195 containers across 5 Portainer endpoints + matrix-ubuntu + Olares ║
╚════════════════════════════════════════════════════════════════════════════════════════╝
```
---
## 🔗 Related Diagrams
- [Network Topology](network-topology.md) - How hosts connect
- [Storage Topology](storage-topology.md) - Where data lives
- [Tailscale Mesh](tailscale-mesh.md) - Cross-location access
---
## 💬 Communication Stack Architecture
```mermaid
graph TB
subgraph Internet["☁️ Internet / Federation"]
FEDI["Fediverse<br/>(ActivityPub)"]
MATRIX_FED["Matrix<br/>Federation"]
WEBRTC["WebRTC<br/>Voice/Video"]
end
subgraph Cloudflare["🛡️ Cloudflare"]
CF_PROXY["Cloudflare<br/>Proxy/WAF"]
CF_TUNNEL["Cloudflare<br/>Tunnel"]
end
subgraph MatrixUbuntuVM["🐧 Matrix-Ubuntu VM (Atlantis)"]
subgraph Mastodon["🐘 Mastodon Stack"]
MASTO_WEB["Mastodon Web<br/>:3000"]
MASTO_STREAM["Mastodon Streaming<br/>:4000"]
MASTO_SIDEKIQ["Sidekiq<br/>Background Jobs"]
end
subgraph Matrix["🔐 Matrix Stack"]
SYNAPSE["Synapse<br/>:8008 / :8018"]
ELEMENT["Element Web<br/>Client"]
COTURN["Coturn<br/>TURN Server<br/>:3478"]
end
subgraph Mattermost["💬 Mattermost"]
MM_APP["Mattermost<br/>:8065"]
end
subgraph SharedDB["🗄️ Shared Services"]
POSTGRES["PostgreSQL<br/>:5432"]
REDIS["Redis<br/>:6379"]
end
NPM_VM["NPM<br/>Reverse Proxy<br/>(host nginx disabled)"]
end
subgraph Atlantis["🏛️ Atlantis NAS"]
subgraph JitsiStack["📹 Jitsi Meet"]
JITSI_WEB["Jitsi Web"]
JITSI_JVB["Jitsi Video Bridge"]
JITSI_PROSODY["Prosody XMPP"]
end
subgraph Vaultwarden["🔑 Vaultwarden"]
VW["Vaultwarden<br/>Password Manager"]
end
subgraph Joplin["📝 Joplin"]
JOPLIN_SRV["Joplin Server"]
end
end
subgraph Clients["📱 Clients"]
BROWSER["Web Browsers"]
MOBILE["Mobile Apps"]
DESKTOP["Desktop Apps"]
end
%% External connections
FEDI <--> CF_PROXY
MATRIX_FED <--> CF_PROXY
WEBRTC <--> COTURN
%% Cloudflare to services
CF_PROXY --> NPM_VM
CF_TUNNEL --> NPM_VM
%% NPM routing (host nginx disabled, NPM handles all)
NPM_VM --> MASTO_WEB & MASTO_STREAM
NPM_VM --> SYNAPSE & ELEMENT
NPM_VM --> MM_APP
%% Database connections
MASTO_WEB & MASTO_SIDEKIQ --> POSTGRES & REDIS
SYNAPSE --> POSTGRES
MM_APP --> POSTGRES
%% Client access
BROWSER & MOBILE & DESKTOP --> CF_PROXY
BROWSER & MOBILE & DESKTOP --> JITSI_WEB
BROWSER & MOBILE & DESKTOP --> VW
BROWSER & MOBILE & DESKTOP --> JOPLIN_SRV
classDef mastodon fill:#6364FF,stroke:#333,stroke-width:2px,color:#fff
classDef matrix fill:#0DBD8B,stroke:#333,stroke-width:2px,color:#fff
classDef mattermost fill:#0058CC,stroke:#333,stroke-width:2px,color:#fff
classDef infra fill:#e67e22,stroke:#333,stroke-width:2px,color:#fff
class MASTO_WEB,MASTO_STREAM,MASTO_SIDEKIQ mastodon
class SYNAPSE,ELEMENT,COTURN matrix
class MM_APP mattermost
class POSTGRES,REDIS,NPM_VM infra
```
### Communication Services Summary
| Service | Domain | Protocol | Purpose |
|---------|--------|----------|---------|
| **Mastodon** | mastodon.vish.gg | ActivityPub | Fediverse microblogging |
| **Matrix (Primary)** | mx.vish.gg | Matrix | Federated chat |
| **Matrix (Legacy)** | matrix.thevish.io | Matrix | Legacy homeserver |
| **Mattermost** | mm.crista.love | Proprietary | Team collaboration |
| **Jitsi Meet** | meet.vish.gg | WebRTC | Video conferencing |
| **Joplin** | joplin.vish.gg | Joplin Sync | Note synchronization |
| **Vaultwarden** | vault.vish.gg | Bitwarden | Password management |
### Deployment Scripts
| Script | Location | Description |
|--------|----------|-------------|
| Mastodon Install | [mastodon-production/](../mastodon-production/) | Bare metal & Docker deployment |
| Matrix Install | [matrix-element/](../matrix-element/) | Synapse + Element + TURN |
| Mattermost Install | [mattermost-production/](../mattermost-production/) | Docker deployment |
| VM Config | [matrix-ubuntu-vm/](../matrix-ubuntu-vm/) | Complete VM configuration |
---
## 🔄 CI/CD Pipeline Architecture
### Git Repository Mirroring
The homelab repository uses Gitea Actions for automated CI/CD, including sanitized public mirroring.
```mermaid
graph LR
subgraph Development["💻 Development"]
DEV["Developer<br/>Pushes Code"]
end
subgraph Gitea["🔧 Gitea (Calypso)"]
PRIVATE["🔒 Private Repo<br/>homelab"]
PUBLIC["🌐 Public Repo<br/>homelab-optimized"]
RUNNER["🏃 Gitea Runners<br/>(homelab, calypso, pi5)"]
end
subgraph Workflow["⚙️ CI/CD Workflow"]
CHECKOUT["📥 Checkout Code"]
SANITIZE["🧹 Sanitize<br/>Remove Secrets"]
PUSH["📤 Force Push<br/>Fresh History"]
end
subgraph Deployment["🚀 Deployment"]
ANSIBLE["📋 Ansible<br/>Multi-host"]
PORTAINER["🐳 Portainer<br/>5 Endpoints"]
end
DEV -->|"git push"| PRIVATE
PRIVATE -->|"Triggers"| RUNNER
RUNNER --> CHECKOUT
CHECKOUT --> SANITIZE
SANITIZE --> PUSH
PUSH --> PUBLIC
PRIVATE --> ANSIBLE
ANSIBLE --> PORTAINER
```
### Sanitization Process
The sanitization script removes sensitive data before public mirroring:
| Removed | Pattern | Example |
|---------|---------|---------|
| Passwords | `password:`, `PASS=` | `password: "REDACTED_PASSWORD" |
| API Keys | `api_key:`, `API_KEY=` | `api_key: REDACTED_API_KEY` |
| Tokens | `token:`, `TOKEN=` | `token: REDACTED_TOKEN` |
| Secrets | `secret:`, `SECRET=` | `secret: REDACTED_SECRET` |
| Private Keys | `-----BEGIN.*KEY-----` | File removed |
| SSH Keys | `id_rsa`, `id_ed25519` | File removed |
| Personal Emails | `*@gmail.com`, `*@*.com` | `REDACTED_EMAIL@example.com` |
| JWT Secrets | `JWT_SECRET=` | `JWT_SECRET=REDACTED` |
### Gitea Runner Setup
```mermaid
graph TB
subgraph Calypso["🌊 Calypso (DS723+)"]
GITEA["🔧 Gitea Server<br/>:3052"]
RUNNER_CAL["🏃 Runner (calypso)"]
end
subgraph HomelabVM["💻 Homelab VM"]
RUNNER_HLB["🏃 Runner (homelab)"]
end
subgraph Pi5["🍓 RPi 5"]
RUNNER_PI["🏃 Runner (pi5)"]
end
GITEA -->|"Workflow Dispatch"| RUNNER_CAL
GITEA -->|"Workflow Dispatch"| RUNNER_HLB
GITEA -->|"Workflow Dispatch"| RUNNER_PI
```
**Runner Configuration:**
- Runner binary: `act_runner` v0.2.6, systemd service (not Docker container)
- Labels: `ubuntu-latest`, `linux`, `python` (all 3 runners)
- Runners: homelab (VM), calypso, pi5
- Trigger: Push to main branch
### Ansible Automation
```mermaid
graph TB
subgraph Control["📋 Ansible Control"]
SITE["site.yml<br/>Master Playbook"]
INV["inventory.yml<br/>13 Hosts"]
ROLES["Roles<br/>docker_stack, directory_setup"]
end
subgraph Hosts["🖥️ Target Hosts"]
SYN["Synology<br/>Atlantis, Calypso, Setillo"]
VMS["VMs<br/>Homelab, matrix-ubuntu"]
PHYS["Physical<br/>Guava, NUC, Shinku-Ryuu"]
EDGE["Edge<br/>RPi5, Jellyfish"]
CLOUD["Cloud<br/>Seattle VPS"]
end
SITE --> INV
INV --> SYN
INV --> VMS
INV --> PHYS
INV --> EDGE
INV --> CLOUD
```
**Ansible Commands:**
```bash
# Deploy everything
ansible-playbook site.yml
# Deploy to specific host
ansible-playbook site.yml --limit atlantis
# Deploy by category
ansible-playbook site.yml --tags synology
# Check status
ansible-playbook playbooks/common/status.yml
```
---
## 🧠 AI/ML Stack Architecture
```mermaid
graph TB
subgraph Olares["🤖 Olares K8s Node (Core Ultra 9 275HX, RTX 5090, 96GB)"]
OLLAMA["🦙 Ollama<br/>LLM Serving<br/>Local Models"]
VLLM["⚡ vLLM<br/>High-Throughput<br/>Inference Engine"]
OPENCLAW["🤖 OpenClaw<br/>Robotics Foundation<br/>Model"]
end
subgraph Clients["📱 AI Consumers"]
ANYTHINGLLM["💬 AnythingLLM<br/>RAG Chat"]
OPENWEBUI["🌐 Open WebUI"]
API_CLIENTS["🔧 API Clients"]
end
OLLAMA -->|"OpenAI-compatible API"| Clients
VLLM -->|"OpenAI-compatible API"| Clients
classDef ai fill:#8e44ad,stroke:#333,stroke-width:2px,color:#fff
classDef client fill:#2980b9,stroke:#333,stroke-width:2px,color:#fff
class OLLAMA,VLLM,OPENCLAW ai
class ANYTHINGLLM,OPENWEBUI,API_CLIENTS client
```
### AI/ML Services Summary
| Service | Host | Type | Purpose |
|---------|------|------|---------|
| **Ollama** | Olares (K8s) | LLM Server | Local model serving (Llama, Mistral, etc.) |
| **vLLM** | Olares (K8s) | Inference Engine | High-throughput batched inference |
| **OpenClaw** | Olares (K8s) | Foundation Model | Robotics/manipulation research |
| **AnythingLLM** | Homelab VM | RAG Client | Document Q&A with local LLMs |
---
## 🔗 Related Diagrams
- [Network Topology](network-topology.md) - How hosts connect
- [Storage Topology](storage-topology.md) - Where data lives
- [Tailscale Mesh](tailscale-mesh.md) - Cross-location access

View File

@@ -0,0 +1,462 @@
# 💾 Storage Topology
## Overview
This document details the storage architecture across the NAS cluster, including capacity, RAID configurations, and backup flows.
---
## 📊 Storage Overview (Mermaid)
```mermaid
graph TB
subgraph Concord["🏠 Concord, CA - Primary Storage"]
subgraph Atlantis["🏛️ Atlantis (DS1823xs+)"]
ATL_VOL1["Volume 1 (Encrypted)<br/>128TB Raw / 84TB Usable<br/>8x 16TB IronWolf Pro<br/>RAID 6 - 31TB Used (37%)"]
ATL_VOL2["Volume 2 (NVMe RAID 1)<br/>885GB - 176GB Used<br/>2x NVMe via PCIe E10M20-T1"]
ATL_CACHE["R/W Cache<br/>2x WD Black SN750 SE 500GB<br/>(built-in M.2 slots)"]
ATL_DOCKER["/volume1/docker<br/>Container Data"]
ATL_MEDIA["/volume1/media<br/>Movies, TV, Music"]
ATL_PHOTOS["/volume2/photo<br/>Synology Photos"]
ATL_DOCS["/volume1/documents<br/>Paperless-NGX"]
ATL_BACKUP["/volume1/backups<br/>System Backups"]
end
subgraph Calypso["🏢 Calypso (DS723+)"]
CAL_VOL1["Volume 1 (Encrypted)<br/>24TB Raw / 11TB Usable<br/>2x 12TB IronWolf Pro<br/>RAID 1 - 4.5TB Used (43%)"]
CAL_CACHE["NVMe Cache<br/>2x 500GB Crucial P3 Plus<br/>RAID 1"]
CAL_DOCKER["/volume1/docker<br/>Container Data"]
CAL_DATA["/volume1/data<br/>Dev Files"]
CAL_BACKUP["/volume1/backups<br/>Atlantis Backups"]
end
subgraph Guava["💻 Guava (TrueNAS Scale)"]
GUA_BOOT["boot-pool<br/>464GB NVMe (WD Black SN770)<br/>433GB Avail"]
GUA_DATA["data (ZFS Mirror)<br/>2x 4TB WD Blue SA510 SATA<br/>3.62TB total, 1.53TB Avail<br/>1.69x Dedup, 57% used"]
GUA_JELLY["/mnt/data/jellyfin<br/>204GB Media"]
GUA_PHOTOS["/mnt/data/photos<br/>159GB Photos"]
GUA_LLAMA["/mnt/data/llama<br/>64GB LLM Models"]
GUA_TURQUOISE["/mnt/data/guava_turquoise<br/>3.0TB Personal Data"]
GUA_NFS["/mnt/atlantis_media<br/>NFS from Atlantis (84TB)"]
end
end
subgraph Tucson["🌵 Tucson, AZ - Remote Storage"]
subgraph Setillo["🏛️ Setillo (DS223j)"]
SET_VOL1["Volume 1<br/>20TB Raw / 8.9TB Usable<br/>2x 10TB WD Gold<br/>RAID 1 - 4.0TB Used (46%)"]
SET_DOCKER["/volume1/docker<br/>Container Data"]
SET_SYNC["/volume1/syncthing<br/>Syncthing Replication"]
SET_BACKUP["/volume1/backups<br/>Remote Backup Destination"]
SET_PLEX["/volume1/PlexMediaServer<br/>Plex Media"]
SET_SURV["/volume1/surveillance<br/>Surveillance Station"]
SET_NET["/volume1/NetBackup<br/>Network Backup Storage"]
end
end
subgraph Cloud["☁️ Backblaze B2 (Cloud Backup)"]
B2_ATL["vk-atlantis Bucket<br/>Weekly (Sun 00:00)<br/>Encrypted + Versioned"]
B2_CAL["vk-concord-1 Bucket<br/>Daily (00:00)<br/>Encrypted + Versioned"]
end
%% Backup flows
ATL_MEDIA -->|"Hyper Backup<br/>(Weekly)"| CAL_BACKUP
ATL_PHOTOS -->|"Hyper Backup<br/>(Daily)"| CAL_BACKUP
ATL_DOCS -->|"Hyper Backup<br/>(Daily)"| CAL_BACKUP
ATL_DOCKER -->|"Syncthing<br/>(Real-time)"| SET_SYNC
CAL_DOCKER -->|"Syncthing<br/>(Real-time)"| SET_SYNC
%% Cloud backup flows
ATL_MEDIA -->|"HyperBackup<br/>S3 (Weekly)"| B2_ATL
ATL_PHOTOS -->|"HyperBackup<br/>S3 (Weekly)"| B2_ATL
CAL_DOCKER -->|"HyperBackup<br/>S3 (Daily)"| B2_CAL
%% Cache acceleration
ATL_CACHE -.->|"Accelerates"| ATL_VOL1
CAL_CACHE -.->|"Accelerates"| CAL_VOL1
classDef primary fill:#3498db,stroke:#333,stroke-width:2px,color:#fff
classDef secondary fill:#2ecc71,stroke:#333,stroke-width:2px,color:#fff
classDef remote fill:#9b59b6,stroke:#333,stroke-width:2px,color:#fff
classDef cache fill:#f39c12,stroke:#333,stroke-width:2px,color:#fff
classDef folder fill:#ecf0f1,stroke:#333,stroke-width:1px,color:#333
class ATL_VOL1 primary
class CAL_VOL1 secondary
class SET_VOL1 remote
class ATL_CACHE,CAL_CACHE cache
class ATL_DOCKER,ATL_MEDIA,ATL_PHOTOS,ATL_DOCS,ATL_BACKUP,CAL_DOCKER,CAL_APT,CAL_BACKUP,SET_SYNC folder
```
---
## 📝 ASCII Storage Layout
```
╔══════════════════════════════════════════════════════════════════════════════════════════╗
║ STORAGE TOPOLOGY ║
║ 3 NAS Units • 152TB Raw • Cross-Location Backup ║
╚══════════════════════════════════════════════════════════════════════════════════════════╝
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🏛️ ATLANTIS - Primary Storage (Concord, CA) │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ Model: Synology DS1823xs+ (8-Bay Enterprise) │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ STORAGE POOL 1 │ │
│ │ ═══════════════ │ │
│ │ │ │
│ │ Drive Configuration: │ │
│ │ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ │ │
│ │ │ Bay1 │ Bay2 │ Bay3 │ Bay4 │ Bay5 │ Bay6 │ Bay7 │ Bay8 │ │ │
│ │ │ 16TB │ 16TB │ 16TB │ 16TB │ 16TB │ 16TB │ 16TB │ 16TB │ │ │
│ │ │IronWf│IronWf│IronWf│IronWf│IronWf│IronWf│IronWf│IronWf│ │ │
│ │ │ Pro │ Pro │ Pro │ Pro │ Pro │ Pro │ Pro │ Pro │ │ │
│ │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ │ │
│ │ │ │
│ │ Raw Capacity: 128 TB │ │
│ │ RAID Type: RAID 6 (2-drive fault tolerance) │ │
│ │ Usable: ~96 TB │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ NVMe DRIVES (4x NVMe total) │ │
│ │ ═══════════════════════════ │ │
│ │ │ │
│ │ Built-in M.2 Slots (R/W Cache for Volume 1): │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ M.2 Slot 1 │ │ M.2 Slot 2 │ │ │
│ │ │ WD Black SN750 │ │ WD Black SN750 │ │ │
│ │ │ SE 500GB NVMe │ │ SE 500GB NVMe │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ │ Cache Type: Read-Write Cache Hit: ~99% │ │
│ │ │ │
│ │ PCIe E10M20-T1 Expansion (Volume 2 — RAID 1): │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ PCIe NVMe 1 │ │ PCIe NVMe 2 │ │ │
│ │ │ 885GB RAID 1 │ │ (mirror) │ │ │
│ │ │ Photos/metadata │ │ │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ │ Volume 2: 885GB total, 176GB used (20%) │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ FOLDER STRUCTURE │ │
│ │ ════════════════ │ │
│ │ │ │
│ │ /volume1/ │ │
│ │ ├── docker/ (~2 TB) Container persistent data │ │
│ │ │ ├── plex/ Plex metadata & transcodes │ │
│ │ │ ├── immich/ Photo library database │ │
│ │ │ ├── paperless/ Document database │ │
│ │ │ ├── grafana/ Dashboards & config │ │
│ │ │ ├── prometheus/ Metrics database │ │
│ │ │ └── ... (50+ services) │ │
│ │ │ │ │
│ │ ├── media/ (~60 TB) Media library │ │
│ │ │ ├── movies/ 4K & HD movies │ │
│ │ │ ├── tv/ TV series │ │
│ │ │ ├── music/ Music library │ │
│ │ │ └── books/ eBooks & audiobooks │ │
│ │ │ │ │
│ │ ├── photos/ (~5 TB) Immich photo library │ │
│ │ │ ├── library/ Original photos │ │
│ │ │ ├── thumbs/ Thumbnails │ │
│ │ │ └── encoded/ Transcoded videos │ │
│ │ │ │ │
│ │ ├── documents/ (~500 GB) Paperless-NGX documents │ │
│ │ │ ├── consume/ Incoming documents │ │
│ │ │ ├── archive/ Processed documents │ │
│ │ │ └── export/ Exported documents │ │
│ │ │ │ │
│ │ ├── backups/ (~10 TB) Local backup storage │ │
│ │ │ ├── hyper-backup/ Synology backups │ │
│ │ │ ├── time-machine/ Mac backups │ │
│ │ │ └── manual/ Manual backups │ │
│ │ │ │ │
│ │ └── archive/ (~15 TB) Long-term cold storage │ │
│ │ ├── old-projects/ │ │
│ │ └── raw-footage/ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🏢 CALYPSO - Secondary Storage (Concord, CA) │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ Model: Synology DS723+ (2-Bay Plus) │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ STORAGE POOL 1 │ │
│ │ ═══════════════ │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ Bay 1 │ │ Bay 2 │ │ │
│ │ │ Seagate 12TB │ │ Seagate 12TB │ │ │
│ │ │ IronWolf Pro │ │ IronWolf Pro │ │ │
│ │ │ ST12000VN0008 │ │ ST12000VN0008 │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ │ │ │
│ │ Raw Capacity: 24 TB │ │
│ │ RAID Type: SHR-1 (1-drive fault tolerance) │ │
│ │ Usable: ~10.9 TB │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ NVMe CACHE │ │
│ │ ═══════════ │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ Crucial P3 Plus │ │ Crucial P3 Plus │ │ │
│ │ │ 500GB NVMe │ │ 500GB NVMe │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ │ Cache: 465GB allocated (RAID 1) Hit Rate: 99% │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ FOLDER STRUCTURE │ │
│ │ ════════════════ │ │
│ │ /volume1/ │ │
│ │ ├── docker/ (~500 GB) Container data (17 services) │ │
│ │ ├── apt-cache/ (~50 GB) Debian package cache │ │
│ │ ├── backups/ (~8 TB) Atlantis backup destination │ │
│ │ │ ├── hyper-backup/ Encrypted backups from Atlantis │ │
│ │ │ └── active-backup/ PC/Server backups │ │
│ │ └── dev/ (~200 GB) Development files │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🌵 SETILLO - Remote Storage (Tucson, AZ) │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ Model: Synology DS223j (2-Bay Value) │
│ CPU: ARM Cortex-A55 Quad-Core (Realtek RTD1619B) │
│ RAM: 1GB DDR4 │
│ DSM: 7.3.2-86009 Update 1 │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ STORAGE POOL 1 │ │
│ │ ═══════════════ │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ Bay 1 │ │ Bay 2 │ │ │
│ │ │ WD Gold 10TB │ │ WD Gold 10TB │ │ │
│ │ │ WD102KRYZ │ │ WD102KRYZ │ │ │
│ │ │ Temp: 38-40°C │ │ Temp: 42-45°C │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ │ │ │
│ │ Raw Capacity: 20 TB │ │
│ │ RAID Type: SHR-1 (1-drive fault tolerance) │ │
│ │ Usable: ~8.9 TB │ │
│ │ Used: ~4.0 TB (46%) │ │
│ │ Available: ~4.8 TB │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ FOLDER STRUCTURE │ │
│ │ ════════════════ │ │
│ │ /volume1/ │ │
│ │ ├── docker/ Container data │ │
│ │ ├── syncthing/ Syncthing real-time replication │ │
│ │ ├── backups/ Remote backup destination │ │
│ │ ├── PlexMediaServer/ Plex media data │ │
│ │ ├── NetBackup/ Network backup storage │ │
│ │ ├── surveillance/ Surveillance Station recordings │ │
│ │ └── homes/ User home directories │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ Installed Packages: REDACTED_APP_PASSWORD, Syncthing, Tailscale, PlexMediaServer, │
│ HyperBackup, SurveillanceStation, Git, WebDAVServer │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 💻 GUAVA - TrueNAS Scale (Concord, CA) │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ Hardware: ASRock B850I Lightning WiFi, Ryzen 5 8600G, 32GB DDR5 │
│ Network: Mellanox ConnectX-5 10GbE, NFS mount from Atlantis │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ BOOT POOL (ZFS) │ │
│ │ ═══════════════ │ │
│ │ ┌──────────────────┐ │ │
│ │ │ WD Black SN770 │ │ │
│ │ │ 500GB NVMe │ │ │
│ │ │ Used: 17GB (4%) │ │ │
│ │ └──────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ DATA POOL (ZFS Mirror) │ │
│ │ ══════════════════════ │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ WD Blue SA510 │ │ WD Blue SA510 │ │ │
│ │ │ 4TB SATA SSD │ │ 4TB SATA SSD │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ │ │ │
│ │ Raw Capacity: 7.2 TB │ │
│ │ Pool Type: ZFS Mirror (1-drive fault tolerance) │ │
│ │ Usable: ~3.6 TB │ │
│ │ Used: ~2.1 TB (57%) Dedup Ratio: 1.69x │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ FOLDER STRUCTURE │ │
│ │ ════════════════ │ │
│ │ /mnt/data/ │ │
│ │ ├── guava_turquoise/ (~3.0 TB) Personal data archive │ │
│ │ ├── jellyfin/ (~204 GB) Jellyfin media + config │ │
│ │ ├── photos/ (~159 GB) Photo library │ │
│ │ ├── llama/ (~64 GB) LLM models │ │
│ │ ├── cocalc/ (~324 MB) CoCalc data │ │
│ │ ├── website/ (~59 MB) Personal website │ │
│ │ ├── ix-apps/docker/ (~42 GB) TrueNAS Docker storage │ │
│ │ └── tdarr-node/ Tdarr transcoding node │ │
│ │ │ │
│ │ /mnt/atlantis_media/ (NFS) Atlantis media mount (84TB pool, read-only) │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ Backup: None (no cloud or offsite backup configured) │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ 🐠 JELLYFISH - Raspberry Pi 5 Photo Server (Concord, CA) │
│ ═══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ Hardware: Raspberry Pi 5, 4GB LPDDR4X, ARM Cortex-A76 │
│ OS: Debian 13 (trixie) │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ BOOT DISK │ │
│ │ ═════════ │ │
│ │ ┌──────────────────┐ │ │
│ │ │ 32GB microSD │ │ │
│ │ │ Used: 8.8GB │ │ │
│ │ │ Avail: 19GB │ │ │
│ │ └──────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ NAS STORAGE (LUKS2 Encrypted NVMe) │ │
│ │ ══════════════════════════════════ │ │
│ │ ┌──────────────────┐ │ │
│ │ │ 4TB ASMedia │ │ │
│ │ │ NVMe Enclosure │ │ │
│ │ │ LUKS2 Encrypted │ │ │
│ │ │ (aes-xts-plain64│ │ │
│ │ │ 512-bit) │ │ │
│ │ └──────────────────┘ │ │
│ │ │ │
│ │ Mount: /srv/nas │ │
│ │ Total: 3.6 TB │ │
│ │ Used: 1.8 TB (53%) │ │
│ │ Available: 1.7 TB │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVICES │ │
│ │ ════════ │ │
│ │ PhotoPrism (arm64) — Photo management │ │
│ │ Samba — SMB share [turquoise] → /srv/nas │ │
│ │ │ │
│ │ Backup: None (no cloud or offsite backup configured) │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
╔════════════════════════════════════════════════════════════════════════════════════════╗
║ BACKUP STRATEGY ║
║ ═══════════════ ║
║ ║
║ ┌─────────────────┐ Weekly ┌─────────────────┐ ║
║ │ ATLANTIS │ ───────────────► │ CALYPSO │ (Hyper Backup, encrypted) ║
║ │ (Primary Data) │ │ (Local Backup) │ ║
║ └─────────────────┘ └─────────────────┘ ║
║ │ │ ║
║ │ Real-time (Syncthing) │ ║
║ ▼ ▼ ║
║ ┌─────────────────────────────────────────────────────────────────────────┐ ║
║ │ SETILLO (Tucson - Off-site) │ ║
║ │ Geographic redundancy, 1000+ miles away │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ 3-2-1 Backup Rule: ║
║ • 3 copies of data (Atlantis + Calypso + Setillo) ║
║ • 2 different storage types (NAS + NAS w/different RAID) ║
║ • 1 off-site location (Tucson) ║
║ • PLUS cloud backup to Backblaze B2 ║
╚════════════════════════════════════════════════════════════════════════════════════════╝
╔════════════════════════════════════════════════════════════════════════════════════════╗
║ CLOUD BACKUP — BACKBLAZE B2 ║
║ ═══════════════════════════ ║
║ ║
║ Atlantis → Backblaze B2 (Weekly, Sundays 00:00) ║
║ Bucket: vk-atlantis ║
║ Endpoint: s3.us-west-004.backblazeb2.com ║
║ Folders: /archive, /documents, /downloads, /photo, /homes/vish/Photos ║
║ Apps: SynologyPhotos, SynologyDrive, FileStation, HyperBackup ║
║ Encrypted: Yes Versioned: Yes (Smart Recycle) ║
║ Task: "Backblaze b2" (ID 20, enabled) ║
║ ║
║ Calypso → Backblaze B2 (Daily, 00:00) ║
║ Bucket: vk-concord-1 ║
║ Endpoint: s3.us-west-004.backblazeb2.com ║
║ Folders: /docker/authentik, /docker/gitea, /docker/headscale, ║
║ /docker/immich, /docker/paperlessngx, /docker/seafile, ║
║ /data/media/misc, /data/media/music, /data/media/photos ║
║ Apps: Gitea, MariaDB10, CloudSync, Authentik, Immich, Paperless ║
║ Encrypted: Yes Versioned: Yes (Smart Recycle) ║
║ Task: "Backblaze S3" (ID 3, enabled) ║
║ ║
║ Note: Also an old disabled task "Backblaze S3 Atlantis" (ID 12) — weekly Sun 03:00 ║
╚════════════════════════════════════════════════════════════════════════════════════════╝
```
---
## 📊 Storage Capacity Summary (Verified Feb 2025)
| System | Raw Capacity | Usable | Used | RAID | Drives | Location |
|--------|--------------|--------|------|------|--------|----------|
| Atlantis Vol1 | 128 TB | ~84 TB | 39TB (46%) | RAID 6 | 8x 16TB IronWolf Pro | Concord |
| Atlantis Vol2 | 0.9 TB | 0.9 TB | 176GB (20%) | RAID 1 | 2x NVMe (PCIe) | Concord |
| Atlantis Cache | 1 TB | N/A | N/A | R/W Cache | 2x 500GB WD Black SN750 SE (M.2) | Concord |
| Calypso Vol1 | 24 TB | ~11 TB | 4.5TB (43%) | SHR-1 | 2x 12TB IronWolf Pro | Concord |
| Calypso Cache | 1 TB | N/A | N/A | RAID 1 | 2x 500GB Crucial P3 Plus (M.2) | Concord |
| Guava boot-pool | 0.5 TB | 433 GB | 17GB (4%) | Single | 1x 500GB WD Black SN770 NVMe | Concord |
| Guava data | 7.2 TB | 3.6 TB | 2.1TB (57%) | ZFS Mirror | 2x 4TB WD Blue SA510 SATA | Concord |
| Setillo | 20 TB | ~8.9 TB | 4.0TB (46%) | RAID 1 | 2x 10TB WD Gold | Tucson |
| **Total** | **~183 TB** | **~113 TB** | **~50TB** | - | **19 drives** | - |
### Cloud Backup
| Source | Destination | Bucket | Schedule | Encrypted |
|--------|------------|--------|----------|-----------|
| Atlantis | Backblaze B2 | vk-atlantis | Weekly (Sun 00:00) | Yes |
| Calypso | Backblaze B2 | vk-concord-1 | Daily (00:00) | Yes |
| Guava | None | — | — | — |
| Setillo | None (receives backups) | — | — | — |
---
## 🔗 Related Diagrams
- [10GbE Backbone](10gbe-backbone.md) - High-speed network for storage
- [Service Architecture](service-architecture.md) - What uses this storage
- [Network Topology](network-topology.md) - How storage is accessed

View File

@@ -0,0 +1,306 @@
# 🔗 Tailscale Mesh Network
## Overview
All homelab locations are connected via Tailscale, creating a secure mesh VPN that allows seamless access between sites regardless of NAT or firewall configurations.
**Total Devices: 24 Headscale nodes** across 4 physical locations + cloud + mobile devices.
**Control Server:** Headscale (self-hosted) on Calypso — `headscale.vish.gg`
**MagicDNS:** `*.tail.vish.gg` (resolved by AdGuard, not native MagicDNS)
**DERP Relays:** Home (Calypso), Atlantis, Seattle VPS
---
## 📊 Complete Device Inventory
### 🟢 Online Nodes (verified 2026-03-21 from Headscale)
#### Exit Nodes
| Device | Tailscale IP | Type | Location | Notes |
|--------|--------------|------|----------|-------|
| **atlantis** | 100.83.230.112 | Synology NAS | Concord | Exit node, Primary NAS |
| **calypso** | 100.103.48.78 | Synology NAS | Concord | Exit node, Headscale host |
| **setillo** | 100.125.0.20 | Synology NAS | Tucson | Exit node, off-site backup |
| **seattle** | 100.82.197.124 | Cloud VPS | Seattle | Exit node, Contabo |
| **vish-concord-nuc** | 100.72.55.21 | Intel NUC | Concord (Backup ISP) | Exit node |
| **homeassistant** | 100.112.186.90 | HA Green | Concord | Exit node (via GL-MT3000) |
| **gl-be3600** | 100.105.59.123 | GL.iNet Router | Concord | Exit node, subnet 192.168.8.0/24 |
#### Servers & VMs
| Device | Tailscale IP | Type | Location | Notes |
|--------|--------------|------|----------|-------|
| **homelab** | 100.67.40.126 | Proxmox VM | Concord | Primary VM — monitoring, tools, NetBox, Semaphore |
| **matrix-ubuntu** | 100.85.21.51 | Atlantis VM | Concord | NPM, Mastodon, Matrix, Mattermost |
| **pve** | 100.87.12.28 | Proxmox Host | Concord | VM hypervisor |
| **truenas-scale** | 100.75.252.64 | TrueNAS Scale | Concord | Guava, 10GbE, ZFS |
| **jellyfish** | 100.69.121.120 | RPi 5 | Concord | PhotoPrism, 4TB LUKS NVMe |
| **shinku-ryuu** | 100.98.93.15 | Windows | Concord | Desktop workstation, 10GbE |
| **moon** | 100.64.0.6 | Linux | Honolulu | Sibling's PC (aka bluecrownpassionflower) |
| **pi-5** | 100.77.151.40 | RPi 5 | Concord | Uptime Kuma, monitoring |
#### Network Devices
| Device | Tailscale IP | Type | Location | Notes |
|--------|--------------|------|----------|-------|
| **gl-mt3000** | 100.126.243.15 | GL.iNet Router | Concord | HA subnet 192.168.12.0/24 |
| **headscale-test** | 100.64.0.1 | Linux | Concord | Headscale test node |
#### Mobile
| Device | Tailscale IP | Type | Status |
|--------|--------------|------|--------|
| **iphone16-pro-max** | 100.79.252.108 | iOS | Online |
### 💤 Offline Nodes
| Device | Tailscale IP | Type | Notes |
|--------|--------------|------|-------|
| **gl-be3600** | 100.105.59.123 | GL.iNet Router | Frequently offline |
| **ipad-pro** | 100.68.71.48 | iOS | iPad Pro |
| **mah-pc** | 100.64.0.4 | Windows | Concord (Backup ISP), sibling's PC |
| **mastodon-rocky** | 100.64.0.3 | Linux | Legacy, decommissioned |
| **olares** | 100.64.0.5 | Linux | Olares K8s node (host Tailscale conflicts with K8s pod) |
| **uqiyoe** | 100.124.91.52 | Windows | Laptop |
| **vishdebian** | 100.64.0.2 | Linux | Legacy Debian VM |
---
## 🕸️ Mesh Topology (Mermaid)
```mermaid
graph TB
subgraph Tailscale["🔐 Headscale Mesh Network (24 Nodes)"]
subgraph Concord_Primary["🏠 Concord Primary - 25Gbps Fiber"]
subgraph NAS_Cluster["📦 NAS + VMs"]
A_ATL["🗄️ atlantis<br/>100.83.230.112<br/>⚡ EXIT NODE"]
A_MATRIX["🐧 matrix-ubuntu<br/>100.85.21.51<br/>VM on Atlantis"]
end
A_CAL["🗄️ calypso<br/>100.103.48.78<br/>⚡ EXIT NODE<br/>Headscale host"]
A_GUAVA["💻 guava<br/>100.75.252.64<br/>TrueNAS Scale"]
A_DESKTOP["🖥️ shinku-ryuu<br/>100.98.93.15"]
A_PVE["🖥️ pve<br/>100.87.12.28"]
A_JELLY["🐟 jellyfish<br/>100.69.121.120"]
A_HA["🏠 homeassistant<br/>100.112.186.90<br/>⚡ EXIT NODE<br/>(via GL-MT3000)"]
A_PI["🥧 pi-5<br/>100.77.151.40"]
A_GL_MT["📡 gl-mt3000<br/>100.126.243.15<br/>subnet 192.168.12.0/24"]
A_GL_BE["📡 gl-be3600<br/>100.105.59.123<br/>⚡ EXIT NODE<br/>subnet 192.168.8.0/24"]
subgraph Proxmox_VMs["Proxmox VMs"]
A_HLB["homelab<br/>100.67.40.126"]
end
end
subgraph Concord_Backup["🏠 Concord Backup - 2Gbps"]
B_NUC["🖥️ vish-concord-nuc<br/>100.72.55.21<br/>⚡ EXIT NODE"]
B_PI_K["🥧 pi-5-kevin<br/>100.123.246.75"]
B_MAH["💻 mah-pc<br/>100.64.0.4"]
end
subgraph Tucson["🌵 Tucson, AZ"]
T_SET["🗄️ setillo<br/>100.125.0.20<br/>⚡ EXIT NODE"]
end
subgraph Honolulu["🌺 Honolulu, HI"]
H_MOON["💻 moon<br/>100.64.0.6<br/>(aka bluecrownpassionflower)"]
end
subgraph Seattle["🌲 Seattle (Cloud)"]
S_SEA["☁️ seattle<br/>100.82.197.124<br/>⚡ EXIT NODE"]
end
subgraph Mobile["📱 Mobile Devices"]
M_IPHONE["📱 iphone16"]
M_PIXEL["📱 pixel-10-pro"]
M_IPAD["📱 ipad-pro"]
M_TAB["📱 samsung-tablet"]
M_KLAP["💻 kevinlaptop"]
end
end
%% VM relationships
A_ATL -->|"Hosts VM"| A_MATRIX
A_PVE -->|"Hosts VM"| A_HLB
%% Primary mesh connections
A_ATL <-->|"10GbE LAN"| A_CAL
A_ATL <-->|"10GbE LAN"| A_GUAVA
A_ATL <-->|"10GbE LAN"| A_DESKTOP
%% Cross-location Tailscale
A_ATL <-.->|"Tailscale"| T_SET
A_ATL <-.->|"Tailscale"| S_SEA
A_ATL <-.->|"Tailscale"| B_NUC
%% GL router subnets
A_GL_MT -->|"subnet route"| A_HA
%% Honolulu local
H_MOON <-.->|"Tailscale"| A_ATL
classDef nas fill:#3498db,stroke:#333,stroke-width:2px,color:#fff
classDef exit fill:#e74c3c,stroke:#333,stroke-width:2px,color:#fff
classDef compute fill:#9b59b6,stroke:#333,stroke-width:2px,color:#fff
classDef mobile fill:#1abc9c,stroke:#333,stroke-width:2px,color:#fff
classDef network fill:#f39c12,stroke:#333,stroke-width:2px,color:#fff
class A_ATL,A_CAL,T_SET nas
class S_SEA,B_NUC,A_HA exit
class A_GUAVA,A_DESKTOP,A_PVE,A_HLB,A_MATRIX,A_JELLY compute
class M_IPHONE,M_PIXEL,M_IPAD,M_TAB,M_KLAP mobile
class A_GL_MT,A_GL_BE network
```
---
## 📝 ASCII Tailscale Network Map
```
╔══════════════════════════════════════════════════════════════════════════════════════════╗
║ HEADSCALE MESH NETWORK (self-hosted Tailscale control server) ║
║ 24 Nodes • 7 Exit Nodes • 4 Locations • Full Mesh ║
║ Control: headscale.vish.gg (Calypso) ║
║ DERP Relays: Home (Calypso), Atlantis, Seattle VPS ║
║ DNS: AdGuard resolves *.tail.vish.gg → Tailscale IPs ║
╚══════════════════════════════════════════════════════════════════════════════════════════╝
┌─────────────────┐
│ TAILSCALE │
│ COORDINATION │
│ (DERP Relays) │
└────────┬────────┘
┌───────────────────────────────────────┼───────────────────────────────────────┐
│ │ │
▼ ▼ ▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ 🏠 CONCORD, CA - PRIMARY (25Gbps Fiber) │
│ ══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ 10GbE BACKBONE (TP-Link TL-SX1008) │ │
│ │ ────────────────────────────────────────────────────────────────────────────── │ │
│ │ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ ⚡ ATLANTIS │ │ ⚡ CALYPSO │ │ GUAVA │ │ │
│ │ │ 100.83.230.112 │ │ 100.103.48.78 │ │ 100.75.252.64 │ │ │
│ │ │ DS1823xs+ │ │ DS723+ │ │ Physical Host │ │ │
│ │ │ EXIT NODE │ │ EXIT NODE │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ ┌─────────────┐ │ │ │ │ │ │ │
│ │ │ │matrix-ubuntu│ │ │ │ │ │ │ │
│ │ │ │100.85.21.51 │ │ │ │ │ │ │ │
│ │ │ │Mastodon/ │ │ │ │ │ │ │ │
│ │ │ │Matrix/MM │ │ │ │ │ │ │ │
│ │ │ └─────────────┘ │ │ │ │ │ │ │
│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ SHINKU-RYUU │ Desktop Workstation │ │
│ │ │ 100.98.93.15 │ │ │
│ │ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
│ │ 2.5GbE / 1GbE DEVICES │ │
│ │ ────────────────────────────────────────────────────────────────────────────── │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │ │
│ │ │ PVE │ │ JELLYFISH │ │⚡HOMEASSIST │ │ PI-5 │ │ HOMELAB VM │ │ │
│ │ │100.87.12.28 │ │100.69.121.120│ │100.112.186.90│ │100.77.151.40│ │100.67.40.126│ │ │
│ │ │ Proxmox │ │ Server │ │ EXIT NODE │ │ RPi 5 │ │ (on PVE) │ │ │
│ │ │ │ │ │ │via GL-MT3000│ │ │ │ │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ └────────────┘ │ │
│ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │
│ │ │ ⚡ GL-BE3600 │ │ GL-MT3000 │ │ │
│ │ │ 100.105.59.123 │ │ 100.126.243.15 │ │ │
│ │ │ EXIT NODE │ │ HA subnet router │ │ │
│ │ │ 192.168.8.0/24 │ │ 192.168.12.0/24 │ │ │
│ │ └─────────────────────┘ └─────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ 🏠 CONCORD BACKUP ISP (2Gbps/500Mbps) │
│ ══════════════════════════════════════════════════════════════════════════════════════│
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ ⚡ VISH-CONCORD-NUC │ │ PI-5-KEVIN │ │ MAH-PC │ │
│ │ 100.72.55.21 │ │ 100.123.246.75 │ │ 100.64.0.4 │ │
│ │ Intel NUC │ │ RPi 5 │ │ Windows PC │ │
│ │ EXIT NODE │ │ │ │ Sibling's PC │ │
│ └─────────────────────┘ └─────────────────────┘ └─────────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────┘
◄─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ TAILSCALE MESH ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─►
┌───────────────────────────┐ ┌───────────────────────────┐ ┌───────────────────────────┐
│ 🌵 TUCSON, AZ │ │ 🌺 HONOLULU, HI │ │ 🌲 SEATTLE (CLOUD) │
│ ═════════════════════════│ │ ═════════════════════════│ │ ═════════════════════════│
│ │ │ │ │ │
│ ┌─────────────────────┐ │ │ ┌─────────────────────┐ │ │ ┌─────────────────────┐ │
│ │ ⚡ SETILLO │ │ │ │ MOON (bluecrownpassion) │ │ │ │ ⚡ SEATTLE │ │
│ │ 100.125.0.20 │ │ │ │ 100.64.0.6 — online │ │ │ │ 100.82.197.124 │ │
│ │ DS223j NAS │ │ │ │ │ │ │ │ Contabo VPS │ │
│ │ EXIT NODE │ │ │ └─────────────────────┘ │ │ │ EXIT NODE │ │
│ │ Off-site Backup │ │ │ │ │ └─────────────────────┘ │
│ └─────────────────────┘ │ │ │ │ │
│ │ │ │ └───────────────────────────┘
└───────────────────────────┘ └───────────────────────────┘
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ 📱 MOBILE DEVICES │
│ ══════════════════════════════════════════════════════════════════════════════════════│
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 📱 iphone16 │ │ 📱 pixel-10 │ │ 📱 ipad-pro │ │ 📱 samsung │ │ 💻 kevinlap │ │
│ │100.79.252.108│ │100.122.119.40│ │100.68.71.48 │ │100.72.118.117│ │100.89.160.65 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────────────────────────┘
╔════════════════════════════════════════════════════════════════════════════════════════╗
║ EXIT NODE SUMMARY (6 Total) ║
║ ══════════════════════════ ║
║ • atlantis (100.83.230.112) - Primary exit, Concord 25Gbps ║
║ • calypso (100.103.48.78) - Secondary exit, Concord 25Gbps (Headscale host) ║
║ • setillo (100.125.0.20) - Tucson exit, DS223j off-site NAS ║
║ • seattle (100.82.197.124) - Cloud exit, Contabo VPS Seattle ║
║ • vish-concord-nuc (100.72.55.21) - Backup ISP exit, Concord 2Gbps ║
║ • homeassistant (100.112.186.90) - Home automation exit (via GL-MT3000 subnet) ║
║ • gl-be3600 (100.105.59.123) - GL.iNet router exit, subnet 192.168.8.0/24 ║
╚════════════════════════════════════════════════════════════════════════════════════════╝
```
---
## 🖥️ Matrix-Ubuntu VM Details
This VM runs on **Atlantis** (Synology DS1823xs+ via Virtual Machine Manager):
| Specification | Value |
|---------------|-------|
| **Hostname** | matrix-ubuntu |
| **Tailscale IP** | 100.85.21.51 |
| **LAN IP** | 192.168.0.154 |
| **OS** | Ubuntu 24.04.3 LTS |
| **CPU** | 4 cores (AMD Ryzen Embedded V1780B) |
| **RAM** | 8GB (7.7GB usable) |
| **Storage** | 100GB (87GB available) |
| **SSH Port** | 65533 |
### Services Running
| Service | Domain | Status |
|---------|--------|--------|
| **Nginx Proxy Manager** | npm.vish.gg (:81) | ✅ Running (reverse proxy for all domains) |
| Mastodon | mastodon.vish.gg | ✅ Running |
| Mattermost | mm.crista.love | ✅ Running |
| Matrix (Synapse) | mx.vish.gg | ✅ Running |
| LiveKit | livekit.mx.vish.gg | ✅ Running |
| PostgreSQL | - | ✅ Running |
| Redis | - | ✅ Running |
---
## 🔗 Related Diagrams
- [Network Topology](network-topology.md) - Physical network layout
- [Service Architecture](service-architecture.md) - How services connect
- [Location Overview](location-overview.md) - Geographic distribution