SearXNG Docker 部署教程
1. 准备工作
在开始部署之前,请确保已完成以下准备工作:
- Docker 环境: 需要安装并配置好 Docker 和 Docker Compose。 如果未装 Docker,请跳过此教程。
- 域名或 IP 地址: 需要一个域名或者服务器的 IP 地址用于访问 SearXNG。 如果没有域名,可以使用服务器的 IP 地址加端口号进行访问。
2. 部署 SearXNG
2.1 Docker Compose 文件准备
创建目录: 在服务器上选择一个合适的目录,用于存放 SearXNG 的 Docker Compose 文件和相关配置,例如
/opt/docker/searxng。1
mkdir -p /opt/docker/searxng
克隆项目并进入目录
1
git clone https://github.com/searxng/searxng-docker.git /opt/docker/searxng
1
cd /opt/docker/searxng
创建
docker-compose.yml文件: 在该目录下创建docker-compose.yml文件,并将 以下新内容 复制粘贴到文件中:
1 | version: "3.7" |
文件结构解释:
version: '3.7': 指定 Docker Compose 文件版本。services:: 定义要运行的服务。redis:: 定义 Redis 服务。container_name: redis: 容器名称为redis。image: "redis:alpine": 使用redis:alpine镜像,Alpine 版本镜像体积小巧。command: redis-server --save "" --appendonly "no": Redis 启动命令,禁用数据持久化以简化配置 (适用于缓存场景)。networks: - searxng: 将 Redis 容器连接到searxng网络,以便 SearXNG 容器可以访问 Redis。tmpfs: - /var/lib/redis: 使用tmpfs将 Redis 数据目录挂载到内存中,进一步提升性能,但数据不会持久化。cap_drop和cap_add: Linux capabilities,用于安全加固,限制容器权限。searxng:: 定义 SearXNG 服务 (配置与之前版本基本相同)。container_name: searxng: 容器名称为searxng。image: searxng/searxng:latest: 使用最新版 SearXNG 镜像。networks: - searxng: 连接到searxng网络。ports: - "8180:8080": 端口映射,将容器 8080 端口映射到宿主机 8180 端口 (可修改)。volumes: - ./searxng:/etc/searxng:rw: 数据卷挂载,将当前目录下的searxng子目录挂载到容器的/etc/searxng目录,用于持久化配置。environment: - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/: 设置环境变量SEARXNG_BASE_URL,指定 SearXNG 的基础 URL。cap_drop,cap_add,logging: Linux capabilities 和日志配置,与之前版本相同。networks:: 定义 Docker 网络。searxng:: 创建一个名为searxng的网络。ipam: driver: default: 使用默认的 IP 地址管理驱动。
2.2 编辑 .env 文件
创建
.env文件: 在同一目录下创建.env文件:1
nano .env
编辑
.env文件内容: 使用文本编辑器打开.env文件,并根据需求修改以下配置:1
2SEARXNG_HOSTNAME=search.example.com#修改为你的域名或IP+端口
#LETSENCRYPT_EMAIL=admin@example.comSEARXNG_HOSTNAME: 将search.example.com替换为你的域名或 IP 地址。 如果使用 IP 地址,请确保包含端口号,例如your_server_ip:8180。LETSENCRYPT_EMAIL: 如果计划使用 Let’s Encrypt 自动签发 SSL 证书,取消注释此行并填写你的邮箱地址。 注意: Let’s Encrypt 通常需要域名解析到服务器 IP 地址。 本教程简化部署,暂不涉及 HTTPS 配置,可以通过反向代理 (如 Nginx) 实现 HTTPS。
2.3 生成密钥
进入
searxng目录: 确保当前在/opt/docker/searxng目录下。1
cd /opt/docker/searxng
生成随机密钥并替换
settings.yml文件中的默认密钥: 运行以下命令:1
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml
这个命令会使用
openssl生成一个 32 位的随机十六进制密钥,并将其替换到searxng/settings.yml文件中的ultrasecretkey占位符处,作为 SearXNG 的安全密钥。
2.4 配置防火墙 (可选)
如果使用了服务器防火墙或者云服务商提供的安全组,需要在防火墙中添加规则,允许外部访问在 docker-compose.yml 文件中映射的端口 (默认为 8180)。
服务商控制台: 如果使用的是云服务器 (如 AWS, Azure, GCP, 阿里云, 腾讯云 等),通常需要在云服务商的控制台中配置安全组规则,允许入站 TCP 流量访问服务器的 8180 端口。
本地防火墙 (如
ufw,firewalld): 如果在服务器上使用了本地防火墙,例如ufw或firewalld,需要配置防火墙规则允许 8180 端口的入站连接。例如,使用
ufw允许 8180 端口:1
2sudo ufw allow 8180/tcp
sudo ufw reload注意: 防火墙配置是可选的,但为了服务器安全,强烈建议配置防火墙规则,只允许必要的端口对外开放。 如果使用了反向代理 (如 Nginx) 进行端口转发,则需要开放反向代理监听的端口 (通常是 80 或 443)。
2.5 启动 Docker 容器
进入
searxng目录: 确保当前在/opt/docker/searxng目录下。1
cd /opt/docker/searxng
启动 Docker 容器: 运行以下命令启动 SearXNG 容器:
1
docker-compose up -d
-d参数表示在后台运行容器 (detached mode)。- Docker Compose 会读取
docker-compose.yml文件中的配置,下载 SearXNG 镜像并创建和启动容器。
等待容器启动: Docker 首次启动可能需要一些时间下载镜像。 可以使用以下命令查看容器启动状态:
1
docker-compose ps
当
searxng服务的状态显示为Up时,表示容器已成功启动。访问 SearXNG: 在浏览器中访问在
.env文件中配置的域名或 IP 地址和端口号 (例如http://search.example.com:8180或http://your_server_ip:8180),即可开始使用 SearXNG 搜索引擎。
3. 维护 SearXNG
3.1 检测端口占用
如果在启动 Docker 容器时遇到端口冲突,可以使用以下命令检测 8180 端口是否已被占用:
1
lsof -i:8180
或
1
netstat -tulnp | grep 8180
如果端口被占用,需要修改 docker-compose.yml 文件中端口映射配置,将宿主机端口 8180 修改为其他未被占用的端口。
3.2 更新容器
要更新 SearXNG 容器到最新版本,请执行以下步骤:
进入
searxng目录: 确保当前在/opt/docker/searxng目录下。1
cd /opt/docker/searxng
更新容器: 运行以下命令更新 SearXNG 容器:
1
docker compose pull && docker compose up -d
docker-compose pull命令会拉取最新的 SearXNG 镜像。docker-compose up -d命令会使用新的镜像重新创建并启动容器,实现容器更新。 Docker Compose 会智能地更新容器,而不会丢失数据卷配置。