open-notebook / start.sh
C2MV's picture
Deploy Open Notebook to HuggingFace Spaces
bd0c393
Raw
History Blame Contribute Delete
4.1 kB
#!/bin/bash
# ==============================================================================
# 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