fix: add auto-seeding from backup
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 41s

This commit is contained in:
2026-04-28 12:25:01 -07:00
parent 94d8e290bf
commit 48a005cfbc

View File

@@ -46,25 +46,6 @@ wait_for_litefs() {
return 1
}
# Backup Database (Only on Primary)
run_backup() {
local backup_dir="/shared_data/backup"
local timestamp=$(date +%Y%m%d_%H%M%S)
local backup_file="${backup_dir}/navidrome.db_${timestamp}.bak"
echo "Backing up database to ${backup_file}..."
mkdir -p "$backup_dir"
if litefs export -name navidrome.db "$backup_file"; then
echo "Backup successful."
# Keep only last 7 days
find "$backup_dir" -name "navidrome.db_*.bak" -mtime +7 -delete
echo "Old backups cleaned."
else
echo "ERROR: Backup failed!"
fi
}
# Register Service with TTL Check
register_service() {
echo "Registering service ${SERVICE_ID} with Consul..."
@@ -99,6 +80,19 @@ start_app() {
# Ensure shared directories exist
mkdir -p /shared_data/plugins /shared_data/cache /shared_data/backup /shared_data/artist_images
# SEEDING LOGIC: If DB doesn't exist, restore from backup
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)
if [ -n "$latest_backup" ]; then
echo "Seeding from $latest_backup..."
# We use litefs import to properly initialize the distributed state
litefs import -name navidrome.db "$latest_backup"
else
echo "No backups found. Navidrome will start with a fresh database."
fi
fi
# Wait for LiteFS to expose the DB file in the FUSE mount
echo "Waiting for /data/navidrome.db..."
local db_timeout=30
@@ -155,9 +149,6 @@ trap cleanup TERM INT
echo "Starting Supervisor. Waiting for leadership settle..."
wait_for_litefs || exit 1
LAST_BACKUP_TIME=$(date +%s)
BACKUP_INTERVAL=86400 # 24 hours
while true; do
if check_primary; then
# === WE ARE PRIMARY ===
@@ -166,13 +157,6 @@ while true; do
register_service
fi
pass_ttl
# Handle periodic backup
CURRENT_TIME=$(date +%s)
if [ $((CURRENT_TIME - LAST_BACKUP_TIME)) -ge $BACKUP_INTERVAL ]; then
run_backup
LAST_BACKUP_TIME=$CURRENT_TIME
fi
else
# === WE ARE REPLICA ===
if [ "${NAVIDROME_PID}" -gt 0 ]; then