SearXNG —— 个人搜索引擎搭建指南

SearXNG —— 个人搜索引擎搭建指南

本文介绍了自由开源、注重隐私的搜索引擎SearXNG,它聚合多个搜索引擎结果并屏蔽追踪与竞价排名。文章详细提供了在Ubuntu/Debian系统上使用Docker和Docker Compose部署SearXNG的完整教程,包括系统准备、Docker安装、SearXNG配置、反向代理(Nginx)设置、SSL证书申请以及防火墙配置。此外,还说明了如何为Cherry Studio配置SearXNG以支持JSON格式输出,并提供了一个已部署的可公开使用的实例地址。

为何选择SearXNG?项目特性一览

SearXNG是一款自由开源、注重隐私、部署简单的搜索引擎项目,整合了市面上大量的搜索接口并且屏蔽了竞价排名搜索结果 。目前LobeChat和Cherry Studio都已支持SearXNG,通过JSON和HTML结合AI进行更优的搜索结果输出。

1. 注重隐私

- 无追踪搜索:SearXNG不会跟踪用户,也不会分析用户数据

- 匿名搜索:所有的搜索请求都是匿名的,删除搜索请求中的私人输入

2. 开源和可定制

- 源代码完全公开,任何人都可以查看、用户自托管,完全控制自己的搜索数据

3. 多搜索引擎聚合

- 支持聚合多个搜索引擎的结果(如Google、Bing、DuckDuckGo等)

- 可以自定义选择使用提高搜索效率

4. 功能特点

- 隐藏搜索结果页面主题定制,界面美观

完整的SearXNG安装教程(使用Docker和Docker Compose)

本文将结合Docker和Docker Compose进行安装部署,Docker容器化技术使得部署过程一触即达。

第一部分:系统准备

系统要求

- 操作系统:Ubuntu 20.04/22.04 LTS 或 Debian 11/12

- 内存:至少1GB RAM

- 存储:至少10GB可用空间

- 网络:需要访问外网(用于获取搜索结果)

更新系统

# 更新软件包列表

sudo apt update

# 升级已安装的软件包

sudo apt upgrade -y

# 安装必要的依赖

sudo apt install -y curl wget gnupg lsb-release ca-certificates apt-transport-https software-properties-common

第二部分:安装 Docker CE

卸载旧版本(如果存在)

sudo apt remove -y docker docker-engine docker.io containerd runc

设置 Docker 仓库

方法一:使用官方脚本(推荐)

# 下载并执行Docker安装脚本

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

方法二:手动添加仓库

# 添加Docker的GPG密钥

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加Docker仓库

echo \

  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \

  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新软件包列表

sudo apt update

安装 Docker CE

# 安装Docker CE

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 或者指定版本安装

# sudo apt install -y docker-ce=5:24.0.7-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.7-1~ubuntu.22.04~jammy containerd.io docker-buildx-plugin docker-compose-plugin

配置 Docker

# 启动Docker服务

sudo systemctl start docker

# 设置开机自启

sudo systemctl enable docker

# 将当前用户添加到docker组(避免每次使用sudo)

sudo usermod -aG docker $USER

# 应用组更改(需要重新登录或执行以下命令)

newgrp docker

# 验证Docker安装

docker --version

docker run hello-world

第三部分:安装 Docker Compose

安装 Docker Compose(最新版本)

# 下载最新版本的Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 添加执行权限

sudo chmod +x /usr/local/bin/docker-compose

# 创建符号链接(可选)

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

验证安装

# 检查版本

docker-compose --version

# 或者使用新的docker compose命令

docker compose version

```

#### 3.3 安装 Docker Compose 插件(替代方法)

```bash

# 安装Docker Compose插件

sudo apt install -y docker-compose-plugin

# 验证插件安装

docker compose version

第四部分:安装 SearXNG

创建安装目录

# 创建安装目录

sudo mkdir -p /opt/searxng

cd /opt/searxng

# 设置目录权限

sudo chown -R $USER:$USER /opt/searxng

创建 Docker Compose 配置文件

创建 docker-compose.yml 文件:

cat > docker-compose.yml << 'EOF'

version: '3.8'

services:

  searxng:

    image: searxng/searxng:latest

    container_name: searxng

    restart: unless-stopped

    ports:

      - "8080:8080"

    volumes:

      - ./searxng:/etc/searxng:rw

    environment:

      - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/

    cap_drop:

      - ALL

    cap_add:

      - CHOWN

      - SETGID

      - SETUID

      - DAC_OVERRIDE

    logging:

      driver: "json-file"

      options:

        max-size: "1m"

        max-file: "1"

EOF

创建环境变量文件

# 创建环境变量文件

cat > .env << 'EOF'

# SearXNG 配置

SEARXNG_HOSTNAME=localhost

# 可选:设置时区

TZ=Asia/Shanghai

EOF

初始化 SearXNG 配置

# 创建配置目录

mkdir -p searxng

# 启动容器以生成默认配置

docker-compose up -d

# 等待几秒钟后停止

sleep 10

docker-compose down

# 复制示例配置文件

cp searxng/settings.yml.example searxng/settings.yml

配置 SearXNG

编辑配置文件 searxng/settings.yml

# 使用nano或vim编辑配置文件

nano searxng/settings.yml

基本配置示例:

# 服务器设置

server:

  port: 8080

  bind_address: "0.0.0.0"

  secret_key: "your-secret-key-here"  # 生成随机密钥:openssl rand -hex 32

  

# 搜索引擎配置

engines:

  - name: google

    engine: google

    shortcut: g

    categories: general

    timeout: 5.0

    enable_http: false

    

  - name: bing

    engine: bing

    shortcut: b

    categories: general

    timeout: 5.0

    

  - name: duckduckgo

    engine: duckduckgo

    shortcut: d

    categories: general

    timeout: 5.0

# 搜索设置

search:

  safe_search: 0  # 0=关闭, 1=中等, 2=严格

  autocomplete: google

  default_lang: "zh-CN"

  

# 输出设置

outgoing:

  request_timeout: 10.0

  pool_connections: 100

  pool_maxsize: 100

  max_retries: 3

  max_redirects: 5

启动 SearXNG

# 启动服务

docker-compose up -d

# 查看运行状态

docker-compose ps

# 查看日志

docker-compose logs -f

第五部分:配置反向代理(可选 如果没有可以用默认的Caddy)

安装 Nginx

# 安装Nginx

sudo apt install -y nginx

# 启动Nginx

sudo systemctl start nginx

sudo systemctl enable nginx

创建 Nginx 配置文件

# 创建配置文件

sudo nano /etc/nginx/sites-available/searxng

添加以下内容:

server {

    listen 80;

    server_name your-domain.com;  # 替换为你的域名或服务器IP

    

    # 安全头部

    add_header X-Frame-Options "SAMEORIGIN" always;

    add_header X-Content-Type-Options "nosniff" always;

    add_header X-XSS-Protection "1; mode=block" always;

    add_header Referrer-Policy "no-referrer-when-downgrade" always;

    

    # 客户端设置

    client_max_body_size 10M;

    

    location / {

        proxy_pass http://127.0.0.1:8080;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header X-Forwarded-Host $host;

        

        # 超时设置

        proxy_connect_timeout 60s;

        proxy_send_timeout 60s;

        proxy_read_timeout 60s;

    }

    

    # 禁止访问敏感文件

    location ~ /\. {

        deny all;

    }

}

启用 Nginx 配置

# 创建符号链接

sudo ln -s /etc/nginx/sites-available/searxng /etc/nginx/sites-enabled/

# 删除默认配置

sudo rm -f /etc/nginx/sites-enabled/default

# 测试配置

sudo nginx -t

# 重启Nginx

sudo systemctl restart nginx

第六部分:配置 SSL/TLS(HTTPS)

使用 Certbot 获取 SSL 证书

# 安装Certbot

sudo apt install -y certbot python3-certbot-nginx

# 获取SSL证书

sudo certbot --nginx -d your-domain.com

# 按照提示操作,选择是否重定向HTTP到HTTPS

自动续期配置

# 测试自动续期

sudo certbot renew --dry-run

# 查看续期定时任务

sudo systemctl list-timers | grep certbot

第七部分:防火墙配置

# 安装UFW防火墙

sudo apt install -y ufw

# 配置防火墙规则

sudo ufw default deny incoming

sudo ufw default allow outgoing

# 开放必要端口

sudo ufw allow ssh

sudo ufw allow 80/tcp

sudo ufw allow 443/tcp

sudo ufw allow 8080/tcp  # 如果直接访问Docker端口

# 启用防火墙

sudo ufw enable

# 查看状态

sudo ufw status verbose

第八部分:访问和使用

访问方式

- 直接访问http://服务器IP:8080

- 通过Nginxhttp://your-domain.com

- HTTPS访问https://your-domain.com

验证安装

# 检查容器状态

docker-compose ps

# 检查服务是否响应

curl -I http://localhost:8080

# 查看日志

docker-compose logs --tail=50

第九部分:维护和管理

更新 SearXNG

cd /opt/searxng

# 拉取最新镜像

docker-compose pull

# 重启服务

docker-compose up -d

# 清理旧镜像

docker image prune -f

备份和恢复

备份配置

cd /opt/searxng

tar -czf searxng-backup-$(date +%Y%m%d-%H%M%S).tar.gz searxng/ docker-compose.yml .env

# 恢复配置

tar -xzf searxng-backup-YYYYMMDD-HHMMSS.tar.gz

docker-compose up -d

监控和日志

# 查看实时日志

docker-compose logs -f

# 查看容器资源使用

docker stats

# 查看容器详细信息

docker inspect searxng

第十部分:故障排除

常见问题

问题1:端口冲突

# 检查端口占用

sudo netstat -tlnp | grep :8080

# 修改docker-compose.yml中的端口

# 例如改为 8081:8080

问题2:权限问题

# 修复目录权限

sudo chown -R 1000:1000 /opt/searxng/searxng

# 检查SELinux状态(CentOS/RHEL)

getenforce

问题3:无法访问外网

# 测试网络连接

ping 8.8.8.8

# 测试DNS解析

nslookup google.com

# 检查Docker网络

docker network ls

docker network inspect searxng_default

第九部分:Cherry Studio 搜索工具配置

Cherry Studio官网已经提供安装指示,本文仅摘取关键步骤附上。链接如下:SearXNG 本地部署与配置 | Cherry Studio

类似地,仍然使用 Docker 部署。假设你已经按照官方教程在服务器上安装好了最新版 Docker CE,以下提供一条龙命令,适用于 Debian 系统下全新安装:

sudo apt update
sudo apt install git -y

# 拉取官方仓库
cd /opt
git clone https://github.com/searxng/searxng-docker.git
cd /opt/searxng-docker

# 如果你的服务器带宽很小, 可以设置为 false
export IMAGE_PROXY=true

# 修改配置文件
cat <<EOF > /opt/searxng-docker/searxng/settings.yml
# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true
server:
  # base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
  secret_key: $(openssl rand -hex 32)
  limiter: false  # can be disabled for a private instance
  image_proxy: $IMAGE_PROXY
ui:
  static_use_hash: true
redis:
  url: redis://redis:6379/0
search:
  formats:
    - html
    - json
EOF

如果你需要修改本地监听端口、复用本地已有的 nginx,可以编辑 docker-compose.yaml 文件,参考如下:

version: "3.7"

services:
# 如果不需要 Caddy 而复用本地已经有的 Nginx, 就把下面的去掉. 我们默认不需要 Caddy.
  caddy:
    container_name: caddy
    image: docker.io/library/caddy:2-alpine
    network_mode: host
    restart: unless-stopped
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data:rw
      - caddy-config:/config:rw
    environment:
      - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost}
      - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
# 如果不需要 Caddy 而复用本地已经有的 Nginx, 就把上面的去掉. 我们默认不需要 Caddy.
  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
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    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
    # 默认映射到宿主机 8080 端口, 假如你想监听 8000 就改成 "127.0.0.1:8000:8080"
    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}
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"

networks:
  searxng:

volumes:
# 如果不需要 Caddy 而复用本地已经有的 Nginx, 就把下面的去掉
  caddy-data:
  caddy-config:
# 如果不需要 Caddy 而复用本地已经有的 Nginx, 就把上面的去掉
  valkey-data2:

SearXNG 本地或在服务器部署成功后,接下来是 CherryStudio 的相关配置。

来到网络搜索设置页面,选择 Searxng :

直接输入本地部署的链接发现验证失败,此时不用担心:

因为直接部署后默认并没有配置 json 返回类型,所以无法获取数据,需要修改配置文件。

回到 Docker,来到 Files 标签页找到镜像中找到带标签的文件夹:

展开后继续往下翻,会发现另一个带标签的文件夹:

继续展开,找到 settings.yml 配置文件:

点击打开文件编辑器:

找到 78 行,可以看到类型只有一个 html

添加 json 类型后保存,重新运行镜像

重新回到 Cherry Studio 进行验证,验证成功:

地址既可以填写本地: http://localhost : 端口号 也可以填写 docker 地址:http://host.docker.internal : 端口号

One More Thing:可使用的实例

目前已经部署好了一个可以使用的SearXNG服务器,点击即用:https://sear.indigo-rain.online/

希望大家使用愉快,如果可以的话可以留言让我看到哦。

评论