Spaces:
Paused
Paused
File size: 3,435 Bytes
2d27ef4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #!/bin/bash
set -e
# βββ Config βββββββββββββββββββββββββββββββββββββββββββββββββββ
BACKUP_DATASET="${HF_BACKUP_DATASET:-soloew/entrypoint-backup}"
DB_PATH="/app/data/kuma.db"
BACKUP_PATH="/tmp/kuma-backup.db"
BACKUP_INTERVAL="${BACKUP_INTERVAL_MINUTES:-10}"
# βββ Validate HF token βββββββββββββββββββββββββββββββββββββββ
if [ -z "$HF_TOKEN" ]; then
echo "[WARN] HF_TOKEN not set β backups and restores will fail."
fi
# βββ Restore DB from dataset on startup ββββββββββββββββββββββ
echo "[entrypoint] Restoring database from dataset $BACKUP_DATASET ..."
if hf download "$BACKUP_DATASET" kuma.db --local-dir /tmp/hf-restore 2>/dev/null; then
if [ -f /tmp/hf-restore/kuma.db ]; then
mkdir -p /app/data
cp /tmp/hf-restore/kuma.db "$DB_PATH"
chown node:node "$DB_PATH" 2>/dev/null || true
echo "[entrypoint] Database restored successfully."
else
echo "[entrypoint] No backup found in dataset β starting fresh."
fi
else
echo "[entrypoint] Could not download backup β starting fresh."
fi
# βββ Backup function βββββββββββββββββββββββββββββββββββββββββ
backup_db() {
if [ ! -f "$DB_PATH" ]; then
echo "[backup] No database file found, skipping."
return
fi
echo "[backup] Creating consistent SQLite backup..."
sqlite3 "$DB_PATH" ".backup '$BACKUP_PATH'"
echo "[backup] Uploading to $BACKUP_DATASET ..."
if hf upload "$BACKUP_DATASET" "$BACKUP_PATH" kuma.db \
--commit-message "Automated backup $(date -u '+%Y-%m-%d %H:%M:%S UTC')" 2>&1; then
echo "[backup] Upload complete."
else
echo "[backup] Upload FAILED."
fi
rm -f "$BACKUP_PATH"
}
# βββ Schedule cron for periodic backups βββββββββββββββββββββββ
echo "[entrypoint] Scheduling backups every ${BACKUP_INTERVAL} minutes."
CRON_JOB="*/${BACKUP_INTERVAL} * * * * HF_TOKEN=\"$HF_TOKEN\" HF_BACKUP_DATASET=\"$BACKUP_DATASET\" /backup.sh >> /proc/1/fd/1 2>&1"
# Write the backup script (cron can't run inline bash easily)
cat > /backup.sh << 'BACKUP_EOF'
#!/bin/bash
BACKUP_DATASET="${HF_BACKUP_DATASET:-soloew/entrypoint-backup}"
DB_PATH="/app/data/kuma.db"
BACKUP_PATH="/tmp/kuma-backup.db"
if [ ! -f "$DB_PATH" ]; then
echo "[backup] No database file found, skipping."
exit 0
fi
echo "[backup] $(date -u '+%H:%M:%S UTC') Creating SQLite backup..."
sqlite3 "$DB_PATH" ".backup '$BACKUP_PATH'"
echo "[backup] Uploading to $BACKUP_DATASET ..."
hf upload "$BACKUP_DATASET" "$BACKUP_PATH" kuma.db \
--commit-message "Automated backup $(date -u '+%Y-%m-%d %H:%M:%S UTC')" 2>&1
echo "[backup] Done."
rm -f "$BACKUP_PATH"
BACKUP_EOF
chmod +x /backup.sh
echo "$CRON_JOB" | crontab -
service cron start
# βββ Run initial backup in background after 60s ββββββββββββββ
( sleep 60 && backup_db ) &
# βββ Start Uptime Kuma βββββββββββββββββββββββββββββββββββββββ
echo "[entrypoint] Starting Uptime Kuma..."
exec node server/server.js
|