| | #!/usr/bin/env bash |
| | set -euo pipefail |
| |
|
| | export GIT_CONFIG_NOSYSTEM=1 |
| | export HOME=/home/user |
| |
|
| | REPO_URL="https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPO}.git" |
| | DB_PATH="/app/db/webui.db" |
| | ENCRYPTED_DB="webui.db.enc" |
| | TEMP_REPO="/app/db/temp_repo" |
| |
|
| | echo "[sync] Configuring Open-WebUI persistence via GitHub + OpenSSL" |
| |
|
| | mkdir -p /app/db |
| |
|
| | if [ ! -d "$TEMP_REPO/.git" ]; then |
| | echo "[sync] Cloning repo ${GITHUB_REPO}..." |
| | git clone "$REPO_URL" "$TEMP_REPO" |
| | else |
| | echo "[sync] Repo already cloned, pulling latest..." |
| | cd "$TEMP_REPO" && git fetch --all && git reset --hard origin/main && cd - |
| | fi |
| |
|
| | if [ -f "$TEMP_REPO/$ENCRYPTED_DB" ]; then |
| | echo "[sync] Found encrypted DB, decrypting..." |
| | openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 \ |
| | -in "$TEMP_REPO/$ENCRYPTED_DB" \ |
| | -out "$DB_PATH" \ |
| | -k "$ENCRYPTION_KEY" |
| | else |
| | echo "[sync] No DB found in repo, creating empty DB..." |
| | sqlite3 "$DB_PATH" "VACUUM;" |
| | fi |
| |
|
| | ( |
| | while true; do |
| | echo "[sync] Sleeping 60s before next push..." |
| | sleep 60 |
| | if [ -f "$DB_PATH" ]; then |
| | echo "[sync] Encrypting and pushing DB..." |
| | openssl enc -aes-256-cbc -pbkdf2 -iter 100000 \ |
| | -in "$DB_PATH" \ |
| | -out "$TEMP_REPO/$ENCRYPTED_DB" \ |
| | -k "$ENCRYPTION_KEY" |
| |
|
| | cd "$TEMP_REPO" |
| | git config user.email "openwebui@hf.space" |
| | git config user.name "OpenWebUI Backup Bot" |
| | git add "$ENCRYPTED_DB" |
| | git commit -m "Automated backup $(date -u +%Y%m%dT%H%M%SZ)" || echo "[sync] No changes to commit" |
| | git push origin main || echo "[sync] Push failed" |
| | cd - |
| | fi |
| | done |
| | ) & |
| |
|
| | exec ./start.sh |