1. 为什么你需要一个私有元搜索引擎?

每天使用主流搜索引擎时,你可能没意识到自己的搜索记录正在被收集和分析。这些数据会被用于精准广告投放,甚至可能被第三方获取。这就是为什么越来越多技术爱好者开始转向像SearXNG这样的开源元搜索引擎。

SearXNG最大的特点是它不会记录用户的任何搜索行为。它就像个"中间人",把你的查询分散到多个搜索引擎(如Google、Bing等),然后把结果汇总返回给你。整个过程不会留下任何痕迹,因为SearXNG根本不存储日志。我实测对比过,同样的搜索词在主流搜索引擎会触发相关广告,而在SearXNG上完全不会。

另一个实用功能是它能整合100+个数据源的结果。比如搜索技术问题时,你可以同时看到Stack Overflow、GitHub、官方文档等多个平台的答案,不用再逐个网站搜索了。对于经常需要查资料的程序员来说,这个功能简直太省时间了。

2. 5分钟快速搭建SearXNG服务

2.1 准备工作:安装Docker环境

在开始前,你需要确保系统已经安装好Docker。这里以Ubuntu系统为例,其他系统的安装方法也大同小异:

# 更新软件包索引
sudo apt-get update

# 安装必要的依赖
sudo apt-get install ca-certificates curl gnupg

# 添加Docker官方GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /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 \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证安装
sudo docker run hello-world

如果看到"Hello from Docker!"的提示信息,说明安装成功。建议将当前用户加入docker组,避免每次都要用sudo:

sudo usermod -aG docker $USER
newgrp docker

2.2 一键部署SearXNG容器

官方提供了docker-compose配置,部署非常简单:

# 创建项目目录
mkdir searxng && cd searxng

# 下载docker-compose.yml
wget https://raw.githubusercontent.com/searxng/searxng-docker/main/docker-compose.yml

# 启动服务
docker compose up -d

等待几分钟后,访问 http://localhost:8080 就能看到搜索界面了。如果要在其他设备访问,需要修改docker-compose.yml中的端口绑定:

services:
  searxng:
    ports:
      - "8080:8080"  # 改为"0.0.0.0:8080:8080"允许外部访问

3. 深度定制你的搜索引擎

3.1 修改配置文件实现个性化

SearXNG的所有配置都在./searxng/settings.yml文件中。修改前建议先停止服务:

docker compose down

主要配置项包括:

server:
  secret_key: "your_random_string_here" # 必填,用于加密会话
  base_url: "https://your.domain.com"  # 如果使用域名需要设置

search:
  safe_search: 0  # 0=关闭,1=中等,2=严格过滤
  autocomplete: "google"  # 自动补全源
  default_lang: "zh-CN"   # 默认搜索语言

ui:
  theme: simple  # 界面主题
  results_on_new_tab: true  # 在新标签打开结果

修改后重新启动服务即可生效:

docker compose up -d

3.2 添加自定义搜索引擎

在settings.yml中可以添加或移除搜索引擎:

engines:
  - name: google
    engine: google
    shortcut: g
    enabled: true
    tokens: []  # 如果需要API密钥在这里填写
    
  - name: bing
    engine: bing
    shortcut: b
    enabled: true
    
  - name: github
    engine: github
    shortcut: gh
    enabled: true

我建议保留3-5个主要搜索引擎即可,太多会影响搜索速度。实测下来,Google+Bing+Wikipedia的组合已经能满足大部分需求。

4. 生产环境部署最佳实践

4.1 使用Nginx反向代理

要让服务更稳定安全,建议用Nginx做反向代理:

server {
    listen 80;
    server_name search.yourdomain.com;
    
    location / {
        proxy_pass http://localhost: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;
    }
    
    # 强制HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name search.yourdomain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location / {
        proxy_pass http://localhost:8080;
        # 同上设置proxy headers
    }
}

4.2 设置系统服务自动重启

创建systemd服务确保容器自动运行:

sudo nano /etc/systemd/system/searxng.service

添加以下内容:

[Unit]
Description=SearXNG Container
After=docker.service
Requires=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker compose -f /path/to/searxng/docker-compose.yml up
ExecStop=/usr/bin/docker compose -f /path/to/searxng/docker-compose.yml down

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl enable searxng
sudo systemctl start searxng

5. 常见问题排查指南

5.1 容器启动失败排查步骤

如果docker compose up失败,可以查看日志:

docker compose logs

常见问题及解决方法:

  1. 端口冲突:修改docker-compose.yml中的端口号
  2. 配置文件错误:检查settings.yml的语法,特别是缩进
  3. 权限问题:确保searxng目录对docker用户可读

5.2 性能优化技巧

当用户增多时,可以调整这些参数:

environment:
  - UWSGI_WORKERS=8  # 根据CPU核心数设置
  - UWSGI_THREADS=4  # 每个worker的线程数

在docker-compose.yml中限制资源使用:

searxng:
  deploy:
    resources:
      limits:
        cpus: '2'
        memory: 2G

我在4核8G的服务器上实测,这个配置可以轻松应对50+并发搜索请求。

更多推荐