Files
cjyyzx/gateway/scripts/bootstrap-lobechat-users.sh
T
xiaohei c3210b2eec
E2E CI / Check Duplicate Run (push) Failing after 3s
🔄 Branch Synchronization / sync-branches (push) Failing after 3s
Test CI / Check Duplicate Run (push) Failing after 3s
E2E CI / Test Web App (push) Has been skipped
Test CI / Test App (shard 1/3) (push) Has been skipped
Test CI / Test Packages (push) Has been skipped
Test CI / Test App (shard 3/3) (push) Has been skipped
Test CI / Test App (shard 2/3) (push) Has been skipped
Test CI / Test Database (push) Has been skipped
Test CI / Test Desktop App (push) Has been skipped
Test CI / Merge and Upload App Coverage (push) Has been skipped
LobeChat deep customization: welcome tagline / example prompts / default agent / model-admin lock / enterprise identity bridge
2026-04-21 20:34:20 +08:00

74 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Bootstrap every existing LobeChat user with:
# - Enabled Azure OpenAI provider (encrypted keyVaults)
# - One Azure chat model matching $AZURE_OPENAI_DEPLOYMENT
# - "enterprise-gateway" customPlugin pointing at the gateway manifest
#
# Usage: ./gateway/scripts/bootstrap-lobechat-users.sh
# Pre-req: docker compose stack is up; .env populated with Azure + KEY_VAULTS_SECRET.
# Idempotent: safe to re-run.
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
SCRIPT_PATH="$ROOT_DIR/gateway/scripts/bootstrap-lobechat-users.js"
# Load .env so we get KEY_VAULTS_SECRET, Azure creds, etc.
# Write a stripped copy to a tempfile (removes inline `# ...` comments), then
# source it with `set -a` so every assignment becomes exported.
if [[ -f "$ROOT_DIR/.env" ]]; then
TMP_ENV="$(mktemp)"
trap 'rm -f "$TMP_ENV"' EXIT
# keep only KEY=VALUE lines; strip trailing " # comment"; preserve quotes/slashes in VALUE
awk '
/^[[:space:]]*#/ { next }
/^[[:space:]]*$/ { next }
{
# split off trailing comment only if preceded by whitespace
sub(/[[:space:]]+#.*$/, "")
if ($0 ~ /^[A-Za-z_][A-Za-z0-9_]*=/) print
}
' "$ROOT_DIR/.env" > "$TMP_ENV"
set -a
# shellcheck disable=SC1090
source "$TMP_ENV"
set +a
fi
: "${KEY_VAULTS_SECRET:?KEY_VAULTS_SECRET must be set (see .env). Must decode to 16/24/32 bytes.}"
: "${AZURE_OPENAI_API_KEY:?AZURE_OPENAI_API_KEY must be set in .env}"
: "${AZURE_OPENAI_ENDPOINT:?AZURE_OPENAI_ENDPOINT must be set in .env}"
AZURE_OPENAI_API_VERSION="${AZURE_OPENAI_API_VERSION:-2025-04-01-preview}"
AZURE_OPENAI_DEPLOYMENT="${AZURE_OPENAI_DEPLOYMENT:-gpt-5.4}"
POSTGRES_USER="${POSTGRES_USER:-eg}"
POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-eg_pw}"
LOBE_DB_NAME="${LOBE_DB_NAME:-lobechat}"
LOBECHAT_DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${LOBE_DB_NAME}"
CONTAINER="${LOBECHAT_CONTAINER:-lobechat-lobechat-1}"
echo "[bootstrap] using container: $CONTAINER"
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}\$"; then
echo "[bootstrap] ERROR: container '$CONTAINER' not running." >&2
echo " set LOBECHAT_CONTAINER=<name> or start the stack." >&2
exit 1
fi
# Copy script into the container (it has pg + node baked in).
docker cp "$SCRIPT_PATH" "$CONTAINER:/tmp/bootstrap-lobechat-users.js"
# Run via node, pointing NODE_PATH at the app's node_modules so `require('pg')` resolves.
docker exec \
-e NODE_PATH=/app/node_modules \
-e LOBECHAT_DATABASE_URL="$LOBECHAT_DATABASE_URL" \
-e KEY_VAULTS_SECRET="$KEY_VAULTS_SECRET" \
-e AZURE_OPENAI_API_KEY="$AZURE_OPENAI_API_KEY" \
-e AZURE_OPENAI_ENDPOINT="$AZURE_OPENAI_ENDPOINT" \
-e AZURE_OPENAI_API_VERSION="$AZURE_OPENAI_API_VERSION" \
-e AZURE_OPENAI_DEPLOYMENT="$AZURE_OPENAI_DEPLOYMENT" \
-e GATEWAY_MANIFEST_URL="${GATEWAY_MANIFEST_URL:-http://gateway:3001/api/lobechat/manifest}" \
"$CONTAINER" node /tmp/bootstrap-lobechat-users.js
echo "[bootstrap] done. Sign in as admin@eg.local or user1@eg.local and open the model + plugin pickers."