Files
docs/infra/volumes.md
T
fkrebs 40a02f33ef docs: reconcile storage.md + volumes.md with live 2026-07-15 audit
Fixes contradictions found during the CT 104 disk-full incident:
- Arcane: was DECOMMISSIONED 2026-05-26 + local, not "migrated to UNAS"
  (volumes.md and storage.md disagreed).
- arr-stack: fully on UNAS incl. SQLite configs on services/arr-stack/;
  media/downloads on media/ share. Radarr/Sonarr not deployed. Removed
  stale "plan to migrate" rows pointing at local /opt/stacks/arr-stack.
- n8n: local (DB on CT 113), not UNAS.
- Garage: metadata is SQLite (not LMDB); keep off NFS; refreshed bucket
  table with real sizes (82 GB, mostly WAL-G PG backups).
- Marked sunsets: karakeep, memos, litellm, daytona.
- crawl4ai: correct name mcp-crawl4ai, no mounts, cache-growth TODO.
- Added ZFS snapshot note: refquota hides snapshot bloat from container df;
  pre-tier1-backups snapshot held 97.9 GB.
2026-07-15 11:15:53 +02:00

314 lines
12 KiB
Markdown

# Volume Mounts — NUC 14 Docker Stacks
> Every bind mount and named volume across all running containers.
> Last updated: 2026-07-15 (live audit during CT 104 disk-full incident; reconciled with `storage.md`).
## Legend
| Column | Meaning |
|---|---|
| **Type** | `bind` = host directory, `volume` = docker named volume, `tmpfs` = memory |
| **Source** | Host path (bind) or volume name (volume) |
| **Container** | Mount point inside container |
| **UNAS** | `/mnt/pve/unas/services/` target (migrated or planned) |
---
## Infrastructure
### ~~Arcane~~ — DECOMMISSIONED 2026-05-26
> Replaced by Portainer. Compose renamed `/opt/stacks/arcane/docker-compose.yml.DECOMMISSIONED-2026-05-26`; container not running. Its data was **local** (`/opt/stacks/arcane/data`), never UNAS — the earlier "✅ Migrated to `services/arcane`" row was wrong.
### Dozzle — `dozzle`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/opt/stacks/dozzle/dozzle_data` | `/data` | (optional, ephemeral) |
| bind | `/var/run/docker.sock` | `/var/run/docker.sock` | — |
### Homepage — `homepage`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/opt/stacks/homepage/config` | `/app/config` | (keep in stack dir) |
| bind | `/opt/stacks/homepage/icons` | `/app/public/icons` | (keep in stack dir) |
| bind | `/var/run/docker.sock` | `/var/run/docker.sock` | — |
---
## Security
### Pocket ID — `pocketid`
> **CT 110, not CT 104.** Pocket-ID migrated off CT 104 to its own LXC on 2026-05-20.
| Type | Source | Container | Notes |
|---|---|---|---|
| bind | `/opt/stacks/pocketid/data` | `/app/data` | Local zfs on CT 110 — no UNAS mount |
### Vaultwarden — `vaultwarden`
| Type | Source | Container | UNAS |
|---|---|---|---|
| **bind** | **`/mnt/pve/unas/services/vaultwarden`** | **`/data`** | ✅ **Already on UNAS** |
| bind | `/etc/localtime` | `/etc/localtime` | — |
| bind | `/etc/timezone` | `/etc/timezone` | — |
---
## Media — Immich
### Immich Server — `immich_server`
| Type | Source | Container | UNAS |
|---|---|---|---|
| **bind** | **`/mnt/pve/unas/services/immich/encoded-video`** | `/usr/src/app/upload/encoded-video` | ✅ **Already on UNAS** |
| **bind** | **`/mnt/pve/unas/services/immich/profile`** | `/usr/src/app/upload/profile` | ✅ **Already on UNAS** |
| **bind** | **`/mnt/pve/unas/services/immich/thumbs`** | `/usr/src/app/upload/thumbs` | ✅ **Already on UNAS** |
| **bind** | **`/mnt/pve/unas/media/images`** | `/usr/src/app/upload` | ✅ **Already on UNAS** |
| **bind** | **`/mnt/pve/unas/backup/immich`** | `/usr/src/app/upload/backups` | ✅ **Already on UNAS** |
| volume | `7d25f4ac...` (anonymous) | `/data` | (unknown, check) |
### Immich ML — `immich_machine_learning`
| Type | Source | Container | UNAS |
|---|---|---|---|
| volume | `immich_model-cache` | `/cache` | (cache, regenerable) |
| bind | `/dev/bus/usb` | `/dev/bus/usb` | — |
### Immich Postgres — `immich_postgres`
| Type | Source | Container | UNAS |
|---|---|---|---|
| **bind** | **`/opt/stacks/immich/postgres`** | **`/var/lib/postgresql/data`** | ⏳ Plan: `immich/db` |
---
## Media — Downloads / Arr Stack
> **Fully on UNAS** — verified running 2026-07-15. SQLite configs live on `services/arr-stack/` and work fine over NFSv3 (low write rate). Library + downloads on the `media/` share so imports hardlink within one export. Radarr/Sonarr are **not** deployed. All behind gluetun VPN. The old local `/opt/stacks/arr-stack/media` (27 GB) was a pre-migration copy — deleted 2026-07-15.
### RDTClient — `rdtclient`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/mnt/pve/unas/services/arr-stack/rdtclient/config` | `/data/db` | ✅ **On UNAS** (SQLite) |
| bind | `/mnt/pve/unas/media/Torrents` | `/data/downloads` | ✅ **On UNAS** |
### Prowlarr — `prowlarr`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/mnt/pve/unas/services/arr-stack/prowlarr` | `/config` | ✅ **On UNAS** (SQLite config) |
### Audiobookshelf — `audiobookshelf`
> In compose; config on `services/arr-stack/audiobookshelf`, media on the `media/` share.
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/mnt/pve/unas/services/arr-stack/audiobookshelf` | `/config` | ✅ **On UNAS** |
| bind | `/mnt/pve/unas/media/audiobooks` | `/audiobooks` | ✅ **On UNAS** |
| bind | `/mnt/pve/unas/media/ebooks` | `/ebooks` | ✅ **On UNAS** |
| bind | `/mnt/pve/unas/media/podcasts` | `/podcasts` | ✅ **On UNAS** |
### ShelfArr — `shelfarr`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/mnt/pve/unas/services/arr-stack/shelfarr/storage` | `/rails/storage` | ✅ **On UNAS** (SQLite) |
| bind | `/mnt/pve/unas/media/audiobooks` | `/audiobooks` | ✅ (shared) |
| bind | `/mnt/pve/unas/media/ebooks` | `/ebooks` | ✅ (shared) |
| bind | `/mnt/pve/unas/media/Torrents` | `/downloads` | ✅ (shared) |
### Flaresolverr — `flaresolverr`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/var/lib/flaresolver` | `/config` | (cache, regenerable) |
---
## AI Stack
### ~~LiteLLM~~ — SUNSET 2026-05-26
> Replaced by Bifrost (`ai.nuclide.systems`). Service block commented out in `/opt/stacks/ai/docker-compose.yml`; `litellm-config` retained as history only. LiteLLM DB container removed.
### ~~LobeHub~~ — DECOMMISSIONED 2026-05-26
LobeChat compose renamed `.DECOMMISSIONED-lobehub-2026-05-26.yml`. Volumes below are orphaned — clean up after confirming no data needed.
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/opt/stacks/ai/lobehub/data` | `/var/lib/postgresql/data` | 🗑️ orphaned — decommissioned |
### ~~LobeHub Redis~~ — DECOMMISSIONED 2026-05-26
| Type | Source | Container | UNAS |
|---|---|---|---|
| volume | `nuc-ai-core_redis_data` | `/data` | 🗑️ orphaned — decommissioned |
### ~~LobeHub RustFS~~ — DECOMMISSIONED 2026-05-26
| Type | Source | Container | UNAS |
|---|---|---|---|
| volume | `nuc-ai-core_rustfs-data` | `/data` | 🗑️ orphaned — decommissioned |
### SearXNG — `searxng`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/opt/stacks/ai/searxng` | `/etc/searxng` | (keep in stack dir) |
| volume | `bb5bb182...` (anonymous) | `/var/cache/searxng` | (cache, regenerable) |
### SearXNG Redis — `redis-searxng`
| Type | Source | Container | UNAS |
|---|---|---|---|
| volume | `f9c3c386...` (anonymous) | `/data` | (ephemeral, stay) |
### SAIA Image Proxy — `nuc-ai-core-saia-image-proxy-1`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/opt/stacks/ai/saia-image-proxy` | `/app` | (keep in stack dir) |
### Crawl4AI — `mcp-crawl4ai`
> `docker run` MCP client (Bifrost) on `ai-internal`, **no persistent mounts**. Cache lives in the container writable layer (`/home/appuser/.crawl4ai`, SQLite) and grew to ~40 GB before the 2026-07-15 reset. Recreated with `--shm-size 1g`. **TODO:** bind-mount `.crawl4ai` to a capped local dir or purge periodically — it refills the disk otherwise.
---
## Documents
### Paperless-ngx Webserver — `paperless-ngx-webserver-1`
| Type | Source | Container | UNAS |
|---|---|---|---|
| **bind** | **`/mnt/pve/unas/media/documents/public/paperless-ngx/consume`** | `/usr/src/paperless/consume` | ✅ **Already on UNAS** |
| **bind** | **`/mnt/pve/unas/media/documents/public/paperless-ngx/export`** | `/usr/src/paperless/export` | ✅ **Already on UNAS** |
| **bind** | **`/mnt/pve/unas/media/documents/public/paperless-ngx/library`** | `/usr/src/paperless/media` | ✅ **Already on UNAS** |
| volume | `paperless-ngx_data` | `/usr/src/paperless/data` | ⏳ Plan: `paperless-ngx/data` |
### Paperless-ngx DB — `paperless-ngx-db-1`
| Type | Source | Container | UNAS |
|---|---|---|---|
| volume | `paperless-ngx_pgdata` | `/var/lib/postgresql/data` | ⏳ Plan: `paperless-ngx/pgdata` |
### Paperless-ngx Broker — `paperless-ngx-broker-1`
| Type | Source | Container | UNAS |
|---|---|---|---|
| volume | `paperless-ngx_redisdata` | `/data` | (ephemeral, stay) |
### Paperless AI — `paperless-ai`
| Type | Source | Container | UNAS |
|---|---|---|---|
| **bind** | **`/mnt/pve/unas/services/paperless-ai`** | **`/app/data`** | ✅ **Already on UNAS** |
---
## Productivity & Bookmarks
### ~~Memos~~ + ~~Karakeep~~ — SUNSET 2026-07-10
> Both fully wiped (service, containers, local + UNAS data, Postgres DB, Traefik routes, OIDC clients). See [[CHANGELOG]] and `sunset-karakeep-memos`. Do not restart. One residual: orphan Garage `memos` bucket needs a repair pass.
---
## Automation
### n8n — `n8n`
> Data is **local**, not UNAS — reverted after a failed PG-migration attempt. The actual DB is `shared-postgres` (CT 113); `.n8n` holds config/creds only. A stale UNAS copy at `services/n8n` may linger.
| Type | Source | Container | Notes |
|---|---|---|---|
| bind | `/opt/stacks/n8n/data` | `/home/node/.n8n` | 🗄️ Local NVMe |
| bind | `/opt/stacks/n8n/hooks.js` | `/home/node/hooks.js` | (keep in stack dir) |
---
## DevOps
### ~~Daytona~~ — DECOMMISSIONED 2026-05-23
> Never fully deployed; compose renamed `.DECOMMISSIONED-2026-05-23`. Orphaned `daytona-minimal_db_data` volume was cleaned up (verified 2026-05-22).
---
## Tracking
### Traccar — `traccar`
| Type | Source | Container | UNAS |
|---|---|---|---|
| **bind** | **`/mnt/pve/unas/services/traccar/data`** | `/opt/traccar/data` | ✅ **Already on UNAS** |
| **bind** | **`/mnt/pve/unas/services/traccar/logs`** | `/opt/traccar/logs` | ✅ **Already on UNAS** |
| **bind** | **`/mnt/pve/unas/services/traccar/traccar.xml`** | `/opt/traccar/conf/traccar.xml` | ✅ **Already on UNAS** |
---
## VPN
### Gluetun — `vpn_gluetun`
| Type | Source | Container | UNAS |
|---|---|---|---|
| **bind** | **`/mnt/pve/unas/services/gluetun/data`** | **`/gluetun`** | ✅ **Already on UNAS** |
---
## Shared Infrastructure
### Shared PostgreSQL — `shared-postgres`
| Type | Source | Container | Notes |
|---|---|---|---|
| volume | `shared-db_shared-pgdata` | `/var/lib/postgresql/data` | 🗄️ Local NVMe (not NFS) |
### Garage S3 — `garage`
> Moved off NFS to local zfs on 2026-05-19 after a WAL-G outage. **Keep local** — metadata is SQLite (corrupts over NFS) and it now stores WAL-G backups for the whole PG fleet. See `storage.md` for bucket breakdown.
| Type | Source | Container | Notes |
|---|---|---|---|
| bind | `/opt/stacks/shared-db/garage/data` | `/var/lib/garage/data` | S3 object data — local NVMe (82 GB, mostly WAL-G) |
| bind | `/opt/stacks/shared-db/garage/meta` | `/var/lib/garage/meta` | S3 metadata (**SQLite**, `db_engine = sqlite`) — local NVMe |
---
## Stacks Not Running (Compose Config Only)
### Streamio — `streamio`
| Type | Source | Container | UNAS |
|---|---|---|---|
| **bind** | **`/mnt/pve/unas/services/stremio`** | **`/root/.stremio-server`** | ✅ **Already on UNAS** |
### Qdrant — `qdrant_scientific`
| Type | Source | Container | UNAS |
|---|---|---|---|
| bind | `/opt/stacks/qdrant/qdrant_storage` | `/qdrant/storage` | ⏳ Plan: `qdrant/` |
---
## Summary: Migration Status (reconciled 2026-07-15)
| Status | Count | Services |
|---|---|---|
| ✅ On UNAS | 8 | gluetun, immich*(4 media dirs), paperless-ai, stremio, traccar*(3), vaultwarden, paperless-docs*(3), coder |
| ✅ On UNAS incl. SQLite configs | 1 | arr-stack (prowlarr, rdtclient, shelfarr, audiobookshelf + media/downloads) |
| 🔷 Shared infrastructure (local) | 2 | shared-postgres (local volume), garage (local NVMe, SQLite meta — keep local) |
| 🗄️ Reverted to local | 2 | n8n (DB on CT 113), traccar data-dir |
| 📋 Own CT, local only | 1 | pocketid (CT 110, no UNAS) |
| ⏳ Phase 2 planned (PG consolidation) | 2 | immich → shared-postgres, paperless → shared-postgres |
| 🗑️ Sunset / decommissioned | many | karakeep + memos (2026-07-10); litellm, mcp-gateway, arcane, lobehub*(3), homepage (2026-05-2x); daytona (2026-05-23) |
| 📋 Keep local | ~4 | dozzle, searxng-config, saia-image-proxy, flaresolverr |
| 🧠 Cache (stay) | ~4 | immich_model-cache, paperless-ngx redis, searxng-redis, mcp-crawl4ai writable layer |