#!/bin/bash # backup_restore.sh v3.1 — Poboljšana stabilnost i LFS podrška DATA_DIR="${OPENWEBUI_DATA_DIR:-/data}" HF_REPO="${HF_BACKUP_REPO:-}" HF_TOKEN="${HF_TOKEN:-}" BACKUP_INTERVAL=$(printf '%s' "${HF_BACKUP_INTERVAL_SECONDS:-300}" | tr -d '[:space:]') DB_FILE="webui.db" DB_PATH="${DATA_DIR}/${DB_FILE}" DB_URL="https://huggingface.co/datasets/${HF_REPO}/resolve/main/${DB_FILE}" mkdir -p "$DATA_DIR" if [ -z "$HF_REPO" ] || [ -z "$HF_TOKEN" ]; then echo "[backup] HF_BACKUP_REPO ili HF_TOKEN nisu postavljeni. Backup onemogućen." exit 0 fi do_restore() { local FORCE="${FORCE_RESTORE:-0}" if [ "$FORCE" != "1" ] && [ -f "$DB_PATH" ]; then local SIZE SIZE=$(wc -c < "$DB_PATH" 2>/dev/null || echo 0) # Ako je baza veća od 100KB, pretpostavljamo da je već restorana ili korištena if [ "$SIZE" -gt 100000 ]; then echo "[restore] webui.db postoji (${SIZE} bytes). Preskačem download." echo "[restore] INFO: Ako želiš prisiliti restore, postavi FORCE_RESTORE=1 u Variables." return 0 fi fi echo "[restore] Pokušavam skinuti bazu sa ${HF_REPO}..." local STATUS STATUS=$(curl -s -L -o /tmp/webui_restore.db -w "%{http_code}" -H "Authorization: Bearer ${HF_TOKEN}" "$DB_URL") if [ "$STATUS" = "200" ]; then local DL_SIZE DL_SIZE=$(wc -c < /tmp/webui_restore.db 2>/dev/null || echo 0) if [ "$DL_SIZE" -gt 50000 ]; then cp /tmp/webui_restore.db "$DB_PATH" echo "[restore] USPJEH: Baza restorana (${DL_SIZE} bytes)." else echo "[restore] ERROR: Skinuti fajl je premali (${DL_SIZE} bytes). Vjerojatno LFS pointer." fi else echo "[restore] ERROR: Server vratio status ${STATUS}. Provjeri HF_TOKEN i putanju." fi rm -f /tmp/webui_restore.db } do_backup() { if [ ! -f "$DB_PATH" ]; then return 0; fi local SIZE SIZE=$(wc -c < "$DB_PATH" 2>/dev/null || echo 0) if [ "$SIZE" -lt 10000 ]; then return 0; fi echo "[backup] Pokrećem upload baze (${SIZE} bytes)..." python3 - <