Spaces:
Paused
Paused
Download entrypoint.sh from mesherher/entrypoint: direct link, hf CLI and curl.
- Browser
- Download file 3.44 kB
-
https://huggingface.co/spaces/mesherher/entrypoint/resolve/main/entrypoint.sh
- Command line
-
hf download hf://spaces/mesherher/entrypoint/entrypoint.sh
-
curl -L -o entrypoint.sh https://huggingface.co/spaces/mesherher/entrypoint/resolve/main/entrypoint.sh
3.44 kB
| 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 | |