【Docker】使用 Docker 部署 Searxng 的完整指南
本文介绍如何使用 Docker 部署 Searxng。本指南专注于两种主要方法:使用 docker-compose
(推荐生产环境)和 docker run
(适合测试环境)。
使用 Docker 部署 Searxng 的完整指南
Searxng 是一个开源、注重隐私的元搜索引擎,Docker 部署方式因其容器化特性和跨平台支持而广受欢迎。本指南详细介绍两种部署方法:使用 docker-compose
(结合 Caddy 反向代理,适合生产环境)和 docker run
(快速测试)。以下步骤假设你已安装 Docker 和 Docker Compose(参考 Docker 安装指南)。
准备工作
- 确认环境:
- 系统:Linux、Mac 或 Windows,推荐 Linux(如 Ubuntu)。
- 安装 Docker 和 Docker Compose(版本 2.x 或更高)。
- 确保有
git
和openssl
(用于生成密钥)。 - 检查端口可用性(如 8080 或 80/443),避免冲突。
- 创建工作目录:
- 运行
mkdir searxng-deployment && cd searxng-deployment
。
- 运行
- 权限设置:
- 确保当前用户有 Docker 执行权限(Linux 用户运行
sudo usermod -aG docker $USER
并重新登录)。
- 确保当前用户有 Docker 执行权限(Linux 用户运行
方法 1:使用 docker-compose
部署(推荐生产环境)
此方法基于 Searxng Docker 仓库,集成了 Caddy 反向代理,自动配置 HTTPS,适合生产环境或初学者。
步骤
-
克隆仓库:
git clone https://github.com/searxng/searxng-docker.git cd searxng-docker
建议将仓库克隆到
/usr/local/searxng-docker
等系统目录。 -
配置
.env
文件:- 编辑
.env
,设置域名和邮箱:echo -e "SEARXNG_HOSTNAME=yourdomain.com LETSENCRYPT_EMAIL=your@email.com" > .env
- 说明:
SEARXNG_HOSTNAME
是你的域名,LETSENCRYPT_EMAIL
用于 Let’s Encrypt 证书。
- 编辑
-
生成密钥:
- 替换
searxng/settings.yml
中的默认密钥:- Linux:
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml
- Mac:
sed -i '' "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml
- Linux:
- 这为 Searxng 实例生成唯一密钥,增强安全性。
- 替换
-
调整
docker-compose.yaml
(首次运行):- 打开
docker-compose.yaml
,找到searxng
服务部分,注释或删除以下行:cap_drop: - ALL
- 说明:首次运行需要更高权限以创建
/etc/searxng/uwsgi.ini
,完成后需恢复此设置。
- 打开
-
启动服务:
docker compose up -d
- 说明:这将启动 Searxng 和 Caddy 容器,Caddy 自动配置 HTTPS。
- 如果使用旧版 Docker Compose,运行
docker-compose up -d
。
-
恢复安全设置:
- 首次运行成功后,编辑
docker-compose.yaml
,恢复cap_drop: - ALL
。 - 重启服务:
docker compose down docker compose up -d
- 首次运行成功后,编辑
-
验证访问:
- 浏览器访问
https://yourdomain.com
,确认 Searxng 运行正常。 - 检查日志:
docker compose logs -f
。
- 浏览器访问
后续管理
- 更新:运行以下命令保持最新:
git pull docker compose pull docker compose up -d
- 配置 Searxng:编辑
searxng/settings.yml
调整搜索引擎、语言等,重启服务生效。 - Systemd 集成(可选):
- 复制模板:
cp searxng-docker.service.template searxng-docker.service
。 - 编辑
WorkingDirectory
为仓库路径(如/usr/local/searxng-docker
)。 - 启用服务:
sudo systemctl enable $(pwd)/searxng-docker.service sudo systemctl start searxng-docker.service
- 复制模板:
方法 2:使用 docker run
部署(适合测试环境)
此方法基于官方镜像 searxng/searxng,适合快速测试或开发环境,无需反向代理。
步骤
-
创建目录:
mkdir my-searxng cd my-searxng
-
设置端口:
export PORT=8080
- 说明:可根据需要更改端口,确保不冲突。
-
拉取镜像:
docker pull searxng/searxng
-
运行容器:
docker run --rm -d -p ${PORT}:8080 -v "${PWD}/searxng:/etc/searxng" -e "BASE_URL=http://localhost:$PORT/" -e "INSTANCE_NAME=my-searxng" searxng/searxng
- 说明:
--rm
:容器停止后自动删除(测试用,生产可移除)。-p ${PORT}:8080
:映射主机端口到容器 8080。-v "${PWD}/searxng:/etc/searxng"
:挂载配置文件目录。-e
:设置基础 URL 和实例名称。
- 说明:
-
验证访问:
- 浏览器访问
http://localhost:8080
,确认 Searxng 运行。 - 检查容器:
docker container ls
。
- 浏览器访问
-
配置 Searxng:
- 编辑
./searxng/settings.yml
调整设置。 - 重启容器:
docker container restart <容器ID>
(通过docker container ls
获取 ID)。
- 编辑
后续管理
- 停止容器:
docker container stop <容器ID>
。 - 查看日志:
docker logs <容器ID>
。 - 进入容器:
docker exec -it <容器ID> sh
。 - 更新:重新拉取镜像并运行新容器:
docker pull searxng/searxng
常见问题与解决方案
- 权限问题:
- 问题:挂载目录(如
./searxng
)无写入权限,导致容器失败。 - 解决:运行
chmod -R 777 searxng
或使用 root 用户。
- 问题:挂载目录(如
- 端口冲突:
- 问题:8080 或 80/443 端口被占用。
- 解决:更改
PORT
或-p
参数,如-p 8081:8080
。
- 首次运行失败(
docker-compose
):- 问题:未移除
cap_drop: - ALL
,导致无法创建uwsgi.ini
。 - 解决:按步骤 4 注释该行,运行后恢复。
- 问题:未移除
- HTTPS 配置:
docker-compose
:Caddy 自动处理,需正确设置.env
。docker run
:需手动配置反向代理(如 Nginx)并申请证书。
两种方法对比
特性 | docker-compose (Caddy) | docker run |
---|---|---|
适用场景 | 生产环境、初学者、需 HTTPS | 测试环境、快速部署 |
HTTPS 支持 | 自动(Caddy) | 手动配置 |
配置复杂度 | 中等(需配置 .env 和 settings.yml ) | 简单(仅环境变量) |
安全性 | 高(支持 cap_drop 和 systemd) | 中等(手动管理) |
依赖 | Docker Compose、Caddy | 仅 Docker |
高级选项
- 自定义设置:编辑
searxng/settings.yml
调整搜索引擎、主题或语言,参考 Searxng 文档。 - 性能优化:通过环境变量
UWSGI_WORKERS
和UWSGI_THREADS
调整 uWSGI 性能。 - 手动反向代理:已有 Nginx/HAProxy 的用户可移除 Caddy,配置代理指向 Searxng 的 8080 端口。
- 构建镜像:从源代码构建:
git clone https://github.com/searxng/searxng.git cd searxng make docker.build
总结
- 生产环境:选择
docker-compose
方法,结合 Caddy 自动 HTTPS,适合长期运行和公开访问。 - 测试环境:选择
docker run
方法,快速部署,适合开发或临时使用。 - 关键注意:确保权限正确、端口可用,
docker-compose
首次运行需调整cap_drop
。
通过以上步骤,可以轻松部署 Searxng。如需进一步定制或遇到问题,可参考 Searxng 官方文档 或社区资源(如 DB Tech Reviews)。