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 
 2- SEARXNG_HOSTNAME=search.example.com#修改为你的域名或IP+端口 
 #LETSENCRYPT_EMAIL=admin@example.com- SEARXNG_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 
 2- sudo 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 会智能地更新容器,而不会丢失数据卷配置。