docker部署SearXNG + Firecrawl 打造本地大模型最强搜索引擎

2025-09-28 20:47:35 0点赞 9收藏 1评论
docker部署SearXNG + Firecrawl 打造本地大模型最强搜索引擎

前言

👋 老铁们,是不是也遇到过这样的困扰?好不容易把本地大模型部署好了,结果联网搜索要花钱买API,而且只能获取标题和简介,内容还不全!😭 别担心,今天我来教大家如何用SearXNG+Firecrawl打造完全免费、本地化的搜索引擎!🚀

🏗️ SearXNG是个开源元搜索引擎,能聚合70多个搜索结果,保护你的隐私!🔒 Firecrawl是个AI爬虫框架,帮你抓取完整网页内容。两者结合,就是本地大模型的完美搜索引擎!💪

📝 部署超简单:确保系统满足要求(Linux/macOS/Windows,Docker已安装,至少4GB内存)👌,然后创建项目目录,下载配置文件,启动服务!只需要几个命令搞定!👇

⚡ 优化配置后,屏蔽国外慢引擎,启用国内搜索引擎,搜索速度嗖嗖快!再也不用担心内容抓取不全了!🌟

🤖 已经成功集成到Dify、FastGPT和Deep Research等AI前端应用中,让你的本地大模型也能联网搜索!🌐

💡 小技巧:记得分配足够的内存资源哦!Firecrawl比较消耗资源,建议至少8GB内存!💾

👇 老铁们,你们平时部署本地大模型遇到过什么问题?欢迎在评论区分享!👇

1. 技术架构概述

1.1 SearXNG 核心特性与项目现状

SearXNG 是一个基于 AGPL-3.0 许可证的开源元搜索引擎,其核心价值在于聚合超过 70 个 搜索服务的结果,同时确保用户隐私不被跟踪或分析1。项目采用多语言技术栈(Python 80.5%、Shell 6.4%、HTML 5.6% 等),在 GitHub 上拥有 22.1k stars2.2k forks,展现出强大的社区支持度和持续活跃性1

最新提交记录(2025-09-28)显示项目正在修复 SQLite 数据库连接器的隔离级别问题,证明其维护状态良好1。在大模型应用生态中,SearXNG 已被 ChatNio 等应用采用,作为关键的联网搜索组件发挥作用2

1.2 Firecrawl 本地部署优势

Firecrawl 作为 AI 爬虫框架,其 2025 年 3 月 的多篇技术博客详细介绍了本地部署方案3。本地部署 Firecrawl 的核心优势包括:

  • 安全性增强:避免敏感数据通过云服务传输

  • 服务限制规避:不受云服务商的调用频率和规模限制

  • 集成灵活性:可通过 SEARXNG_ENDPOINT​ 环境变量与 SearXNG 深度集成3

2. 详细部署配置方案

2.1 Docker 容器化部署策略

2.1.1 环境准备

在开始部署之前,请确保您的系统满足以下基本要求:

系统要求:

  • Linux/macOS/Windows(WSL2)

  • Docker 和 Docker Compose 已安装

  • 至少 4GB 可用内存

  • 端口 8080、8082、3017、8009、89 等未被占用

安装 Docker 和 Docker Compose:

# Ubuntu/Debian sudo apt update sudo apt install docker.io docker-compose-plugin # CentOS/RHEL sudo yum install docker docker-compose # macOS brew install docker docker-compose # Windows(WSL2) wsl --install -d Ubuntu

验证安装:

docker --version docker-compose --version

2.1.2 SearXNG 容器配置

部署 SearXNG 时推荐使用 自定义 docker-compose.yaml 而非官方 SearXNG-Docker 项目,具体配置如下:

networks: searxng: driver: bridge services: valkey: container_name: valkey-searxng image: valkey/valkey:8-alpine command: valkey-server --save 30 1 --loglevel warning restart: always privileged: true user: "1000:1000" networks: - searxng volumes: - /mnt/pve/docker/searxng/valkey:/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: searxng/searxng:latest restart: always privileged: true networks: - searxng ports: - "8082:8080" volumes: - /mnt/pve/docker/searxng/searxng/local/settings.yml:/usr/local/searxng/searx/settings.yml - /mnt/pve/docker/searxng/searxng/:/etc/searxng:rw - /mnt/pve/docker/searxng/searxng/engines/baidu.py:/usr/local/searxng/searx/engines/baidu.py environment: - 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" backend: image: docker.io/nashsu/free_ask_internet:latest container_name: free_ask_internet privileged: true restart: on-failure ports: - "8009:8000" volumes: - /mnt/pve/docker/searxng/FreeAskInternet/config:/app/config networks: - searxng freeaskinternet-ui: image: docker.io/nashsu/free_ask_internet_ui:latest container_name: free_ask_internet_ui privileged: true ports: - "89:80" environment: BACKEND_HOST: "backend:8000" depends_on: - backend restart: always networks: - searxng

2.1.3 SearXNG 部署步骤

步骤 1:创建项目目录

mkdir -p /mnt/pve/docker/searxng cd /mnt/pve/docker/searxng

步骤 2:创建必要的子目录

mkdir -p searxng/local mkdir -p searxng/engines mkdir -p FreeAskInternet/config

步骤 3:创建 docker-compose.yaml 文件

nano docker-compose.yaml

将上述 SearXNG 容器配置代码粘贴到文件中并保存。

步骤 4:创建 settings.yml 配置文件

nano searxng/local/settings.yml

步骤 5:创建自定义搜索引擎

# 下载百度搜索引擎配置 wget -O searxng/engines/baidu.py https://raw.githubusercontent.com/searxng/searxng/master/searx/engines/baidu.py

步骤 6:启动服务

cd /mnt/pve/docker/searxng docker-compose up -d

步骤 7:验证服务状态

# 查看容器状态 docker-compose ps # 查看日志 docker-compose logs searxng docker-compose logs valkey

步骤 8:访问服务

2.1.4 优化配置文件

由于 SearXNG 集成了大量国外搜索引擎,导致国内搜索速度较慢,需要屏蔽部分速度慢的搜索引擎,启用国内搜索引擎。核心配置文件如下:

优化配置文件 settings.yml 如下:

use_default_settings: true # 打开默认引擎加载 general: debug: true engines: # 百度搜索 - name: baidu engine: baidu shortcut: baidu disabled: false # 360搜索 - name: 360search engine: 360search shortcut: 360so disabled: false # 搜狗搜索 - name: sogou engine: sogou shortcut: sogou disabled: false # 新增搜索引擎 - name: rightdao engine: custom shortcut: rd timeout: 5.0 disabled: false - name: crowdview engine: custom shortcut: cv timeout: 5.0 disabled: false - name: wikimini engine: wiki shortcut: wm timeout: 5.0 disabled: false - name: bbp engine: custom shortcut: bb timeout: 5.0 disabled: false # 原有引擎保留 - name: bing engine: bing shortcut: bi timeout: 5.0 disabled: false - name: bilibili engine: bilibili shortcut: bil timeout: 5.0 disabled: false server: secret_key: "keyofweidongdong" # 已修改 limiter: false image_proxy: true search: formats: - html - json # 启用JSON接口 ui: static_use_hash: true valkey: url: valkey://valkey:6379/0 doi_resolvers: oadoi.org: 'http://unpaywall.org/data' doi.org: 'https://doi.org/' doai.io: 'https://dissem.in/' sci-hub.se: 'https://sci-hub.se/' sci-hub.st: 'https://sci-hub.st/' sci-hub.ru: 'https://sci-hub.ru/' default_doi_resolver: 'oadoi.org'

优化 limiter.toml 配置文件如下:

# See https://github.com/searxng/searxng/blob/master/searx/limiter.toml [botdetection.ip_limit] # activate link_token method in the ip_limit method link_token = false

配置文件部署步骤:

  1. 将 settings.yml 内容保存到 /mnt/pve/docker/searxng/searxng/local/settings.yml

  2. 将 limiter.toml 内容保存到 /mnt/pve/docker/searxng/searxng/limiter.toml

  3. 重启 SearXNG 容器以应用新配置:

docker-compose restart searxng

2.2 Firecrawl Docker 部署与集成配置

2.2.1 环境准备

确保您的系统已安装以下工具:

  • Git

  • Docker 和 Docker Compose

  • 至少 8GB 可用内存(Firecrawl 较为消耗资源)

2.2.2 Firecrawl 部署步骤

步骤 1:克隆 Firecrawl 仓库

git clone https://github.com/firecrawl/firecrawl.git cd firecrawl

步骤 2:创建自定义网络

docker network create backend

步骤 3:创建 docker-compose.yaml 文件

nano docker-compose.yaml

将以下配置粘贴到文件中:

name: firecrawl x-common-service: &common-service image: ghcr.io/firecrawl/firecrawl container_name: firecrawl ulimits: nofile: soft: 65535 hard: 65535 networks: - backend extra_hosts: - "host.docker.internal:host-gateway" x-common-env: &common-env REDIS_URL: ${REDIS_URL:-redis://redis:6379} REDIS_RATE_LIMIT_URL: ${REDIS_URL:-redis://redis:6379} PLAYWRIGHT_MICROSERVICE_URL: ${PLAYWRIGHT_MICROSERVICE_URL:-http://playwright-service:3000/scrape} NUQ_DATABASE_URL: postgres://postgres:postgres@nuq-postgres:5432/postgres USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION} OPENAI_API_KEY: ${OPENAI_API_KEY} OPENAI_BASE_URL: ${OPENAI_BASE_URL} MODEL_NAME: ${MODEL_NAME} MODEL_EMBEDDING_NAME: ${MODEL_EMBEDDING_NAME} OLLAMA_BASE_URL: ${OLLAMA_BASE_URL} SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL} BULL_AUTH_KEY: ${BULL_AUTH_KEY} TEST_API_KEY: ${TEST_API_KEY} POSTHOG_API_KEY: ${POSTHOG_API_KEY} POSTHOG_HOST: ${POSTHOG_HOST} SUPABASE_ANON_TOKEN: ${SUPABASE_ANON_TOKEN} SUPABASE_URL: ${SUPABASE_URL} SUPABASE_SERVICE_TOKEN: ${SUPABASE_SERVICE_TOKEN} SELF_HOSTED_WEBHOOK_URL: ${SELF_HOSTED_WEBHOOK_URL} SERPER_API_KEY: ${SERPER_API_KEY} SEARCHAPI_API_KEY: ${SEARCHAPI_API_KEY} LOGGING_LEVEL: ${LOGGING_LEVEL} PROXY_SERVER: ${PROXY_SERVER} PROXY_USERNAME: ${PROXY_USERNAME} PROXY_PASSWORD: ${PROXY_PASSWORD} SEARXNG_ENDPOINT: ${SEARXNG_ENDPOINT} SEARXNG_ENGINES: ${SEARXNG_ENGINES} SEARXNG_CATEGORIES: ${SEARXNG_CATEGORIES} services: playwright-service: image: ghcr.io/firecrawl/playwright-service:latest container_name: firecrawl-playwright-service privileged: true environment: PORT: 3000 networks: - backend api: <<: *common-service container_name: firecrawl-api restart: always privileged: true environment: <<: *common-env HOST: "0.0.0.0" PORT: ${INTERNAL_PORT:-3002} WORKER_PORT: ${WORKER_PORT:-3005} ENV: local depends_on: - redis - playwright-service ports: - "${PORT:-3017}:${INTERNAL_PORT:-3002}" command: node dist/src/harness.js --start-docker networks: - backend redis: image: redis:alpine container_name: firecrawl-redis networks: - backend command: redis-server --bind 0.0.0.0 nuq-postgres: build: apps/nuq-postgres container_name: firecrawl-nuq-postgres privileged: true environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres networks: - backend ports: - "5432:5432" security_opt: - seccomp=unconfined networks: backend: driver: bridge name: default1 external: true

步骤 4:创建环境配置文件

cp apps/api/.env.example .env nano .env

步骤 5:配置环境变量 在 .env 文件中添加以下配置:

# 使用Searxng作为搜索引擎 SEARXNG_ENDPOINT=http://192.168.2.99:8082 # 可选配置:如果需要使用 OpenAI API OPENAI_API_KEY=your_openai_api_key_here OPENAI_BASE_URL=https://api.openai.com/v1 # 可选配置:如果需要使用 Ollama OLLAMA_BASE_URL=http://localhost:11434 # 可选配置:日志级别 LOGGING_LEVEL=info

步骤 6:构建和启动服务

# 构建镜像(可选,默认使用预构建镜像) docker-compose build # 启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs api docker-compose logs playwright-service

步骤 7:验证服务

# 测试 API curl -X POST http://localhost:3017/v1/scrape -H "Content-Type: application/json" -d '{"url": "https://example.com"}' # 查看服务日志 docker-compose logs --tail=50 api

2.2.3 Firecrawl 与 SearXNG 集成配置

Firecrawl 与 SearXNG 的集成主要通过环境变量实现:

步骤 1:确保 SearXNG 服务正在运行

# 在 SearXNG 目录下 cd /mnt/pve/docker/searxng docker-compose ps

步骤 2:更新 Firecrawl 环境配置

# 在 Firecrawl 目录下 cd /path/to/firecrawl nano .env

确保 SEARXNG_ENDPOINT 指向正确的 SearXNG 服务地址:

# 使用Searxng作为搜索引擎 SEARXNG_ENDPOINT=http://192.168.2.99:8082

步骤 3:重启 Firecrawl 服务

docker-compose restart api

步骤 4:测试集成

# 测试通过 Firecrawl 使用 SearXNG curl -X POST http://localhost:3017/v1/scrape -H "Content-Type: application/json" -d '{"url": "https://www.baidu.com/s?wd=test"}'

这种配置允许 Firecrawl 将爬取的内容直接送入 SearXNG 的索引流程,形成完整的内容获取-索引-搜索流水线3

2.3 API 接口配置细节

SearXNG 支持多种返回格式,搜索分类支持 general、images、videos 等 10 个类别,可指定具体搜索引擎(如 google、bing、duckduckgo)并进行分页控制(推荐 5 页以内)4

SearXNG API 使用示例:

import requests # 基本搜索 url = "http://localhost:8082/search" params = { "q": "人工智能", "format": "json", "category": "general", "engines": "baidu,bing", "pageno": 1 } response = requests.get(url, params=params) results = response.json() # 处理搜索结果 for result in results.get('results', []): print(f"标题: {result['title']}") print(f"链接: {result['url']}") print(f"摘要: {result.get('content', '')}") print("-" * 50)

3. 实际应用案例与社区实践

3.1 Dify 集成案例

B 站 UP 主"橘然是你的Bug"在 2025-03-11 的视频演示了 Dify 通过插件架构集成 SearXNG 的具体流程5。该案例显示:

  • 配置简便性:通过可视化界面配置 SearXNG 端点

  • 实用性验证:7876 播放量证明方案的社区关注度

  • 扩展性证明:插件架构支持多种搜索服务的灵活集成5

Dify 集成步骤:

  1. 在 Dify 管理界面中找到"插件"模块

  2. 选择"添加插件"并搜索"SearXNG"

  3. 配置插件参数,包括 SearXNG 的 API 端点

  4. 保存配置并测试连接

  5. 在工作流中使用该插件进行联网搜索

3.2 fastgpt集成案例

打开fastgpt的任意应用,直接添加工具即可集成SearXNG和Firecrawl,集成的时候记得打开工具的激活按钮,配置相应的ip地址,如下图所示:

打开fastgpt应用打开fastgpt应用fastgpt添加SearXNGfastgpt添加SearXNGfastgpt添加Firecrawlfastgpt添加Firecrawl

3.3 Deep Research webui集成案例

Deep Research webui的集成就更简单了,只需将官方的API Base URL换成你本地部署的FIrecrawl就行了,见下图:

Deep Research webui集成FirecrawlDeep Research webui集成FirecrawlDeep Research webui搜索效果展示Deep Research webui搜索效果展示

4. 结论与建议

🚀这是一个超厉害的组合!🤯 SearXNG + Firecrawl 为我们的 Ollama 本地大模型插上了搜索的翅膀!🦋

💻 以前用本地大模型总觉得知识不够新?现在有了这个组合,再也不用担心信息滞后啦!🔥

🌟 就像给AI装上了超级搜索引擎,让它变得更聪明、更强大!🚀

部署建议

  1. 分阶段部署:先部署 SearXNG 验证基本功能,再集成 Firecrawl

  2. 资源规划:确保足够的内存和存储空间

  3. 网络配置:合理设置端口映射和网络隔离

  4. 监控告警:建立完善的监控体系

文中提到fastgpt、Deep Research webui等等超级好用的AI前端应用,后续将出系列文章详细讲解。


展开 收起
1评论

  • 精彩
  • 最新
  • 平时自己部署的本地大模型没法联网搜索或者联网搜索还要花钱买api_key的看过来了,包完全免费,打通免费玩AI最后一公里。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
相关好价
最新文章 热门文章
9
扫一下,分享更方便,购买更轻松