#!/bin/bash set -e # Use /tmp for all writable data export DATA_DIR="${DATA_DIR:-/tmp/app/data}" export HF_STORAGE_REPO="${HF_STORAGE_REPO:-nxdev-org/open-webui-storage}" export SYNC_INTERVAL="${SYNC_INTERVAL:-300}" # Set all HuggingFace and cache directories to /tmp export HF_HOME="/tmp/hf_cache" export HUGGINGFACE_HUB_CACHE="/tmp/hf_cache" export TRANSFORMERS_CACHE="/tmp/hf_cache" export SENTENCE_TRANSFORMERS_HOME="/tmp/hf_cache" # Override Open WebUI environment variables export STATIC_DIR="/tmp/static" export UPLOAD_DIR="/tmp/uploads" echo "Starting Open WebUI with HF Dataset persistence..." echo "Data directory: $DATA_DIR" echo "HF Repository: $HF_STORAGE_REPO" echo "HF Cache: $HF_HOME" # Create all necessary directories #mkdir -p "$DATA_DIR" "$HF_HOME" "$STATIC_DIR" "$UPLOAD_DIR" #mkdir -p "$DATA_DIR" # && chmod 777 "$DATA_DIR" #mkdir -p "$HF_HOME" && chmod 777 "$HF_HOME" #mkdir -p "$STATIC_DIR" && chmod 777 "$STATIC_DIR" #mkdir -p "$UPLOAD_DIR" && chmod 777 "$UPLOAD_DIR" # Test write permissions #if touch "$DATA_DIR/test" 2>/dev/null; then # rm "$DATA_DIR/test" # echo "Data directory is writable" #else # echo "Warning: Data directory may not be writable" #fi # Check if HF_TOKEN is set if [ -z "$HF_TOKEN" ]; then echo "Warning: HF_TOKEN not set. Sync functionality will be limited." else echo "HF_TOKEN is set, proceeding with sync..." fi # Download existing data on startup echo "Syncing data from Hugging Face..." python3 /app/sync_storage.py download # Function to handle graceful shutdown cleanup() { echo "Shutting down gracefully..." # Upload final data state # if [ -n "$HF_TOKEN" ]; then # echo "Uploading final data state..." # python3 /app/sync_storage.py upload # fi # Kill background processes #kill $SYNC_PID 2>/dev/null || true #kill $TASK_PID 2>/dev/null || true exit 0 } # Set up signal handlers trap cleanup SIGTERM SIGINT #trap "echo 'Cleanup triggered'; exit 0" SIGTERM SIGINT # Background sync function background_sync() { if [ -n "$HF_TOKEN" ]; then while true; do sleep $SYNC_INTERVAL echo "Periodic sync to Hugging Face..." python3 /app/sync_storage.py upload done else echo "Skipping background sync - no HF_TOKEN" while true; do sleep 3600 done fi } # Start background sync background_sync & SYNC_PID=$! # Start Open WebUI echo "Starting caddy..." # Start readeck in background #cp -r /app/openlist /tmp/ #cd /tmp/openlist && /app/openlist/openlist start & # npm install --prefix /app/Gemini-CLI-2-API git clone https://github.com/justlovemaki/Gemini-CLI-2-API.git /tmp/Gemini-CLI-2-API cd /tmp/Gemini-CLI-2-API&& npm install && node src/api-server.js & /app/caddy/caddy run /app/Caddyfile & TASK_PID=$! # Wait for Open WebUI process wait $TASK_PID