Docker部署SearXNG 搜索引擎,隐私无广告
2023-10-09 05:58:53

SearXNG Docker 部署教程


1. 准备工作

在开始部署之前,请确保已完成以下准备工作:

  • Docker 环境: 需要安装并配置好 Docker 和 Docker Compose。 如果未装 Docker,请跳过此教程。
  • 域名或 IP 地址: 需要一个域名或者服务器的 IP 地址用于访问 SearXNG。 如果没有域名,可以使用服务器的 IP 地址加端口号进行访问。

2. 部署 SearXNG

2.1 Docker Compose 文件准备

  1. 创建目录: 在服务器上选择一个合适的目录,用于存放 SearXNG 的 Docker Compose 文件和相关配置,例如 /opt/docker/searxng

    1
    mkdir -p /opt/docker/searxng
  2. 克隆项目并进入目录

    1
    git clone https://github.com/searxng/searxng-docker.git /opt/docker/searxng
    1
    cd /opt/docker/searxng
  3. 创建 docker-compose.yml 文件: 在该目录下创建 docker-compose.yml 文件,并将 以下新内容 复制粘贴到文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
version: "3.7"

services:
redis:
container_name: redis
image: docker.io/valkey/valkey:8-alpine
command: valkey-server --save 30 1 --loglevel warning
restart: unless-stopped
networks:
- searxng
volumes:
- valkey-data2:/data
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"

searxng:
container_name: searxng
image: docker.io/searxng/searxng:latest
restart: unless-stopped
networks:
- searxng
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./searxng:/etc/searxng:rw
environment:
- SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
- UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4}
- UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4}
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"

networks:
searxng:

volumes:
valkey-data2:

文件结构解释:

  • 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_dropcap_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 文件

  1. 创建 .env 文件: 在同一目录下创建 .env 文件:

    1
    nano .env
  2. 编辑 .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 生成密钥

  1. 进入 searxng 目录: 确保当前在 /opt/docker/searxng 目录下。

    1
    cd /opt/docker/searxng
  2. 生成随机密钥并替换 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): 如果在服务器上使用了本地防火墙,例如 ufwfirewalld,需要配置防火墙规则允许 8180 端口的入站连接。

    例如,使用 ufw 允许 8180 端口:

    1
    2
    sudo ufw allow 8180/tcp
    sudo ufw reload

    注意: 防火墙配置是可选的,但为了服务器安全,强烈建议配置防火墙规则,只允许必要的端口对外开放。 如果使用了反向代理 (如 Nginx) 进行端口转发,则需要开放反向代理监听的端口 (通常是 80 或 443)。

2.5 启动 Docker 容器

  1. 进入 searxng 目录: 确保当前在 /opt/docker/searxng 目录下。

    1
    cd /opt/docker/searxng
  2. 启动 Docker 容器: 运行以下命令启动 SearXNG 容器:

    1
    docker-compose up -d
    • -d 参数表示在后台运行容器 (detached mode)。
    • Docker Compose 会读取 docker-compose.yml 文件中的配置,下载 SearXNG 镜像并创建和启动容器。
  3. 等待容器启动: Docker 首次启动可能需要一些时间下载镜像。 可以使用以下命令查看容器启动状态:

    1
    docker-compose ps

    searxng 服务的状态显示为 Up 时,表示容器已成功启动。

  4. 访问 SearXNG: 在浏览器中访问在 .env 文件中配置的域名或 IP 地址和端口号 (例如 http://search.example.com:8180http://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 容器到最新版本,请执行以下步骤:

  1. 进入 searxng 目录: 确保当前在 /opt/docker/searxng 目录下。

    1
    cd /opt/docker/searxng
  2. 更新容器: 运行以下命令更新 SearXNG 容器:

    1
    docker compose pull && docker compose up -d
    • docker-compose pull 命令会拉取最新的 SearXNG 镜像。
    • docker-compose up -d 命令会使用新的镜像重新创建并启动容器,实现容器更新。 Docker Compose 会智能地更新容器,而不会丢失数据卷配置。