3.4 KiB
3.4 KiB
Homelab Architecture Overview
Primary Docker Host
Host: PlausibleDeniability (TrueNAS Scale)
Production Docker workloads run on PlausibleDeniability via standalone Docker Compose stacks. TrueNAS Apps (ix-app format) have been fully migrated to compose stacks.
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
Stack directories:
databases/= shared-postgres, shared-mariadb, shared-redis — deploy FIRSTinfrastructure/= newt, homepage, uptime-kuma, dockhand, netdata, tailscale — deploy SECONDmedia/= plex, tautulli, audiobookshelf, seerr, calibre-web-automatedphotos/= immich server + machine learninghome/= kitchenowl, donetick, dakboard bridge, shlink, shlink-web-client, quidev/= gitea, rackpeekai/= ollama, openwebuimeshtastic/= meshmonitor, mqtt-proxy, tileserver, meshtastic-map
Storage Model
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
Notable appdata on SSD:
- plex, tautulli, audiobookshelf, seerr, dockhand, rackpeek
- immich, immich-ml, ollama, openwebui
- shlink, gitea, netdata, tailscale, uptime-kuma
TrueNAS Pool (tank)
Mounted at: /mnt/tank
- General appdata:
/mnt/tank/docker/appdata/ - Backups:
/mnt/tank/docker/backups/ - Downloads:
/mnt/tank/docker/downloads/
Notable appdata on tank:
- homepage, newt, dockhand (config only)
- kitchenowl, donetick, qui
- calibre-web-automated config
Unraid NFS
Mounted at: /mnt/unraid
- Media libraries:
/mnt/unraid/data/media/ - Immich media:
/mnt/unraid/immich
Networks
ix-databases_shared-databases— created by databases stack; project nameix-databasesset in composepangolin— created by newt at runtime; used by all externally exposed services
Active Stacks (as of 2026-05-05)
databases/
- shared-postgres (immich-optimized image with vectorchord + pgvector)
- shared-mariadb
- shared-redis
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-databasesto maintain network name compatibility