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 stars 和 2.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:访问服务
SearXNG Web 界面:http://localhost:8082
FreeAskInternet UI:http://localhost:89
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
配置文件部署步骤:
将 settings.yml 内容保存到 /mnt/pve/docker/searxng/searxng/local/settings.yml
将 limiter.toml 内容保存到 /mnt/pve/docker/searxng/searxng/limiter.toml
重启 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 集成步骤:
在 Dify 管理界面中找到"插件"模块
选择"添加插件"并搜索"SearXNG"
配置插件参数,包括 SearXNG 的 API 端点
保存配置并测试连接
在工作流中使用该插件进行联网搜索
3.2 fastgpt集成案例
打开fastgpt的任意应用,直接添加工具即可集成SearXNG和Firecrawl,集成的时候记得打开工具的激活按钮,配置相应的ip地址,如下图所示:
打开fastgpt应用
fastgpt添加SearXNG
fastgpt添加Firecrawl3.3 Deep Research webui集成案例
Deep Research webui的集成就更简单了,只需将官方的API Base URL换成你本地部署的FIrecrawl就行了,见下图:
Deep Research webui集成Firecrawl
Deep Research webui搜索效果展示4. 结论与建议
🚀这是一个超厉害的组合!🤯 SearXNG + Firecrawl 为我们的 Ollama 本地大模型插上了搜索的翅膀!🦋
💻 以前用本地大模型总觉得知识不够新?现在有了这个组合,再也不用担心信息滞后啦!🔥
🌟 就像给AI装上了超级搜索引擎,让它变得更聪明、更强大!🚀
部署建议
分阶段部署:先部署 SearXNG 验证基本功能,再集成 Firecrawl
资源规划:确保足够的内存和存储空间
网络配置:合理设置端口映射和网络隔离
监控告警:建立完善的监控体系
文中提到fastgpt、Deep Research webui等等超级好用的AI前端应用,后续将出系列文章详细讲解。

赵青崖
校验提示文案
赵青崖
校验提示文案