TL;DR
主要注意第一次运行SearXNG时需注释掉docker-compose.yml中的cap_drop部分,以及修改settings.yml的formats部分以支持接收json格式请求。
背景
虽然Open-WebUI一早支持了SearXNG,Open-WebUI官方也有详细部署教程 SearXNG | Open WebUI。
但实际操作过程中,可能有些文档维护者看来理所当然的部分,遇上楼主这种外行,就难免走些许弯路。
虽然google_pse的免费层量大管饱,配置简单(楼主此前一直在用),但秉着折腾、可以不用但不能没有,同时出于隐私考虑,还是决定尝试自己部署一次。在此期间还是得感谢C老师的大力支持,ai改变生活。
实验材料
毕竟是外行,此前的Open-WebUI也是通过1Panel部署,遂决定在此基础上修改compose配置统一部署SearXNG,也对应了官方教程中的第二种替代方法。代码也基本上是最简单方式。
在面板中进入1panel的安装目录可以看到文件docker-compose.yml和.env。
实验方法
主要思路还是跟着官方文档来
1. 在Open-WebUI的目录下创建一个searxng-docker的文件夹(到最后发现好像没什么用,但反正就创建了放在那)
在面板复制目录后,譬如说是/opt/1panel/apps/ollama-webui/ollama-webui
# ssh进入服务器后定位到上述路径,复制执行以下命令
cd /opt/1panel/apps/ollama-webui/ollama-webui
# 再创建文件夹
mkdir searxng-docker
2. 修改.env文件,因为之前1panel部署Open-WebUI时,即已经有了.env文件,直接在此基础上末尾添加即可
# 进入编辑.env文件
nano .env
# 复制变量到最后一行,端口尽量避开常见端口如8080,我这里选了8700
# 但实际上我最后是没有把SearXNG映射到公网ip的,所以改不改其实没影响
# 因为我仅需要让它被Open-WebUI调用而不想被外界通过ip+端口扫到
SEARXNG_HOSTNAME=localhost:8700/
# 复制好后ctrl + o, ctrl + x保存并退出
3. 在现有基础上修改docker-compose.yml文件(其实直接在1Panel面板改更方便),下面直接放出完整的文件内容
- 针对Open-WebUI的部分,之前部署好了完全可以不动,后面在WebUI的面板修改
- docker-compose.yml中的环境变量,在.env文件中都可以找到即可
- 主要修改就是在原来文件的基础上粘贴进SearXNG的部分,注意缩进与原文件对齐
networks:
1panel-network:
external: true
services:
OpenWebUI:
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
environment:
- ENABLE_OLLAMA_API=false
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
- OPENAI_API_BASE_URL=你的api链接
- OPENAI_API_KEY=你的api密钥
- TASK_MODEL_EXTERNAL=gpt-4o
- RAG_EMBEDDING_ENGINE=openai
- RAG_EMBEDDING_MODEL=text-embedding-ada-002
- RAG_OPENAI_API_BASE_URL=${OPENAI_API_BASE_URL}
- RAG_OPENAI_API_KEY=${OPENAI_API_KEY}
- RAG_EMBEDDING_OPENAI_BATCH_SIZE=2048
- ENABLE_RAG_WEB_SEARCH=true
- ENABLE_SEARCH_QUERY=true
- WEB_SEARCH_ENGINE=searxng
- SEARXNG_QUERY_URL=http://searxng:8080/search?q=<query>
- ENABLE_IMAGE_GENERATION=true
- IMAGE_GENERATION_ENGINE=openai
- IMAGES_OPENAI_API_BASE_URL=${OPENAI_API_BASE_URL}
- IMAGES_OPENAI_API_KEY=${OPENAI_API_KEY}
- IMAGE_GENERATION_MODEL=dall-e-3
image: ghcr.io/open-webui/open-webui:v0.6.14
labels:
createdBy: Apps
networks:
- 1panel-network
ports:
- ${HOST_IP}:${PANEL_APP_PORT_HTTP}:8080
restart: unless-stopped
volumes:
- ./data:/app/backend/data
searxng:
container_name: searxng
image: searxng/searxng:latest
#这里我直接注释掉了到服务器本机的端口映射,外部也就无从访问了
#ports:
# - "8700:8080"
volumes:
- ./searxng:/etc/searxng:rw
env_file:
- .env
restart: unless-stopped
networks:
- 1panel-network
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- DAC_OVERRIDE
logging:
driver: json-file
options:
max-size: "1m"
max-file: "1"
4. 但第一次运行SearXNG,参考官方教程,需要先将cap_drop部分注释掉
在上述docker-compose.yml文件中,找到相关部分,并在前面加上两个#
#cap_drop:
# - ALL
如果当前Open-WebUI正在运行,则将其停止后运行。
docker compose up -d ; sleep 10 ; docker compose down
运行完毕,在/opt/1panel/apps/ollama-webui/ollama-webui/searxng目录下看到uwsgi.ini文件后,则在docker-compose.yml文件中将两个#删掉。
5. 修改相同目录下settings.yml配置,使SearXNG能够接收Open-WebUI的json格式调用
为方便就直接在1panel上修改了,找到formats相关部分,加上接收json。
6. 最后再次运行docker compose,在Open-WebUI确认下配置就可以正常搜索了
启动docker,还是在/opt/1panel/apps/ollama-webui/ollama-webui目录下
docker compose up -d
在Open-WebUI面板确认下搜索参数,搜索数量和并发也不是越多越好,搜索多了vps性能不行会很慢。结果搜多了很多时候ai也不会读这么多内容,感觉和embedding模型有关。