json support

This commit is contained in:
first 2025-07-23 02:31:40 +00:00
parent dd95fa27b2
commit aa33d9ceff

View file

@ -1,17 +1,12 @@
#!/bin/bash #!/bin/bash
# ============================================================================== # ==============================================================================
# Automated Open WebUI & SearXNG Installer (v26 - The Definitive Version) # Automated Open WebUI & SearXNG Installer (v27 - The Final)
# #
# This script is the final, consolidated version incorporating all bug fixes # This script will:
# and best practices discovered through our collaborative debugging process. # 1. Deploy a complete, secure, and automated stack for Open WebUI.
# # 2. Optionally deploy SearXNG and add a user-defined JSON engine override.
# Key Fixes: # 3. All previous bug fixes and best practices are retained.
# 1. Uses a robust "port-publishing" method for Nginx-to-Docker communication.
# 2. Uses environment variables to configure SearXNG, the correct method.
# 3. Uses a safe, non-blocking command to generate secrets.
# 4. Builds Docker commands safely in an array to prevent errors.
# 5. All previous logic (UFW, cron, etc.) is complete and verified.
# ============================================================================== # ==============================================================================
# --- Safety Checks --- # --- Safety Checks ---
@ -52,12 +47,12 @@ echo "---"; echo "✅ Thank you. Starting the setup."; sleep 3
UI_CONTAINER="open-webui" UI_CONTAINER="open-webui"
SEARXNG_CONTAINER="searxng" SEARXNG_CONTAINER="searxng"
NETWORK_NAME="open-webui-net" NETWORK_NAME="open-webui-net"
SEARXNG_CONFIG_DIR="/srv/searxng"
# --- Step 1: Dependencies --- # --- Step 1: Dependencies ---
echo "▶️ [1/9] Installing dependencies..." echo "▶️ [1/9] Installing dependencies..."
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
apt-get update apt-get update
# Add openssl for robust secret generation
BASE_PACKAGES="ca-certificates curl gnupg nginx certbot python3-certbot-nginx fail2ban unattended-upgrades openssl" BASE_PACKAGES="ca-certificates curl gnupg nginx certbot python3-certbot-nginx fail2ban unattended-upgrades openssl"
if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then apt-get install -y $BASE_PACKAGES apache2-utils; else apt-get install -y $BASE_PACKAGES; fi if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then apt-get install -y $BASE_PACKAGES apache2-utils; else apt-get install -y $BASE_PACKAGES; fi
@ -91,7 +86,18 @@ docker rm $UI_CONTAINER $SEARXNG_CONTAINER 2>/dev/null || true
# --- Step 5: Configure and Deploy SearXNG (Optional) --- # --- Step 5: Configure and Deploy SearXNG (Optional) ---
if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then
echo "▶️ [5/9] Deploying SearXNG..." echo "▶️ [5/9] Configuring and deploying SearXNG..."
# Create a user-defined settings override to add the JSON engine
sudo mkdir -p $SEARXNG_CONFIG_DIR
sudo tee "$SEARXNG_CONFIG_DIR/user.yml" >/dev/null <<'EOF'
use_default_settings: true # <- keep everything from the upstream settings
search:
formats:
- html
- json
EOF
sudo chown 1000:1000 "$SEARXNG_CONFIG_DIR/user.yml"
# Generate a robust, shell-safe secret key # Generate a robust, shell-safe secret key
SECRET_KEY=$(openssl rand -hex 32) SECRET_KEY=$(openssl rand -hex 32)
@ -101,11 +107,11 @@ if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then
docker run -d docker run -d
--name "$SEARXNG_CONTAINER" --name "$SEARXNG_CONTAINER"
--network "$NETWORK_NAME" --network "$NETWORK_NAME"
# Publish port to localhost for Nginx to connect to
-p "127.0.0.1:8081:8080" -p "127.0.0.1:8081:8080"
# Core settings via environment variables -v "$SEARXNG_CONFIG_DIR:/etc/searxng"
-e "SEARXNG_SETTINGS_PATH=/etc/searxng/user.yml"
-e "SEARXNG_SECRET=$SECRET_KEY" -e "SEARXNG_SECRET=$SECRET_KEY"
-e "SEARXNG_BIND_ADDRESS=0.0.0.0" # Listen on all interfaces inside the container -e "SEARXNG_BIND_ADDRESS=0.0.0.0"
-e "SEARXNG_BASE_URL=https://$SEARCH_DOMAIN" -e "SEARXNG_BASE_URL=https://$SEARCH_DOMAIN"
--restart always --restart always
) )
@ -116,17 +122,10 @@ if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then
docker_cmd+=( docker_cmd+=(
-e "SEARXNG_ENGINES_BRAVE_API_KEY=$BRAVE_API_KEY" -e "SEARXNG_ENGINES_BRAVE_API_KEY=$BRAVE_API_KEY"
-e "SEARXNG_ENGINES_BRAVE_DISABLED=false" -e "SEARXNG_ENGINES_BRAVE_DISABLED=false"
# Disable a noisy engine if a key is present
-e "SEARXNG_ENGINES_DUCKDUCKGO_DISABLED=true"
) )
else
echo " - No Brave API key provided, using default search engines."
fi fi
# Add the image name to the end of the command
docker_cmd+=(searxng/searxng) docker_cmd+=(searxng/searxng)
# Execute the final, safe command
"${docker_cmd[@]}" "${docker_cmd[@]}"
else else
echo "▶️ [5/9] Skipping SearXNG deployment." echo "▶️ [5/9] Skipping SearXNG deployment."
@ -161,7 +160,6 @@ if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then
server { server {
listen 80; listen [::]:80; server_name $SEARCH_DOMAIN; listen 80; listen [::]:80; server_name $SEARCH_DOMAIN;
location / { location / {
# Proxy directly to the port we published on the host's localhost
proxy_pass http://127.0.0.1:8081; proxy_pass http://127.0.0.1:8081;
auth_basic "Private Search Instance"; auth_basic "Private Search Instance";
auth_basic_user_file /etc/nginx/.htpasswd; auth_basic_user_file /etc/nginx/.htpasswd;
@ -213,12 +211,23 @@ echo "--- ACCESS ---"
echo " - Open WebUI: https://$UI_DOMAIN" echo " - Open WebUI: https://$UI_DOMAIN"
if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then echo " - SearXNG: https://$SEARCH_DOMAIN (user: admin)"; fi if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then echo " - SearXNG: https://$SEARCH_DOMAIN (user: admin)"; fi
echo "" echo ""
echo "--- NEXT STEPS: ADDING THE RESEARCH TOOL ---" echo "--- NEXT STEPS: USING YOUR PRIVATE SEARCH ENGINE ---"
if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then if [[ "${DEPLOY_SEARXNG,,}" == "y" ]]; then
echo "1. Go to Open WebUI -> Settings -> Tools." echo "You now have two ways to use your private SearXNG instance:"
echo "2. Paste the Python code from https://github.com/iamarcel/open-webui-utils/blob/main/research_tool.py" echo ""
echo "3. Go to the Settings tab in the tool editor." echo " OPTION A: Native Web Search (Recommended for most users)"
echo "4. Add Environment Variable: Key: SEARXNG_BASE_URL, Value: http://searxng:8080" echo " 1. Go to your Open WebUI Admin Panel -> Settings -> Web Search."
echo "5. Click 'Save'." echo " 2. Enable the 'Web Search' toggle."
echo " 3. In the 'SearXNG URL' field, enter: http://searxng:8080"
echo " (This works because the containers are on a private network)."
echo " 4. Save settings. You can now enable web search for any model."
echo ""
echo " OPTION B: Advanced Python Tool (For custom logic)"
echo " 1. Go to Settings -> Tools and click 'Add Tool'."
echo " 2. In the 'Load from URL' field, paste:"
echo " https://raw.githubusercontent.com/iamarcel/open-webui-utils/main/research_tool.py"
echo " 3. Go to the tool's 'Settings' tab (gear icon)."
echo " 4. Add Environment Variable -> Key: SEARXNG_BASE_URL, Value: http://searxng:8080"
echo " 5. Save the tool. You can now call it with '@research' in a chat."
fi fi
echo "---" echo "---"