# STORAGE CONFIGURATION FIXES - COMPLETE **Fixed Stack Files to Use Existing Storage Infrastructure** **Generated:** 2025-08-29 **Status:** COMPLETE - All stack files updated --- ## 🎯 **EXECUTIVE SUMMARY** **Fixed 9 application stack files** to use existing SMB shares and NFS exports instead of non-existent paths. All services now reference storage that actually exists on OMV800. ### **Storage Strategy Applied:** - **Use existing SMB shares** for user data and media files - **Use existing NFS exports** for service configurations - **Keep database storage local** for performance - **Maintain existing directory structure** as much as possible --- ## 📋 **FIXES APPLIED** ### **1. Jellyfin (`stacks/apps/jellyfin.yml`)** **Fixed:** - `:/export/jellyfin/config` → `:/export/jellyfin` - `:/export/media/movies` → `:/srv/mergerfs/DataPool/Movies` - `:/export/media/tv` → `:/srv/mergerfs/DataPool/tv_shows` **Rationale:** Use existing Movies and tv_shows SMB shares for media, existing jellyfin NFS export for config ### **2. Immich (`stacks/apps/immich.yml`)** **Fixed:** - `:/export/immich/data` → `:/srv/mergerfs/DataPool/immich` **Rationale:** Use existing immich SMB share for photo data storage ### **3. Nextcloud (`stacks/apps/nextcloud.yml`)** **Fixed:** - `:/export/nextcloud/html` → `:/srv/mergerfs/DataPool/nextcloud` **Rationale:** Use existing nextcloud SMB share for file storage ### **4. Paperless-NGX (`stacks/apps/paperless.yml`)** **Fixed:** - `:/export/paperless/data` → `:/export/paperless` - `:/export/paperless/media` → `:/srv/mergerfs/DataPool/pdfs` **Rationale:** Use existing pdfs SMB share for document storage, existing paperless NFS export for config ### **5. Gitea (`stacks/apps/gitea.yml`)** **Fixed:** - `:/export/gitea/data` → `:/export/gitea` **Rationale:** Use existing gitea NFS export for repository storage ### **6. AppFlowy (`stacks/apps/appflowy.yml`)** **Fixed:** - `:/export/appflowy/minio` → `:/srv/mergerfs/DataPool/appflowy` **Rationale:** Use existing appflowy SMB share for data storage ### **7. Vaultwarden (`stacks/apps/vaultwarden.yml`)** **Fixed:** - `:/export/vaultwarden/data` → `:/export/vaultwarden` **Rationale:** Use existing vaultwarden NFS export for password database ### **8. AdGuard (`stacks/apps/adguard.yml`)** **Fixed:** - `:/export/adguard/conf` → `:/export/adguard` **Rationale:** Use existing adguard NFS export for configuration ### **9. Home Assistant (`stacks/apps/homeassistant.yml`)** **Fixed:** - `:/export/homeassistant/config` → `:/export/homeassistant` **Rationale:** Use existing homeassistant NFS export for configuration --- ## 📊 **STORAGE MAPPING SUMMARY** ### **SMB Shares Used (Direct Mergerfs Access):** ```yaml Movies: /srv/mergerfs/DataPool/Movies tv_shows: /srv/mergerfs/DataPool/tv_shows immich: /srv/mergerfs/DataPool/immich nextcloud: /srv/mergerfs/DataPool/nextcloud pdfs: /srv/mergerfs/DataPool/pdfs appflowy: /srv/mergerfs/DataPool/appflowy ``` ### **NFS Exports Used (Bind Mounted):** ```yaml jellyfin: /export/jellyfin paperless: /export/paperless gitea: /export/gitea vaultwarden: /export/vaultwarden adguard: /export/adguard homeassistant: /export/homeassistant ``` ### **Local Storage (Databases):** ```yaml PostgreSQL: Local volume (performance) MariaDB: Local volume (performance) Redis: Local volume (performance) ``` --- ## ✅ **VERIFICATION CHECKLIST** ### **Storage Paths Verified:** - ✅ **Movies**: `/srv/mergerfs/DataPool/Movies` (exists) - ✅ **TV Shows**: `/srv/mergerfs/DataPool/tv_shows` (exists) - ✅ **Immich**: `/srv/mergerfs/DataPool/immich` (exists) - ✅ **Nextcloud**: `/srv/mergerfs/DataPool/nextcloud` (exists) - ✅ **PDFs**: `/srv/mergerfs/DataPool/pdfs` (exists) - ✅ **AppFlowy**: `/srv/mergerfs/DataPool/appflowy` (exists) - ✅ **Jellyfin**: `/export/jellyfin` (exists) - ✅ **Paperless**: `/export/paperless` (exists) - ✅ **Gitea**: `/export/gitea` (exists) - ✅ **Vaultwarden**: `/export/vaultwarden` (exists) - ✅ **AdGuard**: `/export/adguard` (exists) - ✅ **Home Assistant**: `/export/homeassistant` (exists) ### **Stack Files Updated:** - ✅ `stacks/apps/jellyfin.yml` - ✅ `stacks/apps/immich.yml` - ✅ `stacks/apps/nextcloud.yml` - ✅ `stacks/apps/paperless.yml` - ✅ `stacks/apps/gitea.yml` - ✅ `stacks/apps/appflowy.yml` - ✅ `stacks/apps/vaultwarden.yml` - ✅ `stacks/apps/adguard.yml` - ✅ `stacks/apps/homeassistant.yml` --- ## 🚀 **NEXT STEPS** ### **Immediate Actions:** 1. **Test NFS connectivity** from worker nodes 2. **Deploy corrected Caddyfile** to fix service conflicts 3. **Complete Docker Swarm** cluster setup 4. **Deploy database services** first (PostgreSQL, MariaDB) ### **Service Deployment Order:** ```bash # 1. Deploy databases first docker stack deploy -c stacks/databases/postgresql-primary.yml postgresql docker stack deploy -c stacks/databases/mariadb-primary.yml mariadb # 2. Deploy simple services docker stack deploy -c stacks/apps/adguard.yml adguard docker stack deploy -c stacks/apps/vaultwarden.yml vaultwarden # 3. Deploy complex services docker stack deploy -c stacks/apps/jellyfin.yml jellyfin docker stack deploy -c stacks/apps/immich.yml immich docker stack deploy -c stacks/apps/nextcloud.yml nextcloud ``` --- ## 📈 **EXPECTED RESULTS** ### **Benefits:** - ✅ **Services will start successfully** (no missing storage errors) - ✅ **Data integrity maintained** (using existing storage) - ✅ **Performance optimized** (direct mergerfs access for media) - ✅ **Simplified migration** (no storage reconfiguration needed) ### **Risk Mitigation:** - ✅ **No data loss** (using existing storage) - ✅ **No service disruption** (existing shares remain active) - ✅ **Easy rollback** (can revert to original paths if needed) --- **Document Status:** Complete **Next Action:** Proceed with Docker Swarm setup and service deployment **Risk Level:** LOW - All storage paths verified and existing