Spaces:
Paused
Paused
| # ============================================================================== | |
| # Open Notebook - HuggingFace Spaces Start Script | |
| # Initializes directories, sets defaults, and launches supervisord | |
| # ============================================================================== | |
| set -e | |
| echo "==============================================" | |
| echo " Open Notebook - HuggingFace Spaces" | |
| echo "==============================================" | |
| echo "" | |
| # ============================================================================== | |
| # 1. Create required directories | |
| # ============================================================================== | |
| echo "[INIT] Creating directories..." | |
| mkdir -p /data /app/data /tmp/nginx/client_body /tmp/nginx/proxy \ | |
| /tmp/nginx/fastcgi /tmp/nginx/uwsgi /tmp/nginx/scgi \ | |
| /var/log/supervisor 2>/dev/null || true | |
| # ============================================================================== | |
| # 2. Set default environment variables if not provided via HF Secrets | |
| # ============================================================================== | |
| export SURREAL_URL="${SURREAL_URL:-ws://localhost:8000/rpc}" | |
| export SURREAL_USER="${SURREAL_USER:-root}" | |
| export SURREAL_PASSWORD="${SURREAL_PASSWORD:-root}" | |
| export SURREAL_NAMESPACE="${SURREAL_NAMESPACE:-open_notebook}" | |
| export SURREAL_DATABASE="${SURREAL_DATABASE:-open_notebook}" | |
| export OPEN_NOTEBOOK_ENCRYPTION_KEY="${OPEN_NOTEBOOK_ENCRYPTION_KEY:-hf-spaces-default-key-change-me}" | |
| export TIKTOKEN_CACHE_DIR="${TIKTOKEN_CACHE_DIR:-/app/tiktoken-cache}" | |
| # ============================================================================== | |
| # 3. Verify critical binaries | |
| # ============================================================================== | |
| echo "[INIT] Checking SurrealDB..." | |
| surreal version 2>/dev/null && echo "[OK] SurrealDB found" || echo "[WARN] SurrealDB not found" | |
| echo "[INIT] Checking Node.js..." | |
| node --version 2>/dev/null && echo "[OK] Node.js found" || echo "[WARN] Node.js not found" | |
| echo "[INIT] Checking Python venv..." | |
| /app/.venv/bin/python --version 2>/dev/null && echo "[OK] Python venv found" || echo "[WARN] Python venv not found" | |
| # ============================================================================== | |
| # 4. Print configuration (without secrets) | |
| # ============================================================================== | |
| echo "" | |
| echo "[CONFIG] SURREAL_URL=$SURREAL_URL" | |
| echo "[CONFIG] SURREAL_NAMESPACE=$SURREAL_NAMESPACE" | |
| echo "[CONFIG] SURREAL_DATABASE=$SURREAL_DATABASE" | |
| echo "[CONFIG] TIKTOKEN_CACHE_DIR=$TIKTOKEN_CACHE_DIR" | |
| echo "[CONFIG] Encryption key: $([ "$OPEN_NOTEBOOK_ENCRYPTION_KEY" = "hf-spaces-default-key-change-me" ] && echo 'DEFAULT (change in HF Secrets!)' || echo 'CUSTOM (set via HF Secrets)')" | |
| echo "" | |
| # ============================================================================== | |
| # 5. Symlink /data -> /app/data for app compatibility | |
| # Some code references /app/data while HF persistent storage uses /data | |
| # ============================================================================== | |
| if [ ! -L /app/data ] && [ -d /app/data ]; then | |
| # If /app/data exists and is a real directory, move contents to /data | |
| cp -rn /app/data/* /data/ 2>/dev/null || true | |
| rm -rf /app/data | |
| ln -sf /data /app/data | |
| elif [ ! -e /app/data ]; then | |
| ln -sf /data /app/data | |
| fi | |
| echo "[INIT] Data directory: /data ($(ls /data 2>/dev/null | wc -l) files)" | |
| echo "" | |
| # ============================================================================== | |
| # 6. Launch supervisord (PID 1) | |
| # ============================================================================== | |
| echo "==============================================" | |
| echo " Starting all services via supervisord..." | |
| echo " - SurrealDB (port 8000, internal)" | |
| echo " - FastAPI (port 5055, internal)" | |
| echo " - Worker (background tasks)" | |
| echo " - Next.js (port 8502, internal)" | |
| echo " - Nginx (port 7860, PUBLIC)" | |
| echo "==============================================" | |
| echo "" | |
| exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf | |