docker compose 部署是首选方案,官方镜像预装全部依赖并支持 redis;手动部署仅适用于无 docker 环境,需严格匹配 python 3.9–3.10 及编译依赖,且须配置反向代理与 https。

直接用 Docker Compose 部署最稳,不用折腾 Python 环境、依赖冲突和权限问题。手动编译安装在 Linux 上容易卡在 lxml 或 pycurl 编译失败,尤其在 Ubuntu 22.04+ 和国产系统(如统信UOS、银河麒麟)上,libxml2-dev 和 libxslt1-dev 版本不匹配是高频翻车点。
Docker Compose 部署:推荐首选方案
这是目前最可靠、可复现、易维护的方式,官方镜像 searxng/searxng:latest 已预装全部依赖,且自带 Redis 支持。
- 确保已安装
docker和docker-compose(注意不是docker compose插件,旧版需用docker-compose命令) - 创建项目目录:
mkdir -p ~/searxng && cd ~/searxng - 写入
docker-compose.yml,关键项必须对齐:version: '3.7' services: searxng: image: searxng/searxng:latest container_name: searxng ports: - "8000:8080" volumes: - ./searxng:/etc/searxng environment: - SEARXNG_BASE_URL=http://你的服务器IP:8000/ restart: unless-stopped depends_on: - redis <p>redis: image: redis:alpine container_name: redis restart: unless-stopped command: redis-server --save "" --appendonly no</p> -
SEARXNG_BASE_URL必须填真实可访问的地址(不能写localhost或127.0.0.1),否则前端资源加载失败 - 首次启动前,先手动创建配置目录:
mkdir -p ./searxng,否则容器会因挂载失败退出
手动部署:只在无 Docker 环境下才考虑
常见于嵌入式设备、老旧 VPS 或强制离线环境。但要注意:pip install -e . 在 Python 3.11+ 下大概率因 setuptools 版本不兼容报错,且 searx-run 默认绑定 127.0.0.1:8080,外网无法访问。
- 必须用 Python 3.9–3.10(Ubuntu 22.04 自带 3.10,推荐;3.11+ 需降级或加
--no-build-isolation) - 编译依赖缺一不可:
sudo apt install build-essential libxml2-dev libxslt1-dev libffi-dev libssl-dev zlib1g-dev,漏掉libxslt1-dev会导致lxml安装失败 -
settings.yml要复制到项目根目录,并修改general > base_url和secret_key(用openssl rand -hex 16生成) - 启动命令不是
python app.py,而是:SEARXNG_SETTINGS_PATH=$(pwd)/settings.yml searx-run - 若要外网访问,必须改
settings.yml中的uwsgi > host为0.0.0.0,并确认防火墙放行端口(如sudo ufw allow 8080)
配置反向代理:暴露服务前必做
直接暴露 8000 或 8080 端口不安全,且无法套 HTTPS。Nginx 是最轻量、最通用的选择。
- 配置里
proxy_pass地址必须和容器内端口一致(Docker 方案是http://127.0.0.1:8080,手动部署也是) - 务必加
proxy_set_header X-Forwarded-Proto $scheme;,否则 SearXNG 会误判 HTTPS 为 HTTP,导致静态资源 404 - 如果用域名,
server_name写域名后,必须提前解析到服务器 IP,否则 Certbot 申请证书会失败 - 启用 HTTPS 后,
SEARXNG_BASE_URL必须同步改成https://your-domain.com,否则前端 AJAX 请求跨协议被浏览器拦截
真正麻烦的不是启动,而是后续维护:比如搜索引擎失效(Bing 接口变更)、Redis 内存溢出、或者某天发现 duckduckgo 源返回空结果——这些都得去翻 settings.yml 里的 engines 配置段,而不是重装整个服务。所以第一次部署时,花十分钟把 ./searxng/settings.yml 挂载出来,比省事更重要。











