Add interactive component menu and fix ChromaDB healthcheck

- Show menu at startup to select: full stack, AI stack only, or Kiwix only
- Gate server files, SearXNG config, docker compose up, model pull,
  and summary URLs based on selection
- Fix ChromaDB healthcheck: wget → curl, /api/v2/ → /api/v1/heartbeat

https://claude.ai/code/session_012gDnantBmFTWZGCiKyjazx
This commit is contained in:
Claude
2026-03-20 21:37:58 +00:00
parent 6ac4fc617e
commit a815a3555e
+58 -19
View File
@@ -48,6 +48,24 @@ info "Base : $BASE"
info "Host : $LOCAL_IP" info "Host : $LOCAL_IP"
$IS_UPDATE && warn "Existing install found. Config files kept unless --force is passed." $IS_UPDATE && warn "Existing install found. Config files kept unless --force is passed."
# ── component menu ─────────────────────────────────────────────────────────────
echo ""
echo -e " ${BOLD}Select components to install:${NC}"
echo ""
echo " 1) Full stack — AI stack + Kiwix"
echo " 2) AI stack — Ollama · WebUI · RAG · MCP · ChromaDB · SearXNG · Gitea · InvokeAI · Portainer"
echo " 3) Kiwix only — Offline Wikipedia / docs (runs standalone)"
echo ""
read -rp " Choice [1]: " MENU_CHOICE
MENU_CHOICE="${MENU_CHOICE:-1}"
case "$MENU_CHOICE" in
1) INSTALL_AI=true; INSTALL_KIWIX=true ;;
2) INSTALL_AI=true; INSTALL_KIWIX=false ;;
3) INSTALL_AI=false; INSTALL_KIWIX=true ;;
*) die "Invalid choice '$MENU_CHOICE' — run again and choose 1, 2, or 3" ;;
esac
echo ""
# ── helper: write only if missing (or --force) ──────────────────────────────── # ── helper: write only if missing (or --force) ────────────────────────────────
# Usage: write_if_new /path/to/file << 'EOF' ... EOF # Usage: write_if_new /path/to/file << 'EOF' ... EOF
write_if_new() { write_if_new() {
@@ -117,6 +135,7 @@ done
ok "Directories ready under $BASE" ok "Directories ready under $BASE"
# ============================================================================= # =============================================================================
if $INSTALL_AI; then
section "Server Files" section "Server Files"
# ============================================================================= # =============================================================================
@@ -146,7 +165,10 @@ httpx
REQ REQ
ok "mcp_requirements.txt" ok "mcp_requirements.txt"
fi # INSTALL_AI
# ============================================================================= # =============================================================================
if $INSTALL_AI; then
section "SearXNG Config" section "SearXNG Config"
# ============================================================================= # =============================================================================
write_if_new "$BASE/searxng/settings.yml" << SEARXNG write_if_new "$BASE/searxng/settings.yml" << SEARXNG
@@ -162,6 +184,8 @@ search:
formats: [html, json] formats: [html, json]
SEARXNG SEARXNG
fi # INSTALL_AI
# ============================================================================= # =============================================================================
section ".env File" section ".env File"
# ============================================================================= # =============================================================================
@@ -255,7 +279,7 @@ services:
- IS_PERSISTENT=TRUE - IS_PERSISTENT=TRUE
- ANONYMIZED_TELEMETRY=FALSE - ANONYMIZED_TELEMETRY=FALSE
healthcheck: healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:8000/api/v2/heartbeat || exit 1"] test: ["CMD-SHELL", "curl -sf http://localhost:8000/api/v1/heartbeat || exit 1"]
interval: 15s interval: 15s
timeout: 5s timeout: 5s
retries: 5 retries: 5
@@ -578,11 +602,18 @@ section "Starting Stack"
# ============================================================================= # =============================================================================
cd "$BASE" cd "$BASE"
info "Pulling images (this takes a few minutes on first run)..." info "Pulling images (this takes a few minutes on first run)..."
docker compose pull --quiet
docker compose up -d COMPOSE_SERVICES=""
$INSTALL_AI && COMPOSE_SERVICES+=" ollama open-webui chromadb rag-server mcp-server searxng gitea invokeai portainer"
$INSTALL_KIWIX && COMPOSE_SERVICES+=" kiwix"
# shellcheck disable=SC2086
docker compose pull --quiet $COMPOSE_SERVICES
# shellcheck disable=SC2086
docker compose up -d $COMPOSE_SERVICES
ok "Stack started" ok "Stack started"
if ! $IS_UPDATE; then if $INSTALL_AI && ! $IS_UPDATE; then
echo "" echo ""
read -rp "Pull Ollama models now? (~20GB total, takes 10-40 min) [Y/n]: " DO_PULL read -rp "Pull Ollama models now? (~20GB total, takes 10-40 min) [Y/n]: " DO_PULL
if [[ "${DO_PULL,,}" != "n" ]]; then if [[ "${DO_PULL,,}" != "n" ]]; then
@@ -596,22 +627,30 @@ fi
echo "" echo ""
echo -e "${GREEN}${BOLD}━━━ Done! ━━━${NC}" echo -e "${GREEN}${BOLD}━━━ Done! ━━━${NC}"
echo "" echo ""
echo -e " ${CYAN}Open WebUI${NC} → http://$LOCAL_IP:3000" if $INSTALL_AI; then
echo -e " ${CYAN}InvokeAI${NC} → http://$LOCAL_IP:9090" echo -e " ${CYAN}Open WebUI${NC} → http://$LOCAL_IP:3000"
echo -e " ${CYAN}SearXNG${NC} → http://$LOCAL_IP:8888" echo -e " ${CYAN}InvokeAI${NC} → http://$LOCAL_IP:9090"
echo -e " ${CYAN}Kiwix${NC} → http://$LOCAL_IP:8181 (needs ZIMs — run kiwix_download.sh)" echo -e " ${CYAN}SearXNG${NC} → http://$LOCAL_IP:8888"
echo -e " ${CYAN}Gitea${NC} → http://$LOCAL_IP:3001" echo -e " ${CYAN}Gitea${NC} → http://$LOCAL_IP:3001"
echo -e " ${CYAN}RAG Health${NC} → http://$LOCAL_IP:8001/health" echo -e " ${CYAN}RAG Health${NC} → http://$LOCAL_IP:8001/health"
echo -e " ${CYAN}MCP SSE${NC} → http://$LOCAL_IP:8002/sse" echo -e " ${CYAN}MCP SSE${NC} → http://$LOCAL_IP:8002/sse"
echo -e " ${CYAN}Portainer${NC} → https://$LOCAL_IP:9443" echo -e " ${CYAN}Portainer${NC} → https://$LOCAL_IP:9443"
fi
if $INSTALL_KIWIX; then
echo -e " ${CYAN}Kiwix${NC} → http://$LOCAL_IP:8181 (needs ZIMs — run kiwix_download.sh)"
fi
echo "" echo ""
echo -e " ${YELLOW}Add MCP to Claude Code:${NC}" if $INSTALL_AI; then
echo " claude mcp add local http://$LOCAL_IP:8002/sse" echo -e " ${YELLOW}Add MCP to Claude Code:${NC}"
echo "" echo " claude mcp add local http://$LOCAL_IP:8002/sse"
echo -e " ${YELLOW}Add API tokens to:${NC} $BASE/.env" echo ""
echo -e " ${YELLOW}Drop PDFs into:${NC} $BASE/papers/" echo -e " ${YELLOW}Add API tokens to:${NC} $BASE/.env"
echo -e " ${YELLOW}Your workspace:${NC} $BASE/workspace/" echo -e " ${YELLOW}Drop PDFs into:${NC} $BASE/papers/"
echo -e " ${YELLOW}ZIM downloads:${NC} ./kiwix_download.sh" echo -e " ${YELLOW}Your workspace:${NC} $BASE/workspace/"
fi
if $INSTALL_KIWIX; then
echo -e " ${YELLOW}ZIM downloads:${NC} ./kiwix_download.sh"
fi
echo "" echo ""
$IS_UPDATE && echo -e " ${GREEN}Update complete.${NC}" \ $IS_UPDATE && echo -e " ${GREEN}Update complete.${NC}" \
|| echo -e " ${GREEN}Fresh install complete.${NC}" || echo -e " ${GREEN}Fresh install complete.${NC}"