entrypoint / entrypoint.sh
mesherher's picture
Upload folder using huggingface_hub
2d27ef4 verified
Raw History Blame Contribute Delete
3.44 kB
#!/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