DeepFloodbeta

Docker Compose部署属于自己的免费搜索MCP(mcp-searxng和SearXNG后端)

Note

这里继续,我们提升一下MCP的使用体验.搜索这个功能应该是AI使用过程中最离不开的一项功能了,不然AI的知识永远是旧的,不能联网获取最新的讯息来辅助分析,给出更符合当前时间和情景的回答.目前比较简单的方式就是使用现成的商业搜索API:比如Tavily, Exa, Jina之类的,这些一般都有免费额度,效果也很好,但是总有人会需要一个基本上没什么限制,完全免费,可以自己部署,隐私友好的搜索服务,那么就是我们今天的主角SearXNG了.他综合了海量的搜索引擎,一次搜索,调用所有配置好的搜索引擎,别看可能会产生大量429等报错,但是总有那么几个引擎是能用的,搜索结果绝对不会少,而且你可以自己配置代理,多弄点socks代理,可以负载均衡,降低各类搜索引擎频率限制引起的报错.配合MCP服务器mcp-searxng可以让AI调用我们部署好的SearXNG.

开始部署:

SearXNG

创建searxng文件夹

mkdir searxng && cd searxng

配置环境变量

nano .env
SEARXNG_HOSTNAME=192.168.0.5:8080
SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME}/
SEARXNG_SETTINGS_FILE=/etc/searxng/settings.yml
SEARXNG_UWSGI_WORKERS=1
SEARXNG_UWSGI_THREADS=1
SEARXNG_SECRET=<用比较复杂的数字字母大小写密码>
UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4}
UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4}

我们在当前文件夹下再创建一个searxng文件夹,里面用来放置配置文件

mkdir searxng && cd searxng

编辑配置文件settings.yml

nano settings.yml

配置文件太长了,点此下载 (明明配置几个关键字段就可以运行了,根本不需要这么长,但是他的更新频率不低,而且经常破坏性更新,所以推荐是用他生成的最新完整配置文件,修改我说的1个或2个地方是最方便也是最保险的)

别看配置文件这么长,我们只需要修改其中1或2个地方即可

第一个地方:

formats:
  - html
  - json

这里默认只有html,我们需要再加一个json才能让AI正常调用

第二个地方:

proxies:
  all://:
    - socks5://192.168.0.253:1080
    - socks5://192.168.0.253:1081
    - socks5://192.168.0.253:1082

如果你需要配置代理来减少可能出现的频率问题,那么就取消这里的注释,并设置有效的socks代理,不然会报错无法使用
监听地址和端口无需在意,因为已经在环境变量里设置了,环境变量会覆盖配置文件里的配置
(需要注意的就是SearXNG更新频率比较高,而且会有很多破坏性更新,你每次拉取镜像更新以后重新运行容器,一般会提示你有新的settings.yml配置文件,searxng目录下就会多一个settings.yml.new文件,你只需要按照上面那样,添加下json或者添加下socks代理就行了.然后删除旧的settings.yml,重命名settings.yml.new为settings.yml以后重新运行容器即可.)

同目录下应该还会自动生成一个limiter.toml文件,但是这个文件我很久很久很久很久都没动过,而且我们是容器内网调用,应该也不需要配置限制器,暂时忽略.
但还是说下我的limiter.toml的内容:

# This configuration file updates the default configuration file
# See https://github.com/searxng/searxng/blob/master/searx/limiter.toml

[botdetection.ip_limit]
# activate 1ink_token method in the ip_lim1t method
filter_link_local = false
link_token = true

编辑docker-compose.yml

name: searxng
services:
  searxng-redis:
    container_name: searxng-redis
    image: docker.io/valkey/valkey:8-alpine
    command: valkey-server --save 30 1 --loglevel warning
    restart: unless-stopped
    volumes:
      - ./valkey_data:/data
    networks:
      - internal
    
  searxng:
    container_name: searxng
    image: searxng/searxng
    restart: unless-stopped
    env_file:
      - .env
    environment:
      - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-0.0.0.0}/
      - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4}
      - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4}
    volumes:
      - ./searxng:/etc/searxng
      - ./data:/usr/local/searxng/searx/data
    expose:
      - 8080
    networks:
      internal:
      cf_tunnel:
        ipv4_address: 192.168.0.5
    
networks:
  internal:
    internal: true
  cf_tunnel:
    external: true

拉起容器

docker compose up -d

查看容器是否正常运行

docker logs -f searxng

image
这里可以看到有警告和报错,但是这些报错我上个版本还没有,看报错详情是部分引擎找不到还有引擎的基础URL没配置,但是我用的是他自己生成的最新的配置文件,所以我们不管,这些都可以忽略,因为引擎实在太多了,只要不影响使用都可以忽略,你正常使用造成的429等报错也会在日志里输出大量Python报错,根据我的使用经验,无需理会即可,只要能正常用就行.

那么我们参照之前部署mcp-proxy-server的步骤,进入mcp-proxy-server目录修改下我们的配置文件config.json, 我们添加mcp-searxng这个MCP服务器

{
    "mcpServers": {
        "time": {
            "type": "stdio",
            "name": "Time",
            "active": true,
            "command": "uvx",
            "args": [
                "mcp-server-time",
                "--local-timezone=Asia/ShanGhai"
            ]
        },
        "searxng": {
            "type": "stdio",
            "name": "SearXNG",
            "active": true,
            "command": "npx",
            "args": [
                "-y",
                "mcp-searxng"
            ],
            "env": {
                "SEARXNG_URL": "http://192.168.0.5:8080"
            }
        }
    }
}

然后我们重启mcp-proxy-server,因为我有赛博洁癖,所以我一般都是docker compose down && docker compose up -d而不是docker restart,即使Compose配置文件没有变.

docker compose down && docker compose up -d

查看容器运行日志:

docker logs -f mcp-proxy-server

看下是否成功连接到新添加的mcp-searxng服务器了,没有报错就可以去Cherry Studio里调用试试看了.
image
至此我们MCP再添一员大将,我们拥有了自己的免费搜索MCP,无需担心严格的频率限制,搜索隐私,还有烦人的计费令牌了.

  • 学习了!

  • 这个会比谷歌厉害吗?

  • @EX #2 数量上肯定是不输的

  • 学习了

  • 好东西,帮顶

  • 感谢分享 Mark

  • 学习一下

  • 学习了