# Dockerstack Storage Notes

## Local SSD
Use `/docker/...` for:
- Docker root (`/docker/docker-data`)
- GPU/model storage
- SQLite-backed apps
- Apps that chown on startup
- Write-heavy DB/search storage

Examples:
- `/mnt/docker-ssd/docker/docker-data`
- `/mnt/docker-ssd/docker/appdata/ollama`
- `/mnt/docker-ssd/docker/appdata/openwebui`
- `/mnt/docker-ssd/docker/appdata/immich`
- `/mnt/docker-ssd/docker/appdata/immich-ml`
- `/mnt/docker-ssd/docker/appdata/plex`
- `/mnt/docker-ssd/docker/appdata/tautulli`
- `/mnt/docker-ssd/docker/appdata/audiobookshelf`
- `/mnt/docker-ssd/docker/appdata/seerr`
- `/mnt/docker-ssd/docker/appdata/dockhand`
- `/mnt/docker-ssd/docker/appdata/rackpeek`
- `/mnt/docker-ssd/docker/compose/dev/rackpeek` (git-tracked RackPeek inventory source)
- `/mnt/docker-ssd/docker/appdata/shlink`
- `/mnt/docker-ssd/docker/appdata/gitea`
- `/mnt/docker-ssd/docker/appdata/netdata`
- `/mnt/docker-ssd/docker/appdata/tailscale`
- `/mnt/docker-ssd/docker/appdata/uptime-kuma`
- `/mnt/docker-ssd/docker/databases/postgres`
- `/mnt/docker-ssd/docker/databases/mariadb`
- `/mnt/docker-ssd/docker/databases/redis`

## TrueNAS NFS
Use `/mnt/tank/docker/...` for:
- Normal appdata
- Uploads
- Non-fussy config and data
- Backups
- Downloads

Examples:
- `/mnt/tank/docker/appdata/homepage`
- `/mnt/tank/docker/appdata/newt`
- `/mnt/tank/docker/appdata/kitchenowl`
- `/mnt/tank/docker/appdata/donetick`
- `/mnt/tank/docker/appdata/qui`
- `/mnt/tank/docker/appdata/calibre-web-automated`
- `/mnt/tank/docker/backups`
- `/mnt/tank/docker/downloads`

## Unraid NFS
Use `/mnt/unraid/...` for media and shared bulk content only:
- `/mnt/unraid/data/media/` — Plex libraries, books, etc.
- `/mnt/unraid/immich` — Immich photo/video storage

## Rules Learned
- SQLite apps and apps that write logs aggressively should prefer local SSD.
- Database/search/model-heavy workloads should prefer local SSD.
- General config and less write-sensitive appdata can live on TrueNAS NFS.
- Media should stay on Unraid mounts.
- SQLite on ZFS with nfsv4 ACLs will always fail — move to SSD or use Postgres.
- Apps with auto-upgrade features that use bind mounts: pre-create all source directories manually on TrueNAS to prevent Docker from trying to create them at the read-only root.
