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
This commit is contained in:
@@ -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 |
|
||||||
|
|||||||
@@ -1,107 +1,64 @@
|
|||||||
# Homelab Architecture Overview
|
# Architecture Overview
|
||||||
|
|
||||||
## Primary Docker Host
|
Full homelab stack as of 2026-05-09. All 6 expansion phases are complete and deployed.
|
||||||
Host: `PlausibleDeniability` (TrueNAS Scale)
|
|
||||||
|
|
||||||
Production Docker workloads run on PlausibleDeniability via standalone Docker Compose stacks.
|
## Servers
|
||||||
TrueNAS Apps (ix-app format) have been fully migrated to compose stacks.
|
|
||||||
|
|
||||||
## Repository Layout
|
| Server | OS | IP | Role |
|
||||||
Repo root: `/mnt/docker-ssd/docker/compose`
|
|--------|----|----|------|
|
||||||
Remote: `git@github.com:Paccoco/truenas-stacks.git`
|
| **PlausibleDeniability (PD)** | TrueNAS Scale 25.10.2.1 | 10.5.1.6 | Primary Docker host — all compose stacks |
|
||||||
Gitea mirror: `https://gitea.paccoco.com/fizzlepoof/truenas-stacks.git`
|
| **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:
|
## Network
|
||||||
- `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
|
|
||||||
|
|
||||||
## 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
|
## Stack Overview
|
||||||
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
|
|
||||||
|
|
||||||
Notable appdata on SSD:
|
### Infrastructure Layer
|
||||||
- plex, tautulli, audiobookshelf, seerr, dockhand, rackpeek
|
- **Homepage** (3300) — dashboard / service index
|
||||||
- immich, immich-ml, ollama, openwebui
|
- **Uptime Kuma** (3001) — monitoring and alerting
|
||||||
- shlink, gitea, netdata, tailscale, uptime-kuma
|
- **Gotify** (8443) — push notifications
|
||||||
|
- **Gitea** (3002) — self-hosted git
|
||||||
|
- **Dockhand** (3230) — Docker management UI
|
||||||
|
|
||||||
### TrueNAS Pool (tank)
|
### AI Layer
|
||||||
Mounted at: `/mnt/tank`
|
- **LiteLLM** (4000) — unified LLM proxy; routes to Ollama on N.O.M.A.D. (light) and Rocinante (heavy)
|
||||||
- General appdata: `/mnt/tank/docker/appdata/`
|
- **OpenWebUI** (8282) — chat UI with RAG, STT, and web search
|
||||||
- Backups: `/mnt/tank/docker/backups/`
|
- **Qdrant** (6333/6334) — vector database for RAG
|
||||||
- Downloads: `/mnt/tank/docker/downloads/`
|
- **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:
|
### Media Layer
|
||||||
- homepage, newt, dockhand (config only)
|
- **Plex** (32400), **Tautulli** (8181), **Audiobookshelf** (13358), **Calibre** (8183), **Seerr** (5055) — all on PD
|
||||||
- kitchenowl, donetick, qui
|
- ARR stack on Serenity (Sonarr, Radarr, Prowlarr, qBittorrent)
|
||||||
- calibre-web-automated config
|
|
||||||
|
|
||||||
### Unraid NFS
|
### Productivity Layer
|
||||||
Mounted at: `/mnt/unraid`
|
- **Immich** (2283) — photo management; library on Serenity NFS
|
||||||
- Media libraries: `/mnt/unraid/data/media/`
|
- **Paperless-NGX** (8083) — document management
|
||||||
- Immich media: `/mnt/unraid/immich`
|
- **Karakeep** (3100) — bookmarks / read-later
|
||||||
|
- **n8n** (5678) — workflow automation
|
||||||
|
- **KitchenOwl** (8086), **DoneTick** (2021) — household and task management
|
||||||
|
|
||||||
## Networks
|
### Smart Home Layer
|
||||||
- `ix-databases_shared-databases` — created by databases stack; project name `ix-databases` set in compose
|
- **Home Assistant** (8123) — home automation hub
|
||||||
- `pangolin` — created by newt at runtime; used by all externally exposed services
|
- **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/
|
## Key Architectural Decisions
|
||||||
- shared-postgres (immich-optimized image with vectorchord + pgvector)
|
|
||||||
- shared-mariadb
|
|
||||||
- shared-redis
|
|
||||||
|
|
||||||
### infrastructure/
|
1. **LiteLLM as unified proxy** — all AI clients target LiteLLM; model routing is transparent to clients
|
||||||
- newt, homepage, dockhand, uptime-kuma, netdata, tailscale
|
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
|
||||||
### media/
|
4. **NFS for Immich** — photo library lives on Serenity's large array; PD mounts on demand (not at boot)
|
||||||
- ix-plex-plex-1 (GPU passthrough, RTX 2080 Ti)
|
5. **TrueNAS manages Docker** — never use `systemctl restart docker` on PD; use `docker compose` or `docker restart` for individual containers
|
||||||
- ix-tautulli-tautulli-1
|
6. **Credential hygiene** — Gitea remote uses HTTPS + credential store; GitHub remote uses SSH key (`/root/.ssh/id_gitea`)
|
||||||
- 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,103 +1,90 @@
|
|||||||
# Services Directory
|
# 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)
|
## Shared Databases (PD)
|
||||||
| 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.
|
|
||||||
|
|
||||||
| Service | Port | Notes |
|
| Service | Port | Notes |
|
||||||
|---------|------|-------|
|
|---------|------|-------|
|
||||||
| Pelican Panel | 80/443 | panel.paccoco.com, PHP 8.4 + nginx + MariaDB |
|
| PostgreSQL | 5432 | Shared across stacks via `ix-databases_shared-databases` network |
|
||||||
| Wings | 8443 | node1.paccoco.com, game server daemon |
|
| MariaDB | 3306 | Shared across stacks |
|
||||||
| Minecraft | 25565 | Purpur, Java 21, direct port forward |
|
| Redis | 6379 | Shared across stacks |
|
||||||
| N.O.M.A.D. containers | — | 10 containers, start_nomad.sh / stop_nomad.sh |
|
|
||||||
|
## 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 |
|
||||||
|
|||||||
@@ -1,106 +1,81 @@
|
|||||||
# Homelab Expansion Plan
|
# Homelab Expansion Plan
|
||||||
|
|
||||||
## Deployment Order
|
**Status: All 6 phases complete as of 2026-05-06.**
|
||||||
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
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Phase 1 — Notifications (Gotify)
|
## Summary
|
||||||
**Host:** PlausibleDeniability
|
|
||||||
**Stack:** `/mnt/docker-ssd/docker/compose/automation/`
|
|
||||||
**Storage:** appdata on SSD (SQLite backend)
|
|
||||||
**Network:** pangolin (expose as `gotify.paccoco.com`)
|
|
||||||
|
|
||||||
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)
|
## Phase 1 — Notifications & Alerting ✅ COMPLETE
|
||||||
**Host:** PlausibleDeniability
|
|
||||||
**Stack:** `/mnt/docker-ssd/docker/compose/ai/`
|
|
||||||
**Storage:** appdata on SSD
|
|
||||||
|
|
||||||
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)
|
## Phase 2 — AI Stack ✅ COMPLETE
|
||||||
**Host:** PlausibleDeniability
|
|
||||||
**Stack:** `/mnt/docker-ssd/docker/compose/automation/`
|
|
||||||
**Storage:** config on tank, Postgres backend
|
|
||||||
**Network:** pangolin (`n8n.paccoco.com`) + ix-databases_shared-databases
|
|
||||||
|
|
||||||
### Planned Workflows
|
**Goal:** Self-hosted LLM inference with RAG and web search.
|
||||||
- Sonarr/Radarr webhook → Discord + Gotify notification with poster art
|
|
||||||
- Tautulli play start → log to Postgres
|
- **LiteLLM** (4000) — unified proxy to Ollama tiers (N.O.M.A.D. light, Rocinante heavy)
|
||||||
- Nightly watch history → Ollama → weekly digest via Gotify
|
- **OpenWebUI** (8282) — chat UI with RAG, STT, and web search
|
||||||
- Poll Uptime Kuma → cross-reference Netdata → rich alert via Gotify
|
- **Qdrant** (6333/6334) — vector store for RAG
|
||||||
- Gitea commit to truenas-stacks → Gotify notification with Ollama summary
|
- **Whisper** (8786) — CUDA speech-to-text on RTX 2080 Ti
|
||||||
- qBittorrent torrent complete → trigger Sonarr/Radarr rescan
|
- **SearXNG** (8888) — private search backend
|
||||||
- KitchenOwl grocery list change → shopping list via Gotify
|
- **Reranker** — TEI bge-reranker-v2-m3; initially on PD (8787), moved to Serenity (9787) on 2026-05-09
|
||||||
- Donetick task due → Gotify reminder
|
|
||||||
- Long and Low Crafts order → Donetick task + Gotify DM
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Phase 4 — Document Intelligence (Paperless-NGX)
|
## Phase 3 — Workflow Automation ✅ COMPLETE
|
||||||
**Host:** PlausibleDeniability
|
|
||||||
**Network:** pangolin (`paperless.paccoco.com`) + ix-databases_shared-databases
|
|
||||||
|
|
||||||
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)
|
## Phase 4 — Document & Knowledge Management ✅ COMPLETE
|
||||||
**Host:** PlausibleDeniability or N.O.M.A.D.
|
|
||||||
**Storage:** config on SSD (SQLite, write-heavy)
|
**Goal:** Paperless document ingestion and local knowledge base.
|
||||||
**Network:** host networking recommended for device discovery
|
|
||||||
|
- **Paperless-NGX** (8083) deployed on PD
|
||||||
|
- OCR pipeline with automatic tagging
|
||||||
|
- Documents stored on Serenity NFS
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Phase 6 — Observability (Grafana + Prometheus)
|
## Phase 5 — Home Automation ✅ COMPLETE
|
||||||
**Host:** N.O.M.A.D.
|
|
||||||
**Storage:** Prometheus data on hdd-1 or hdd-2
|
|
||||||
|
|
||||||
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 |
|
**Goal:** Full metrics collection and dashboards.
|
||||||
|---|---|---|---|
|
|
||||||
| ROCINANTE | RTX 4090 (24GB) | qwen3:32b / deepseek-r1:32b | Heavy reasoning, long context |
|
- **Prometheus** (9090) — scrapes all services and Docker stats
|
||||||
| PlausibleDeniability | RTX 2080 Ti (11GB) | qwen2.5:14b | General homelab assistant, RAG |
|
- **Grafana** (3000) — dashboards for system health, Docker, and AI usage
|
||||||
| N.O.M.A.D. | GTX 1080 (8GB) | phi4 / llama3.2:3b | Fast local inference |
|
- **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)
|
|
||||||
```
|
|
||||||
|
|||||||
31
docs/servers/ROCINANTE.md
Normal file
31
docs/servers/ROCINANTE.md
Normal file
@@ -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
|
||||||
@@ -1,55 +1,59 @@
|
|||||||
# Serenity
|
# Serenity
|
||||||
|
|
||||||
Unraid NAS and media ingestion server.
|
NAS, media ingestion, and CPU-based AI inference.
|
||||||
|
|
||||||
## Specs
|
## Hardware
|
||||||
- **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
|
|
||||||
|
|
||||||
## Storage
|
| Component | Details |
|
||||||
- `malcolm` pool: RAIDZ1 of 6×10TB HDDs (~40TB usable) — heavily utilized
|
|-----------|---------|
|
||||||
- Cache pool: single Kingston SNV2S 1TB NVMe (ZFS)
|
| **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
|
## Roles
|
||||||
`arrs`, `hotio`, `br0` (macvlan), `bridge`
|
|
||||||
|
|
||||||
## Active Containers
|
- **NAS** — primary storage for Docker volumes, media, and backups via NFS
|
||||||
- **Media:** sonarr, sonarr-anime, radarr, lidarr, readarr, readarr-epub, prowlarr, bazarr, unpackerr
|
- **Media ingestion** — full ARR stack (Sonarr, Radarr, Prowlarr, qBittorrent, etc.)
|
||||||
- **Download:** qBittorrent, GluetunVPN, autobrr, qbit_manage
|
- **Reranker host** — CPU-based TEI reranker for the AI RAG pipeline
|
||||||
- **Notifications:** Notifiarr
|
|
||||||
- **Access:** Wizarr, Newt, dockersocket, Hawser
|
|
||||||
- **Databases:** postgresql15, MariaDB-Official
|
|
||||||
- **Other:** romm, GameVault, shelfmark (port 8084), netdata
|
|
||||||
- **Dead/remove:** Unraid-Cloudflared-Tunnel
|
|
||||||
|
|
||||||
## Backup Strategy
|
## Services
|
||||||
- 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
|
|
||||||
|
|
||||||
## Custom Scripts
|
### NFS Exports
|
||||||
- **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
|
|
||||||
|
|
||||||
## Key Shares
|
| Export | Mount on PD | Purpose |
|
||||||
| Share | Size | Purpose |
|
|--------|-------------|---------|
|
||||||
|-------|------|---------|
|
| `/mnt/user/data` | `/mnt/unraid/data` | General Docker volumes |
|
||||||
| data | 35TB | Media library (NFS-mounted by PD at `/mnt/unraid/data`) |
|
| `/mnt/user/immich` | `/mnt/unraid/immich` | Immich photo library |
|
||||||
| 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 |
|
|
||||||
|
|
||||||
## Pending
|
> **Note:** NFS mounts on PD are **not** automatic at boot. Run after every TrueNAS restart:
|
||||||
- Remove dead Unraid-Cloudflared-Tunnel container
|
> ```bash
|
||||||
- malcolm pool capacity planning (heavily utilized)
|
> 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
|
||||||
|
|||||||
Reference in New Issue
Block a user