diff --git a/entrypoint.sh b/entrypoint.sh index 7be6f52..c45a9ac 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -81,7 +81,6 @@ start_app() { mkdir -p /shared_data/plugins /shared_data/cache /shared_data/backup /shared_data/artist_images /shared_data/artwork # SEEDING LOGIC: If DB doesn't exist in cluster, restore from backup - # LiteFS 0.5.x: check if DB file exists in FUSE mount if [ ! -f /data/navidrome.db ]; then echo "Database /data/navidrome.db not found. Looking for backups to seed..." local latest_backup=$(ls -t /shared_data/backup/navidrome.db_*.bak 2>/dev/null | head -n 1) @@ -102,28 +101,25 @@ start_app() { db_count=$((db_count + 1)) done - # Setup local data folder with symlinks - # This avoids "mkdir /data/artwork: operation not permitted" - # and avoids SMB symlink/mount issues + # Setup local data folder with BIND MOUNT for the DB + # This allows SQLite to create -wal/-shm files in the local writable directory + # while the main DB file is managed by LiteFS. rm -rf /local/navidrome_data mkdir -p /local/navidrome_data - ln -s /data/navidrome.db /local/navidrome_data/navidrome.db - ln -s /shared_data/cache /local/navidrome_data/cache - ln -s /shared_data/plugins /local/navidrome_data/plugins - ln -s /shared_data/artwork /local/navidrome_data/artwork - ln -s /shared_data/backup /local/navidrome_data/backup + touch /local/navidrome_data/navidrome.db + mount --bind /data/navidrome.db /local/navidrome_data/navidrome.db # Configuration export ND_DATAFOLDER="/local/navidrome_data" - export ND_CACHEFOLDER="/local/navidrome_data/cache" - export ND_BACKUP_PATH="/local/navidrome_data/backup" - export ND_PLUGINS_FOLDER="/local/navidrome_data/plugins" + export ND_CACHEFOLDER="/shared_data/cache" + export ND_BACKUP_PATH="/shared_data/backup" + export ND_PLUGINS_FOLDER="/shared_data/plugins" export ND_ARTISTIMAGEFOLDER="artist_images" /app/navidrome & NAVIDROME_PID=$! - echo "Navidrome running (PID: $NAVIDROME_PID) with DataFolder at /local/navidrome_data" + echo "Navidrome running (PID: $NAVIDROME_PID) with DataFolder at /local/navidrome_data (DB bind-mounted)" } # Stop Navidrome @@ -133,6 +129,7 @@ stop_app() { kill -SIGTERM "${NAVIDROME_PID}" wait "${NAVIDROME_PID}" 2>/dev/null || true NAVIDROME_PID=0 + umount /local/navidrome_data/navidrome.db 2>/dev/null || true fi } diff --git a/litefs.yml b/litefs.yml index 0653aaf..279a170 100644 --- a/litefs.yml +++ b/litefs.yml @@ -13,7 +13,7 @@ lease: advertise-url: "http://${ADVERTISE_IP}:20202" consul: url: "${CONSUL_URL}" - key: "litefs/navidrome-v6" + key: "litefs/navidrome-v7" ttl: "30s" lock-delay: "5s"