SearXNG:开源隐私保护元搜索引擎及Kubernetes部署指南

简介

SearXNG 是一款开源、隐私友好的元搜索引擎,它从多达 279 个搜索服务中聚合搜索结果,而不会跟踪或记录用户的搜索行为。与传统搜索引擎不同,SearXNG 不会构建用户画像,也不存储个人数据,为用户提供真正的匿名搜索体验。此外,SearXNG 还支持通过 Tor 网络进行匿名搜索,进一步保护用户隐私。

主要优点

1. 隐私保护

  • 无跟踪:不记录用户搜索历史,不存储 Cookie 或个人信息。
  • 无画像:不会根据搜索行为构建用户画像,避免个性化广告和信息茧房。
  • Tor 支持:可通过 Tor 网络匿名访问,适合对隐私要求极高的用户。

2. 开源透明

  • 代码完全开源,任何人都可以审查、修改或部署自己的实例。
  • 无后门,无商业利益驱动,确保搜索结果的公正性。

3. 多引擎聚合

  • 支持 279 个搜索引擎,涵盖通用搜索、图片、视频、新闻、学术、地图等多个类别。
  • 用户可自定义启用或禁用特定搜索引擎,灵活选择搜索来源。

4. 自定义搜索语法

  • 支持通过 ! 前缀选择搜索引擎或类别,例如:
    • !g:使用 Google 搜索
    • !images:搜索图片
    • !map:搜索地图
  • 支持 :language 语法指定搜索语言,例如 :zh 搜索中文结果。
  • 支持 DuckDuckGo 的 !! 外部跳转功能,快速跳转到外部网站。

5. 无广告

  • 纯净的搜索结果,无广告干扰。

6. 自托管

  • 用户可以部署自己的 SearXNG 实例,完全掌控数据和搜索体验。

7. AI Agent 调用支持

  • JSON API:SearXNG 提供 /search 端点,支持 format=json 参数,返回结构化 JSON 数据,方便 AI Agent 直接解析。
  • 零成本无限调用:自建实例无 API 调用次数限制,无需付费,适合 Deep Research、RAG 等高频搜索场景。
  • LangChain 集成:官方提供 SearxSearchWrapperSearxSearchResults 工具,一行代码即可接入 LangChain Agent。
  • MCP Server:社区已有 SearXNG MCP Server 实现,支持 Claude Desktop、Cursor 等 MCP 客户端直接调用。
  • 多引擎切换:Agent 可通过 engines 参数指定搜索引擎(如 githubarxivwikipedia),精准获取特定来源信息。

Kubernetes 部署指南

前提条件

  • Kubernetes 集群(v1.20+)
  • Helm(v3+)
  • Traefik 或其他 Ingress Controller(可选)

1. 使用 Helm 安装 SearXNG

添加 Helm 仓库

helm repo add kubito https://kubitodev.github.io/helm-charts
helm repo update

准备 values.yaml 配置文件

# values.yaml
image:
  repository: searxng/searxng
  tag: latest
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 8080

ingress:
  enabled: true
  className: "traefik"
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
    traefik.ingress.kubernetes.io/router.tls: "true"
  hosts:
    - host: searxng.yourdomain.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: searxng-tls
      hosts:
        - searxng.yourdomain.com

resources:
  limits:
    cpu: 1000m
    memory: 1Gi
  requests:
    cpu: 500m
    memory: 512Mi

# 生成随机密钥(安装时自动生成)
searxng:
  secretKey: ""

安装 SearXNG

helm install searxng kubito/searxng -f values.yaml

2. 使用 Kubernetes Manifest 部署

准备 configmap-template.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: searxng-config
data:
  settings.yml: |
    use_default_settings: true
    server:
      secret_key: "${SEARXNG_SECRET_KEY}"
    search:
      safe_search: 1
      autocomplete: "google"
    engines:
      - name: google
        disabled: false
      - name: bing
        disabled: false    

准备 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: searxng
spec:
  replicas: 1
  selector:
    matchLabels:
      app: searxng
  template:
    metadata:
      labels:
        app: searxng
    spec:
      containers:
      - name: searxng
        image: searxng/searxng:latest
        ports:
        - containerPort: 8080
        env:
        - name: SEARXNG_SECRET_KEY
          valueFrom:
            secretKeyRef:
              name: searxng-secret
              key: secret_key
        volumeMounts:
        - name: config-volume
          mountPath: /etc/searxng
      volumes:
      - name: config-volume
        configMap:
          name: searxng-config

准备 service.yaml

apiVersion: v1
kind: Service
metadata:
  name: searxng
spec:
  selector:
    app: searxng
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

准备 ingress.yaml(Traefik 示例)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: searxng-ingress
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
    traefik.ingress.kubernetes.io/router.tls: "true"
spec:
  ingressClassName: traefik
  rules:
  - host: searxng.yourdomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: searxng
            port:
              number: 8080
  tls:
  - hosts:
    - searxng.yourdomain.com
    secretName: searxng-tls

部署步骤

# 生成随机密钥
export SEARXNG_SECRET_KEY=$(openssl rand -hex 32)
kubectl create secret generic searxng-secret --from-literal=secret_key=$SEARXNG_SECRET_KEY

# 部署 ConfigMap
envsubst < configmap-template.yaml | kubectl apply -f -

# 部署 Deployment、Service、Ingress
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml

如何使用 SearXNG

基本搜索

  • 在搜索框中输入关键词,按回车即可搜索。
  • 支持通用搜索、图片、视频、新闻、地图等多个类别。

高级搜索语法

  • !engine:指定搜索引擎,例如 !g 使用 Google,!bing 使用 Bing。
  • !category:指定搜索类别,例如 !images 搜索图片,!videos 搜索视频。
  • :language:指定搜索语言,例如 :zh 搜索中文结果。
  • !!bang:使用 DuckDuckGo 的外部跳转功能,例如 !!w 维基百科 直接跳转到维基百科。

自定义偏好设置

  • 点击右上角的 “Preferences” 进入设置页面。
  • 可自定义搜索引擎、搜索语言、安全搜索级别等。
  • 支持导出/导入设置,方便备份和迁移。

AI Agent 调用方法

1. 启用 JSON API

settings.yml 中添加 json 格式支持:

search:
  formats:
    - html
    - json

2. 直接调用 API

curl -kLX GET “https://searxng.yourdomain.com/search?q=langchain&format=json”

返回结构化 JSON,包含 resultsanswerssuggestions 等字段,Agent 可直接解析。

3. LangChain 集成

from langchain_community.tools.searx_search.tool import (
    SearxSearchResults,
    SearxSearchWrapper,
)

wrapper = SearxSearchWrapper(searx_host=https://searxng.yourdomain.com)

# 通用搜索工具
general_tool = SearxSearchResults(
    name=WebSearch,
    wrapper=wrapper,
    kwargs={num_results: 10},
)

# 指定引擎搜索(如 GitHub)
github_tool = SearxSearchResults(
    name=Github,
    wrapper=wrapper,
    kwargs={engines: [github]},
)

# 学术搜索
arxiv_tool = SearxSearchResults(
    name=Arxiv,
    wrapper=wrapper,
    kwargs={engines: [arxiv]},
)

4. 配置示例(settings.yml 完整版)

use_default_settings: true
server:
  secret_key: “your-secret-key”
  bind_address: “0.0.0.0”
  port: 8080
search:
  safe_search: 1
  autocomplete: “google”
  formats:
    - html
    - json
engines:
  - name: google
    disabled: false
  - name: duckduckgo
    disabled: false
  - name: wikipedia
    disabled: false
  - name: github
    disabled: false
  - name: arxiv
    disabled: false

安全最佳实践

  1. 启用 HTTPS:确保所有流量通过 HTTPS 加密传输。
  2. 限制访问速率:使用 Traefik 或其他 Ingress Controller 限制访问频率,防止滥用。
  3. 定期更新:保持 SearXNG 和 Kubernetes 集群的版本更新,修补安全漏洞。
  4. 监控日志:监控访问日志,及时发现异常行为。

总结

SearXNG 是一款强大的开源元搜索引擎,专注于隐私保护和用户自主性。通过 Kubernetes 部署 SearXNG,可以轻松实现高可用、可扩展的搜索服务,适合个人、团队或组织自托管使用。无论是追求隐私保护,还是希望摆脱商业搜索引擎的广告和跟踪,SearXNG 都是一个理想的选择。


参考链接