refac: reorganize scripts and ci workflows
This commit is contained in:
+63
-48
@@ -1,86 +1,101 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
cd "$SCRIPT_DIR" || exit
|
||||
# ---------------------------------------------------------------------------
|
||||
# Container entry point for Open WebUI.
|
||||
# Handles secret key generation, optional Ollama/CUDA/Playwright setup,
|
||||
# HuggingFace Space deployment, and launches the uvicorn server.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
# ── Playwright browser installation (if configured) ──────────────────────────
|
||||
|
||||
# Add conditional Playwright browser installation
|
||||
if [[ "${WEB_LOADER_ENGINE,,}" == "playwright" ]]; then
|
||||
if [[ -z "${PLAYWRIGHT_WS_URL}" ]]; then
|
||||
echo "Installing Playwright browsers..."
|
||||
playwright install chromium
|
||||
playwright install-deps chromium
|
||||
fi
|
||||
|
||||
python -c "import nltk; nltk.download('punkt_tab')"
|
||||
if [[ -z "${PLAYWRIGHT_WS_URL:-}" ]]; then
|
||||
echo "Installing Playwright Chromium browser..."
|
||||
playwright install chromium
|
||||
playwright install-deps chromium
|
||||
fi
|
||||
python -c "import nltk; nltk.download('punkt_tab')"
|
||||
fi
|
||||
|
||||
if [ -n "${WEBUI_SECRET_KEY_FILE}" ]; then
|
||||
KEY_FILE="${WEBUI_SECRET_KEY_FILE}"
|
||||
else
|
||||
KEY_FILE=".webui_secret_key"
|
||||
fi
|
||||
# ── Secret key setup ─────────────────────────────────────────────────────────
|
||||
|
||||
KEY_FILE="${WEBUI_SECRET_KEY_FILE:-.webui_secret_key}"
|
||||
PORT="${PORT:-8080}"
|
||||
HOST="${HOST:-0.0.0.0}"
|
||||
if test "$WEBUI_SECRET_KEY $WEBUI_JWT_SECRET_KEY" = " "; then
|
||||
echo "Loading WEBUI_SECRET_KEY from file, not provided as an environment variable."
|
||||
|
||||
if ! [ -e "$KEY_FILE" ]; then
|
||||
echo "Generating WEBUI_SECRET_KEY"
|
||||
# Generate a random value to use as a WEBUI_SECRET_KEY in case the user didn't provide one.
|
||||
echo $(head -c 12 /dev/random | base64) > "$KEY_FILE"
|
||||
if [[ -z "${WEBUI_SECRET_KEY:-}" && -z "${WEBUI_JWT_SECRET_KEY:-}" ]]; then
|
||||
echo "No WEBUI_SECRET_KEY environment variable set, loading from file."
|
||||
|
||||
if [[ ! -f "$KEY_FILE" ]]; then
|
||||
echo "Generating new WEBUI_SECRET_KEY..."
|
||||
head -c 12 /dev/random | base64 > "$KEY_FILE"
|
||||
fi
|
||||
|
||||
echo "Loading WEBUI_SECRET_KEY from $KEY_FILE"
|
||||
echo "Loading WEBUI_SECRET_KEY from ${KEY_FILE}"
|
||||
WEBUI_SECRET_KEY=$(cat "$KEY_FILE")
|
||||
fi
|
||||
|
||||
# ── Ollama (bundled Docker image) ────────────────────────────────────────────
|
||||
|
||||
if [[ "${USE_OLLAMA_DOCKER,,}" == "true" ]]; then
|
||||
echo "USE_OLLAMA is set to true, starting ollama serve."
|
||||
ollama serve &
|
||||
echo "Starting bundled ollama serve..."
|
||||
ollama serve &
|
||||
fi
|
||||
|
||||
# ── CUDA library paths ──────────────────────────────────────────────────────
|
||||
|
||||
if [[ "${USE_CUDA_DOCKER,,}" == "true" ]]; then
|
||||
echo "CUDA is enabled, appending LD_LIBRARY_PATH to include torch/cudnn & cublas libraries."
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib/python3.11/site-packages/torch/lib:/usr/local/lib/python3.11/site-packages/nvidia/cudnn/lib"
|
||||
echo "CUDA enabled — extending LD_LIBRARY_PATH for torch/cudnn libraries."
|
||||
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:/usr/local/lib/python3.11/site-packages/torch/lib:/usr/local/lib/python3.11/site-packages/nvidia/cudnn/lib"
|
||||
fi
|
||||
|
||||
# Check if SPACE_ID is set, if so, configure for space
|
||||
if [ -n "$SPACE_ID" ]; then
|
||||
echo "Configuring for HuggingFace Space deployment"
|
||||
if [ -n "$ADMIN_USER_EMAIL" ] && [ -n "$ADMIN_USER_PASSWORD" ]; then
|
||||
echo "Admin user configured, creating"
|
||||
WEBUI_SECRET_KEY="$WEBUI_SECRET_KEY" uvicorn open_webui.main:app --host "$HOST" --port "$PORT" --forwarded-allow-ips "${FORWARDED_ALLOW_IPS:-*}" &
|
||||
# ── HuggingFace Space deployment ─────────────────────────────────────────────
|
||||
|
||||
if [[ -n "${SPACE_ID:-}" ]]; then
|
||||
echo "Configuring for HuggingFace Space deployment..."
|
||||
|
||||
if [[ -n "${ADMIN_USER_EMAIL:-}" && -n "${ADMIN_USER_PASSWORD:-}" ]]; then
|
||||
echo "Creating admin user for Space..."
|
||||
WEBUI_SECRET_KEY="${WEBUI_SECRET_KEY:-}" \
|
||||
uvicorn open_webui.main:app --host "$HOST" --port "$PORT" --forwarded-allow-ips "${FORWARDED_ALLOW_IPS:-*}" &
|
||||
webui_pid=$!
|
||||
echo "Waiting for webui to start..."
|
||||
while ! curl -s "http://localhost:${PORT}/health" > /dev/null; do
|
||||
|
||||
echo "Waiting for server to become healthy..."
|
||||
until curl -sf "http://localhost:${PORT}/health" > /dev/null 2>&1; do
|
||||
sleep 1
|
||||
done
|
||||
echo "Creating admin user..."
|
||||
curl \
|
||||
-X POST "http://localhost:${PORT}/api/v1/auths/signup" \
|
||||
-H "accept: application/json" \
|
||||
|
||||
echo "Registering admin user..."
|
||||
curl -sS -X POST "http://localhost:${PORT}/api/v1/auths/signup" \
|
||||
-H "Accept: application/json" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{ \"email\": \"${ADMIN_USER_EMAIL}\", \"password\": \"${ADMIN_USER_PASSWORD}\", \"name\": \"Admin\" }"
|
||||
echo "Shutting down webui..."
|
||||
kill $webui_pid
|
||||
-d "{\"email\": \"${ADMIN_USER_EMAIL}\", \"password\": \"${ADMIN_USER_PASSWORD}\", \"name\": \"Admin\"}"
|
||||
|
||||
echo "Restarting server..."
|
||||
kill "$webui_pid"
|
||||
wait "$webui_pid" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
export WEBUI_URL=${SPACE_HOST}
|
||||
export WEBUI_URL="${SPACE_HOST}"
|
||||
fi
|
||||
|
||||
# ── Launch uvicorn ───────────────────────────────────────────────────────────
|
||||
|
||||
PYTHON_CMD=$(command -v python3 || command -v python)
|
||||
UVICORN_WORKERS="${UVICORN_WORKERS:-1}"
|
||||
|
||||
# If script is called with arguments, use them; otherwise use default workers
|
||||
if [ "$#" -gt 0 ]; then
|
||||
ARGS=("$@")
|
||||
if [[ "$#" -gt 0 ]]; then
|
||||
ARGS=("$@")
|
||||
else
|
||||
ARGS=(--workers "$UVICORN_WORKERS")
|
||||
ARGS=(--workers "$UVICORN_WORKERS")
|
||||
fi
|
||||
|
||||
# Run uvicorn
|
||||
WEBUI_SECRET_KEY="$WEBUI_SECRET_KEY" exec "$PYTHON_CMD" -m uvicorn open_webui.main:app \
|
||||
exec env WEBUI_SECRET_KEY="${WEBUI_SECRET_KEY:-}" \
|
||||
"$PYTHON_CMD" -m uvicorn open_webui.main:app \
|
||||
--host "$HOST" \
|
||||
--port "$PORT" \
|
||||
--forwarded-allow-ips "${FORWARDED_ALLOW_IPS:-*}" \
|
||||
|
||||
Reference in New Issue
Block a user