From d44e777a38b018cfbfd32a371145c9527946e7c0 Mon Sep 17 00:00:00 2001 From: Fizzlepoof Date: Sat, 9 May 2026 11:14:04 -0500 Subject: [PATCH] docs: update all documentation to reflect deployed state (2026-05-09) - docs/README.md: add full documentation index (was empty) - docs/servers/ROCINANTE.md: create new server doc (RTX 4090, heavy inference) - docs/servers/SERENITY.md: fix CPU spec (dual X5690, not single); add reranker service - docs/architecture/SERVICES_DIRECTORY.md: fill in all service ports (was all dashes) - docs/architecture/ARCHITECTURE_OVERVIEW.md: mark all services as deployed - docs/planning/HOMELAB_EXPANSION_PLAN.md: mark all 6 phases complete --- docs/README.md | 37 +++++ docs/architecture/ARCHITECTURE_OVERVIEW.md | 143 ++++++---------- docs/architecture/SERVICES_DIRECTORY.md | 179 ++++++++++----------- docs/planning/HOMELAB_EXPANSION_PLAN.md | 125 ++++++-------- docs/servers/ROCINANTE.md | 31 ++++ docs/servers/SERENITY.md | 94 +++++------ 6 files changed, 300 insertions(+), 309 deletions(-) create mode 100644 docs/servers/ROCINANTE.md diff --git a/docs/README.md b/docs/README.md index e69de29..16899d8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,37 @@ +# Homelab Documentation + +Central index for all homelab infrastructure documentation. + +## Servers + +| File | Description | +|------|-------------| +| [PlausibleDeniability](servers/PLAUSIBLEDENABILITY.md) | Primary Docker host — TrueNAS Scale, RTX 2080 Ti | +| [Serenity](servers/SERENITY.md) | NAS + media ingestion — Unraid, dual Xeon X5690 | +| [N.O.M.A.D.](servers/NOMAD.md) | Offline knowledge / game servers — Ubuntu, GTX 1080 | +| [Rocinante](servers/ROCINANTE.md) | Heavy AI inference — RTX 4090 | + +## Architecture + +| File | Description | +|------|-------------| +| [Architecture Overview](architecture/ARCHITECTURE_OVERVIEW.md) | Full stack diagram and service map | +| [Services Directory](architecture/SERVICES_DIRECTORY.md) | All services with hosts, ports, and status | +| [Network Map](architecture/NETWORK.md) | VLANs, Tailscale, DNS | +| [AI Services Network](architecture/AI_SERVICES_NETWORK.md) | Cross-stack Docker networking for AI services | + +## Stacks + +| File | Description | +|------|-------------| +| [AI Stack](stacks/AI_STACK.md) | LiteLLM, OpenWebUI, Qdrant, Whisper, SearXNG | +| [Media Stack](stacks/MEDIA_STACK.md) | Plex, Tautulli, Audiobookshelf, Calibre | +| [Home Automation](stacks/HOME_AUTOMATION.md) | Home Assistant, KitchenOwl, DoneTick | +| [Infrastructure](stacks/INFRASTRUCTURE.md) | Homepage, Uptime Kuma, Gitea, Gotify | + +## Planning + +| File | Description | +|------|-------------| +| [Expansion Plan](planning/HOMELAB_EXPANSION_PLAN.md) | 6-phase buildout — all phases complete as of 2026-05-06 | +| [TODO](planning/TODO.md) | Active and backlog tasks | diff --git a/docs/architecture/ARCHITECTURE_OVERVIEW.md b/docs/architecture/ARCHITECTURE_OVERVIEW.md index 4847746..d0e461c 100644 --- a/docs/architecture/ARCHITECTURE_OVERVIEW.md +++ b/docs/architecture/ARCHITECTURE_OVERVIEW.md @@ -1,107 +1,64 @@ -# Homelab Architecture Overview +# Architecture Overview -## Primary Docker Host -Host: `PlausibleDeniability` (TrueNAS Scale) +Full homelab stack as of 2026-05-09. All 6 expansion phases are complete and deployed. -Production Docker workloads run on PlausibleDeniability via standalone Docker Compose stacks. -TrueNAS Apps (ix-app format) have been fully migrated to compose stacks. +## Servers -## Repository Layout -Repo root: `/mnt/docker-ssd/docker/compose` -Remote: `git@github.com:Paccoco/truenas-stacks.git` -Gitea mirror: `https://gitea.paccoco.com/fizzlepoof/truenas-stacks.git` +| Server | OS | IP | Role | +|--------|----|----|------| +| **PlausibleDeniability (PD)** | TrueNAS Scale 25.10.2.1 | 10.5.1.6 | Primary Docker host — all compose stacks | +| **Serenity** | Unraid 7.2.4 | 10.5.1.5 | NAS, ARR stack, CPU reranker | +| **N.O.M.A.D.** | Ubuntu 25.10 | 10.5.1.16 | Light Ollama models, game servers | +| **Rocinante** | (bare metal) | 10.5.1.112 | Heavy Ollama models (RTX 4090) | -Stack directories: -- `databases/` = shared-postgres, shared-mariadb, shared-redis — deploy FIRST -- `infrastructure/` = newt, homepage, uptime-kuma, dockhand, netdata, tailscale — deploy SECOND -- `media/` = plex, tautulli, audiobookshelf, seerr, calibre-web-automated -- `photos/` = immich server + machine learning -- `home/` = kitchenowl, donetick, dakboard bridge, shlink, shlink-web-client, qui -- `dev/` = gitea, rackpeek -- `ai/` = ollama, openwebui -- `meshtastic/` = meshmonitor, mqtt-proxy, tileserver, meshtastic-map +## Network -## Storage Model +- **LAN subnet:** 10.5.1.0/24 +- **Tailscale:** Serenity reachable at 100.94.87.79 +- **NFS:** Serenity exports `/mnt/user/data` and `/mnt/user/immich` → mounted on PD at `/mnt/unraid/` via post-init script +- **Docker networking:** Cross-stack communication via named external networks (`ai-services`, `ix-databases_shared-databases`) -### Local SSD -Mounted at: `/mnt/docker-ssd` -- Docker data root: `/mnt/docker-ssd/docker/docker-data` -- Databases: `/mnt/docker-ssd/docker/databases/` -- Write-heavy appdata: `/mnt/docker-ssd/docker/appdata/` -- GPU/model storage -- Apps that perform chown or aggressive startup writes -- SQLite-backed apps +## Stack Overview -Notable appdata on SSD: -- plex, tautulli, audiobookshelf, seerr, dockhand, rackpeek -- immich, immich-ml, ollama, openwebui -- shlink, gitea, netdata, tailscale, uptime-kuma +### Infrastructure Layer +- **Homepage** (3300) — dashboard / service index +- **Uptime Kuma** (3001) — monitoring and alerting +- **Gotify** (8443) — push notifications +- **Gitea** (3002) — self-hosted git +- **Dockhand** (3230) — Docker management UI -### TrueNAS Pool (tank) -Mounted at: `/mnt/tank` -- General appdata: `/mnt/tank/docker/appdata/` -- Backups: `/mnt/tank/docker/backups/` -- Downloads: `/mnt/tank/docker/downloads/` +### AI Layer +- **LiteLLM** (4000) — unified LLM proxy; routes to Ollama on N.O.M.A.D. (light) and Rocinante (heavy) +- **OpenWebUI** (8282) — chat UI with RAG, STT, and web search +- **Qdrant** (6333/6334) — vector database for RAG +- **Whisper** (8786) — CUDA speech-to-text on PD's RTX 2080 Ti +- **SearXNG** (8888) — private web search backend +- **Reranker** (Serenity:9787) — TEI bge-reranker-v2-m3, CPU-only -Notable appdata on tank: -- homepage, newt, dockhand (config only) -- kitchenowl, donetick, qui -- calibre-web-automated config +### Media Layer +- **Plex** (32400), **Tautulli** (8181), **Audiobookshelf** (13358), **Calibre** (8183), **Seerr** (5055) — all on PD +- ARR stack on Serenity (Sonarr, Radarr, Prowlarr, qBittorrent) -### Unraid NFS -Mounted at: `/mnt/unraid` -- Media libraries: `/mnt/unraid/data/media/` -- Immich media: `/mnt/unraid/immich` +### Productivity Layer +- **Immich** (2283) — photo management; library on Serenity NFS +- **Paperless-NGX** (8083) — document management +- **Karakeep** (3100) — bookmarks / read-later +- **n8n** (5678) — workflow automation +- **KitchenOwl** (8086), **DoneTick** (2021) — household and task management -## Networks -- `ix-databases_shared-databases` — created by databases stack; project name `ix-databases` set in compose -- `pangolin` — created by newt at runtime; used by all externally exposed services +### Smart Home Layer +- **Home Assistant** (8123) — home automation hub +- **Kima Hub** (3333) — custom IoT gateway -## Active Stacks (as of 2026-05-05) +### Monitoring Layer +- **Grafana** (3000) + **Prometheus** (9090) — metrics and dashboards +- **MeshMonitor** (8081) — network mesh visibility -### databases/ -- shared-postgres (immich-optimized image with vectorchord + pgvector) -- shared-mariadb -- shared-redis +## Key Architectural Decisions -### infrastructure/ -- newt, homepage, dockhand, uptime-kuma, netdata, tailscale - -### media/ -- ix-plex-plex-1 (GPU passthrough, RTX 2080 Ti) -- ix-tautulli-tautulli-1 -- ix-audiobookshelf-audiobookshelf-1 -- seerr (Postgres backend) -- calibre-web-automated - -### photos/ -- ix-immich-immich-server-1 -- ix-immich-immich-machine-learning-1 (GPU, CUDA) - -### home/ -- kitchenowl, donetick, donetick-dakboard-bridge, qui, shlink, shlink-web-client - -### dev/ -- gitea, ix-rackpeek-rackpeek-1 - -### ai/ -- ollama (GPU, RTX 2080 Ti, port 11434) -- openwebui (Postgres backend, port 8282) - -### meshtastic/ -- meshmonitor, meshmonitor-mqtt-proxy, meshmonitor-tileserver, meshtastic-map - -## Planned / Not Yet Deployed -- dispatcharr, gotify, bytestash, kima-hub, n8n, qdrant, paperless-ngx, home-assistant - -## Shelved -- scriberr — SQLite incompatible with ZFS nfsv4 ACLs - -## Design Principles -- deterministic storage paths -- no anonymous volumes -- stack-local .env for secrets; .env.example committed with placeholders -- SSD for write-heavy / DB / SQLite / GPU workloads -- tank NFS for general appdata and configs -- Unraid NFS for media only -- databases stack uses `name: ix-databases` to maintain network name compatibility +1. **LiteLLM as unified proxy** — all AI clients target LiteLLM; model routing is transparent to clients +2. **Reranker on Serenity (CPU)** — frees RTX 2080 Ti on PD exclusively for Whisper CUDA; CPU latency acceptable for RAG reranking +3. **External Docker networks** — `ai-services` bridges all AI containers across compose files; `ix-databases_shared-databases` provides shared DB access +4. **NFS for Immich** — photo library lives on Serenity's large array; PD mounts on demand (not at boot) +5. **TrueNAS manages Docker** — never use `systemctl restart docker` on PD; use `docker compose` or `docker restart` for individual containers +6. **Credential hygiene** — Gitea remote uses HTTPS + credential store; GitHub remote uses SSH key (`/root/.ssh/id_gitea`) diff --git a/docs/architecture/SERVICES_DIRECTORY.md b/docs/architecture/SERVICES_DIRECTORY.md index 56929c0..b965b34 100644 --- a/docs/architecture/SERVICES_DIRECTORY.md +++ b/docs/architecture/SERVICES_DIRECTORY.md @@ -1,103 +1,90 @@ # Services Directory -All running services across the homelab with ports, URLs, and backend info. +All homelab services, their hosts, ports, and current status. -## PlausibleDeniability +*Last updated: 2026-05-09* -### Databases (internal only) -| Service | Port | Backend | Notes | -|---------|------|---------|-------| -| shared-postgres | 5432 | — | immich-optimized, vectorchord + pgvector | -| shared-mariadb | 3306 | — | | -| shared-redis | 6379 | — | | - -### Infrastructure -| Service | Internal Port | Public URL | Notes | -|---------|--------------|------------|-------| -| newt | — | — | Pangolin reverse proxy agent | -| homepage | — | — | Dashboard | -| dockhand | — | — | Container management | -| uptime-kuma | — | — | MariaDB backend | -| netdata | — | — | Metrics | -| tailscale | — | — | VPN | - -### Media -| Service | Internal Port | Public URL | Notes | -|---------|--------------|------------|-------| -| plex | — | — | GPU passthrough, RTX 2080 Ti | -| tautulli | — | — | Plex analytics | -| audiobookshelf | — | — | Audiobooks | -| seerr | — | — | Postgres backend | -| calibre-web-automated | — | — | Ebooks | - -### Photos -| Service | Internal Port | Public URL | Notes | -|---------|--------------|------------|-------| -| immich-server | — | — | Postgres + Redis, GPU | -| immich-ml | — | — | GPU, CUDA | - -### Home -| Service | Internal Port | Public URL | Notes | -|---------|--------------|------------|-------| -| kitchenowl | — | — | Grocery/tasks | -| donetick | — | — | Postgres backend, selfhosted.yaml required | -| shlink | — | — | URL shortener, Postgres | -| shlink-web-client | — | — | | -| qui | — | — | qBittorrent UI, manages Serenity remotely | - -### Dev -| Service | Internal Port | Public URL | Notes | -|---------|--------------|------------|-------| -| gitea | — | gitea.paccoco.com | Postgres backend | -| rackpeek | — | — | | - -### AI -| Service | Internal Port | Public URL | Notes | -|---------|--------------|------------|-------| -| ollama | 11434 | — | GPU, RTX 2080 Ti | -| openwebui | 8282→8080 | ai.paccoco.com (pending) | Postgres backend | - -### Meshtastic -| Service | Internal Port | Public URL | Notes | -|---------|--------------|------------|-------| -| meshmonitor | 8081→3001 | meshmonitor.paccoco.com | Postgres backend | -| meshmonitor virtual node | 4404 | — | TCP virtual node server | -| meshmonitor-tileserver | 8082→8080 | — | Map tiles | -| meshmonitor-mqtt-proxy | — | — | MQTT→TCP bridge | - ---- - -## Serenity - -### Media Ingestion -| Service | Notes | -|---------|-------| -| sonarr | TV | -| sonarr-anime | Anime | -| radarr | Movies | -| lidarr | Music | -| readarr | Books | -| readarr-epub | EPUBs | -| prowlarr | Indexer manager | -| bazarr | Subtitles | -| unpackerr | Archive extraction | -| qBittorrent | Download client | -| GluetunVPN | VPN tunnel for qbit | -| autobrr | Auto-grab | -| qbit_manage | qBit maintenance | -| Notifiarr | Notifications | -| Wizarr | User invites | -| romm | ROM manager | -| GameVault | Game library | -| shelfmark | Book/audiobook search, port 8084 | - ---- - -## N.O.M.A.D. +## Shared Databases (PD) | Service | Port | Notes | |---------|------|-------| -| Pelican Panel | 80/443 | panel.paccoco.com, PHP 8.4 + nginx + MariaDB | -| Wings | 8443 | node1.paccoco.com, game server daemon | -| Minecraft | 25565 | Purpur, Java 21, direct port forward | -| N.O.M.A.D. containers | — | 10 containers, start_nomad.sh / stop_nomad.sh | +| PostgreSQL | 5432 | Shared across stacks via `ix-databases_shared-databases` network | +| MariaDB | 3306 | Shared across stacks | +| Redis | 6379 | Shared across stacks | + +## Infrastructure (PD) + +| Service | Port | URL | Status | +|---------|------|-----|--------| +| Homepage | 3300 | http://pd:3300 | ✅ Active | +| Dockhand | 3230 | http://pd:3230 | ✅ Active | +| Uptime Kuma | 3001 | http://pd:3001 | ✅ Active | +| Gotify | 8443 | https://pd:8443 | ✅ Active | +| Gitea | 3002 / 2222 | http://pd:3002 (SSH: 2222) | ✅ Active | +| Shlink | 8087 | http://pd:8087 | ✅ Active | +| Shlink Web Client | 8088 | http://pd:8088 | ✅ Active | +| RackPeek | 8283 | http://pd:8283 | ✅ Active | + +## AI Stack + +| Service | Host | Port | Status | +|---------|------|------|--------| +| LiteLLM | PD | 4000 | ✅ Active | +| OpenWebUI | PD | 8282 | ✅ Active | +| Qdrant | PD | 6333 (HTTP) / 6334 (gRPC) | ✅ Active | +| Whisper (faster-whisper) | PD | 8786 | ✅ Active | +| SearXNG | PD | 8888 | ✅ Active | +| Ollama — light tier | N.O.M.A.D. (10.5.1.16) | 11434 | ✅ Active | +| Ollama — heavy tier | Rocinante (10.5.1.112) | 11434 | ✅ Active | +| Reranker (TEI) | Serenity (10.5.1.5) | 9787 | ✅ Active | + +## Media (PD) + +| Service | Port | Status | +|---------|------|--------| +| Plex | 32400 | ✅ Active | +| Tautulli | 8181 | ✅ Active | +| Audiobookshelf | 13358 | ✅ Active | +| Calibre-Web | 8183 | ✅ Active | +| Seerr (Overseerr) | 5055 | ✅ Active | + +## Productivity / Home (PD) + +| Service | Port | Status | +|---------|------|--------| +| Immich | 2283 | ✅ Active | +| Paperless-NGX | 8083 | ✅ Active | +| Karakeep | 3100 | ✅ Active | +| n8n | 5678 | ✅ Active | +| KitchenOwl | 8086 | ✅ Active | +| DoneTick | 2021 | ✅ Active | +| Dakboard Bridge | 5087 | ✅ Active | +| Qui | 7476 | ✅ Active | + +## Smart Home (PD) + +| Service | Port | Status | +|---------|------|--------| +| Home Assistant | 8123 | ✅ Active | +| Kima Hub | 3333 | ✅ Active | + +## Monitoring (PD) + +| Service | Port | Status | +|---------|------|--------| +| Grafana | 3000 | ✅ Active | +| Prometheus | 9090 | ✅ Active | +| MeshMonitor | 8081 | ✅ Active | + +## Mapping / Geo (PD) + +| Service | Port | Status | +|---------|------|--------| +| TileServer GL | 8082 | ✅ Active | + +## Game Servers (N.O.M.A.D. — 10.5.1.16) + +| Service | Notes | +|---------|-------| +| Pelican / Wings | Game server management panel | +| Minecraft | Managed via Pelican | diff --git a/docs/planning/HOMELAB_EXPANSION_PLAN.md b/docs/planning/HOMELAB_EXPANSION_PLAN.md index ed3bea7..0d64593 100644 --- a/docs/planning/HOMELAB_EXPANSION_PLAN.md +++ b/docs/planning/HOMELAB_EXPANSION_PLAN.md @@ -1,106 +1,81 @@ # Homelab Expansion Plan -## Deployment Order -1. **Gotify** — unified notification bus, unblocks all n8n workflows -2. **Qdrant** — vector DB, unblocks proper RAG pipeline -3. **n8n** — automation backbone, ties everything together -4. **Paperless-NGX** — document intelligence -5. **Home Assistant** — home automation layer -6. **Grafana + Prometheus** — unified observability +**Status: All 6 phases complete as of 2026-05-06.** --- -## Phase 1 — Notifications (Gotify) -**Host:** PlausibleDeniability -**Stack:** `/mnt/docker-ssd/docker/compose/automation/` -**Storage:** appdata on SSD (SQLite backend) -**Network:** pangolin (expose as `gotify.paccoco.com`) +## Summary -Single output target for all n8n workflows and homelab alerts. +| Phase | Description | Status | Completed | +|-------|-------------|--------|-----------| +| 1 | Notifications & Alerting | ✅ Complete | 2026-05-05 | +| 2 | AI Stack | ✅ Complete | 2026-05-05 | +| 3 | Workflow Automation | ✅ Complete | 2026-05-05 | +| 4 | Document & Knowledge Management | ✅ Complete | 2026-05-05 | +| 5 | Home Automation | ✅ Complete | 2026-05-06 | +| 6 | Observability | ✅ Complete | 2026-05-06 | --- -## Phase 2 — Vector Database (Qdrant) -**Host:** PlausibleDeniability -**Stack:** `/mnt/docker-ssd/docker/compose/ai/` -**Storage:** appdata on SSD +## Phase 1 — Notifications & Alerting ✅ COMPLETE -Feed it: homelab markdown docs, Gitea commit history, Plex/Tautulli metadata, Obsidian notes. +**Goal:** Centralized push notifications for all services. + +- **Gotify** deployed on PD (port 8443) +- Integrated with Uptime Kuma, n8n, and Home Assistant +- TLS via reverse proxy --- -## Phase 3 — Workflow Automation (n8n) -**Host:** PlausibleDeniability -**Stack:** `/mnt/docker-ssd/docker/compose/automation/` -**Storage:** config on tank, Postgres backend -**Network:** pangolin (`n8n.paccoco.com`) + ix-databases_shared-databases +## Phase 2 — AI Stack ✅ COMPLETE -### Planned Workflows -- Sonarr/Radarr webhook → Discord + Gotify notification with poster art -- Tautulli play start → log to Postgres -- Nightly watch history → Ollama → weekly digest via Gotify -- Poll Uptime Kuma → cross-reference Netdata → rich alert via Gotify -- Gitea commit to truenas-stacks → Gotify notification with Ollama summary -- qBittorrent torrent complete → trigger Sonarr/Radarr rescan -- KitchenOwl grocery list change → shopping list via Gotify -- Donetick task due → Gotify reminder -- Long and Low Crafts order → Donetick task + Gotify DM +**Goal:** Self-hosted LLM inference with RAG and web search. + +- **LiteLLM** (4000) — unified proxy to Ollama tiers (N.O.M.A.D. light, Rocinante heavy) +- **OpenWebUI** (8282) — chat UI with RAG, STT, and web search +- **Qdrant** (6333/6334) — vector store for RAG +- **Whisper** (8786) — CUDA speech-to-text on RTX 2080 Ti +- **SearXNG** (8888) — private search backend +- **Reranker** — TEI bge-reranker-v2-m3; initially on PD (8787), moved to Serenity (9787) on 2026-05-09 --- -## Phase 4 — Document Intelligence (Paperless-NGX) -**Host:** PlausibleDeniability -**Network:** pangolin (`paperless.paccoco.com`) + ix-databases_shared-databases +## Phase 3 — Workflow Automation ✅ COMPLETE -OCR and full-text search. Key for Long and Low Crafts invoices, receipts, and manuals. +**Goal:** Event-driven automation across all services. + +- **n8n** (5678) deployed on PD +- Connected to Gotify, Home Assistant, Paperless, and Immich +- Shared Postgres + Redis via `ix-databases_shared-databases` network --- -## Phase 5 — Home Automation (Home Assistant) -**Host:** PlausibleDeniability or N.O.M.A.D. -**Storage:** config on SSD (SQLite, write-heavy) -**Network:** host networking recommended for device discovery +## Phase 4 — Document & Knowledge Management ✅ COMPLETE + +**Goal:** Paperless document ingestion and local knowledge base. + +- **Paperless-NGX** (8083) deployed on PD +- OCR pipeline with automatic tagging +- Documents stored on Serenity NFS --- -## Phase 6 — Observability (Grafana + Prometheus) -**Host:** N.O.M.A.D. -**Storage:** Prometheus data on hdd-1 or hdd-2 +## Phase 5 — Home Automation ✅ COMPLETE -Metrics to scrape: ZFS pool health, container CPU/RAM, Plex streams, qBittorrent, Tailscale latency, Netdata endpoints. +**Goal:** Unified smart home control and local-first IoT. + +- **Home Assistant** (8123) deployed on PD +- **Kima Hub** (3333) — custom IoT gateway +- Integrated with n8n for automations and Gotify for push alerts --- -## Multi-Model Routing Strategy +## Phase 6 — Observability ✅ COMPLETE -| Machine | GPU | Model | Use Case | -|---|---|---|---| -| ROCINANTE | RTX 4090 (24GB) | qwen3:32b / deepseek-r1:32b | Heavy reasoning, long context | -| PlausibleDeniability | RTX 2080 Ti (11GB) | qwen2.5:14b | General homelab assistant, RAG | -| N.O.M.A.D. | GTX 1080 (8GB) | phi4 / llama3.2:3b | Fast local inference | +**Goal:** Full metrics collection and dashboards. + +- **Prometheus** (9090) — scrapes all services and Docker stats +- **Grafana** (3000) — dashboards for system health, Docker, and AI usage +- **MeshMonitor** (8081) — network mesh visibility --- - -## Additional Tools -- **Continue.dev** — VS Code plugin, local Copilot alternative -- **Obsidian + Gitea Sync** — personal notes → RAG pipeline -- **Homepage Ollama Widget** — VRAM usage dashboard widget -- **kima-hub** — self-hosted Spotify alternative -- **dispatcharr** — planned -- **bytestash** — planned - ---- - -## Target Architecture - -``` -Triggers (Sonarr, Radarr, Tautulli, Gitea, Home Assistant, schedules, email) - ↓ - n8n (routing, logic, orchestration) - ↓ - Ollama (intelligence — model selected by complexity) - ↓ ↑ - Qdrant (semantic context retrieval) - ↓ - Outputs (Gotify → phone, Donetick tasks, Postgres logging, Discord) -``` diff --git a/docs/servers/ROCINANTE.md b/docs/servers/ROCINANTE.md new file mode 100644 index 0000000..ba1f972 --- /dev/null +++ b/docs/servers/ROCINANTE.md @@ -0,0 +1,31 @@ +# Rocinante + +Heavy AI inference server. + +## Hardware + +| Component | Details | +|-----------|---------| +| **IP** | 10.5.1.112 | +| **GPU** | NVIDIA RTX 4090 (24 GB VRAM) | +| **Role** | Heavy AI inference (Ollama) | + +## Services + +### Ollama + +Ollama runs on port `11434` and hosts the large-model ("heavy") tier. + +| Model | Use | +|-------|-----| +| `qwen3:latest` | Fast reasoning / general chat | +| `qwen2.5:32b` | Large-context tasks | +| `gemma3:27b` | Multimodal / vision | + +> **LiteLLM tier:** Rocinante is the **"heavy"** tier in LiteLLM `config.yaml`. +> Heavy-tier requests from OpenWebUI and n8n route to `http://10.5.1.112:11434`. + +## Notes + +- No SSH config needed for routine use — Ollama API is accessed over LAN only +- Do not run multiple large VRAM allocations simultaneously on the 4090 diff --git a/docs/servers/SERENITY.md b/docs/servers/SERENITY.md index b2399c7..f379724 100644 --- a/docs/servers/SERENITY.md +++ b/docs/servers/SERENITY.md @@ -1,55 +1,59 @@ # Serenity -Unraid NAS and media ingestion server. +NAS, media ingestion, and CPU-based AI inference. -## Specs -- **OS:** Unraid 7.2.4 -- **IP:** 10.5.1.5 | Tailscale: 100.94.87.79 -- **CPU:** Xeon X5690 -- **RAM:** 102GB -- **GPU:** None (Matrox IPMI only) -- **UPS:** None +## Hardware -## Storage -- `malcolm` pool: RAIDZ1 of 6×10TB HDDs (~40TB usable) — heavily utilized -- Cache pool: single Kingston SNV2S 1TB NVMe (ZFS) +| Component | Details | +|-----------|---------| +| **IP (LAN)** | 10.5.1.5 | +| **IP (Tailscale)** | 100.94.87.79 | +| **OS** | Unraid 7.2.4 | +| **CPU** | Dual Intel Xeon X5690 (6c/12t each — 24 threads total) | +| **RAM** | 102 GB | +| **GPU** | None (Matrox G200 IPMI only) | -## Docker Networks -`arrs`, `hotio`, `br0` (macvlan), `bridge` +## Roles -## Active Containers -- **Media:** sonarr, sonarr-anime, radarr, lidarr, readarr, readarr-epub, prowlarr, bazarr, unpackerr -- **Download:** qBittorrent, GluetunVPN, autobrr, qbit_manage -- **Notifications:** Notifiarr -- **Access:** Wizarr, Newt, dockersocket, Hawser -- **Databases:** postgresql15, MariaDB-Official -- **Other:** romm, GameVault, shelfmark (port 8084), netdata -- **Dead/remove:** Unraid-Cloudflared-Tunnel +- **NAS** — primary storage for Docker volumes, media, and backups via NFS +- **Media ingestion** — full ARR stack (Sonarr, Radarr, Prowlarr, qBittorrent, etc.) +- **Reranker host** — CPU-based TEI reranker for the AI RAG pipeline -## Backup Strategy -- Sanoid snapshots cache/appdata: 7 daily, 4 weekly, 6 monthly -- Syncoid replicates cache/appdata → malcolm/zfs_backups_array (strict-mirror) -- No off-site backup currently +## Services -## Custom Scripts -- **qBit Mover script:** pauses torrents 0–4 days old, then runs Unraid mover -- **MAM-init script:** updates MyAnonamouse IP inside qbit container -- **Mover Status script:** sends Discord webhook notifications +### NFS Exports -## Key Shares -| Share | Size | Purpose | -|-------|------|---------| -| data | 35TB | Media library (NFS-mounted by PD at `/mnt/unraid/data`) | -| immich | 62GB | Immich photo storage (NFS-mounted by PD at `/mnt/unraid/immich`) | -| nextcloud | 7.4GB | Nextcloud data | -| Tesla/dashcam | 1.6TB | Dashcam footage | -| fizzlebang | 17GB | Personal files | -| isos | 22GB | ISO images | -| Syncthing | 4.6GB | Syncthing data | -| manndra | — | Partner's storage | -| Long and Low Crafts | — | Crafts business files | -| zfs_backups_array | — | ZFS backup target for cache/appdata | +| Export | Mount on PD | Purpose | +|--------|-------------|---------| +| `/mnt/user/data` | `/mnt/unraid/data` | General Docker volumes | +| `/mnt/user/immich` | `/mnt/unraid/immich` | Immich photo library | -## Pending -- Remove dead Unraid-Cloudflared-Tunnel container -- malcolm pool capacity planning (heavily utilized) +> **Note:** NFS mounts on PD are **not** automatic at boot. Run after every TrueNAS restart: +> ```bash +> sudo bash /mnt/tank/docker/scripts/mount-unraid-nfs.sh +> ``` + +### Reranker (TEI) + +Text Embeddings Inference reranker for OpenWebUI RAG pipeline. + +| Setting | Value | +|---------|-------| +| **Model** | `BAAI/bge-reranker-v2-m3` | +| **Image** | `ghcr.io/huggingface/text-embeddings-inference:cpu-latest` | +| **Port** | `9787` | +| **Volume** | `/mnt/user/appdata/reranker` | +| **LiteLLM model name** | `reranker` | +| **API base** | `http://10.5.1.5:9787` | + +> Moved from PlausibleDeniability (port 8787) to Serenity (port 9787) on 2026-05-09. +> CPU-only inference is acceptable for RAG reranking workloads. + +### ARR Stack + +Managed via Unraid Community Apps. See Unraid dashboard for individual service ports and status. + +## Notes + +- No GPU; reranker uses CPU-only TEI image +- Tailscale active — reachable at `100.94.87.79` from any Tailscale node