Kubernetes

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),精准获取特定来源信息。

Netbox 迁移到 k3s

本文记录了将 Netbox 从旧环境迁移到 k3s 集群的过程。

迁移步骤

1. 备份数据库

使用 pg_dump 导出 Netbox 数据库,排除变更日志表以减小备份体积:

pg_dump --username netbox --password --host localhost --exclude-table-data=extras_objectchange netbox > netbox.sql

2. 删除旧 Pod

为了避免 Pod 竞争和锁定问题,先删除现有的 Netbox Pod:

kubectl delete po netbox-68cbd8b854-2hvgp

3. 修改 PostgreSQL 认证方式

临时禁用密码认证

# 进入 PostgreSQL Pod
kubectl exec -it netbox-postgresql-0 -- sed -ibak 's/^\([^#]*\)md5/\1trust/g' /opt/bitnami/postgresql/conf/pg_hba.conf

# 重新加载配置
kubectl exec -it netbox-postgresql-0 -- pg_ctl reload

创建新数据库和用户

kubectl exec -it netbox-postgresql-0 -- psql -U postgres

DROP DATABASE netbox;
CREATE DATABASE netbox;
ALTER USER netbox WITH PASSWORD 'balabalabala';
ALTER DATABASE netbox OWNER TO netbox;

-- PostgreSQL 15 及以上版本需要
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;

恢复密码认证

kubectl exec -it netbox-postgresql-0 -- sed -i 's/^\([^#]*\)trust/\1md5/g' /opt/bitnami/postgresql/conf/pg_hba.conf
kubectl exec -it netbox-postgresql-0 -- pg_ctl reload

4. 恢复数据库

kubectl exec -it netbox-postgresql-0 -- sh -c "PGPASSWORD=balabalabala psql -U netbox -d netbox < /tmp/netbox.sql"