fix: use file-bind-mount for DB to allow local WAL files
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 43s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 43s
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user