集成MCP的OSS搜索基础架构
完整的开源搜索基础设施,通过在Kubernetes/Docker和MCP服务器集成上部署来取代商业API(Tavily、Brave search、Serper)。
📋 目录
🎯 概述
该项目提供了一个生产就绪的自托管搜索基础设施,包括:
- SearXNG:元搜索引擎聚合来自70多个搜索引擎的结果
- Crawl4AI:使用AI驱动的内容提取进行高级网络爬行
- 瑞迪斯:高性能缓存层
- MCP服务器:FastMCP(Python)服务器将搜索和抓取工具暴露给AI代理
- PostgreSQL:可选分析数据库
主要优势
✅ 隐私:无跟踪,完全数据控制\ ✅ 成本效益高:无限制搜索与每次查询API定价\ ✅ 可定制的:完全控制搜索引擎和提取策略\ ✅ 可扩展的:Kubernetes支持自动扩展\ ✅ 人工智能原生:MCP集成,实现无缝AI代理访问
🏗️ 建筑
Client Apps → FastMCP Server (Python) → SearXNG / Crawl4AI → External Search Engines
→ Redis Cache (optional)简单、干净、生产就绪!
📦 先决条件
必需
- Docker 24.0+
- Docker编写2.20+或Kubernetes 1.27+
- 最低4GB RAM(建议8GB)
- 20GB磁盘空间
可选的
- kubectl(用于Kubernetes部署)
- Node.js 20+(用于本地MCP开发)
- Python 3.11+(用于Crawl4AI开发)
🚀 快速开始
选项1:自动设置(推荐)
# Clone or download the project files
cd oss-search-infrastructure
# Make setup script executable
chmod +x setup.sh
# Run setup
./setup.sh脚本将:
- 检查先决条件
- 创建目录结构
- 生成安全机密
- 构建Docker镜像
- 启动所有服务
- 显示访问信息
选项2:手动设置
# 1. Create necessary files (if not already present)
mkdir -p searxng crawl4ai-service mcp-server nginx postgres
# 2. Set environment variables
cp .env.example .env
# Edit .env with your values
# 3. Build and start services
docker-compose build
docker-compose up -d
# 4. Check service health
docker-compose ps
docker-compose logs -f验证
服务运行后,测试每个组件:
# Test SearXNG
curl "http://localhost:8080/search?q=test&format=json"
# Test Crawl4AI
curl -X POST http://localhost:8000/crawl \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
# Test Redis
docker exec -it redis-cache redis-cli ping
# Test MCP Server
curl http://localhost:8000/health🔧 组件详情
SearXNG(港口8080)
元搜索引擎,查询多个搜索引擎并聚合结果。
特征:
- 70+支持的搜索引擎
- 用于编程访问的JSON API
- 注重隐私(无跟踪)
- 可定制的排名
配置: searxng/settings.yml
Crawl4AI(端口8000)
具有人工智能内容提取功能的高级网络爬虫。
特征:
- 通过Playwright进行JavaScript渲染
- 多种提取策略(自动、LLM、余弦)
- 屏幕截图
- 媒体提取
- 缓存支持
API终点:
POST /crawl-单URL爬网POST /crawl/batch-批量爬行GET /result/{job_id}-检索结果GET /health-健康检查
MCP服务器(端口8000)
FastMCP(Python)服务器通过模型上下文协议将搜索基础设施暴露给AI代理。
工具:
web_search-使用SearXNG搜索网络web_crawl-使用Crawl4AI对URL进行深度抓取extract_content-从页面中提取特定内容analyze_search_results-分析搜索结果并对其进行排名
看: MCP文件 了解详情。
Redis(端口6379)
搜索结果和爬网内容的内存缓存。
配置:
- 搜索缓存TTL:1小时(可配置)
- 爬网缓存TTL:24小时(可配置)
- 最大内存:512MB(可配置)
- 驱逐策略:所有密钥lru
🤖 MCP服务器
快速开始
MCP服务器已部署并正在运行。看 MCP文件 用于:
- 快速入门指南
- 客户端配置
- 网关设置
- 工具文档
配置MCP客户端
对于Cursor/Claude Desktop或其他MCP客户端:
{
"mcpServers": {
"oss-search": {
"transport": "sse",
"url": "http://192.168.0.220:8000/sse"
}
}
}对于Kubernetes(内部):
{
"mcpServers": {
"oss-search": {
"transport": "sse",
"url": "http://mcp-server-fastmcp.search-infrastructure.svc.cluster.local:8000/sse"
}
}
}使用工具
配置后,AI代理可以使用搜索工具:
示例:网络搜索
User: "Search for recent AI developments"
Agent: [Calls web_search tool]
{
"query": "recent AI developments 2024",
"engines": ["google", "duckduckgo"],
"language": "en"
}示例:Web爬网
User: "Get the full content from this article: https://example.com/article"
Agent: [Calls web_crawl tool]
{
"url": "https://example.com/article",
"extraction_strategy": "llm",
"screenshot": false
}🚢 部署选项
Docker Compose(开发/小规模)
已配置!只需运行:
docker-compose up -d赞成的意见:
- 简单设置
- 资源开销低
- 易于调试
欺骗:
- 单主机限制
- 无内置自动缩放功能
- 手动高可用性
Kubernetes(生产)
全面的Kubernetes清单在 k8s/ 目录。
部署到Kubernetes:
# Create namespace
kubectl apply -f k8s/namespace.yaml
# Create secrets
kubectl create secret generic search-secrets \
--from-literal=searxng-secret=$(openssl rand -hex 32) \
--from-literal=db-password=$(openssl rand -hex 16) \
-n search-infrastructure
# Deploy services
kubectl apply -f k8s/deployments/
kubectl apply -f k8s/services/
kubectl apply -f k8s/ingress/
# Check status
kubectl get pods -n search-infrastructure
kubectl get svc -n search-infrastructure赞成的意见:
- 自动缩放
- 自我修复
- 负载平衡
- 多主机部署
监控:
# View logs
kubectl logs -f -n search-infrastructure deployment/mcp-server-fastmcp
# Scale deployment
kubectl scale deployment mcp-server-fastmcp --replicas=5 -n search-infrastructure
# View resource usage
kubectl top pods -n search-infrastructure⚙️ 配置
环境变量
关键环境变量 .env:
# SearXNG
SEARXNG_SECRET=your-secret-key-here
# Database
DB_PASSWORD=your-db-password
# Cache TTLs (seconds)
CACHE_TTL_SEARCH=3600 # 1 hour
CACHE_TTL_CRAWL=86400 # 24 hours
# MCP Server
NODE_ENV=production
LOG_LEVEL=infoSearXNG发动机
在中启用/禁用搜索引擎 searxng/settings.yml:
engines:
- name: google
engine: google
shortcut: go
# disabled: false
- name: brave
engine: brave
shortcut: br
# disabled: false速率限制
在中配置 searxng/limiter.toml:
[botdetection.ip_limit.link_token]
suspicious_ip_window = 60
suspicious_ip_max = 3📊 API使用
SearXNG API
基本搜索:
curl "http://localhost:8080/search?q=kubernetes&format=json"高级搜索:
curl "http://localhost:8080/search" \
-G \
--data-urlencode "q=machine learning" \
--data-urlencode "engines=google,duckduckgo" \
--data-urlencode "categories=general" \
--data-urlencode "language=en" \
--data-urlencode "format=json"Crawl4AI API
简单爬行:
curl -X POST http://localhost:8000/crawl \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"extraction_strategy": "auto"
}'高级爬行:
curl -X POST http://localhost:8000/crawl \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"extraction_strategy": "llm",
"chunking_strategy": "markdown",
"screenshot": true,
"wait_for": "css:.main-content",
"timeout": 30
}'批量爬网:
curl -X POST http://localhost:8000/crawl/batch \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://example1.com",
"https://example2.com"
],
"extraction_strategy": "auto"
}'📈 监控
日志
查看所有日志:
docker-compose logs -f查看具体服务:
docker-compose logs -f mcp-server
docker-compose logs -f searxng
docker-compose logs -f crawl4ai指标
连接到Redis Commander(调试模式):
docker-compose --profile debug up -d redis-commander
# Access at http://localhost:8081PostgreSQL分析
连接到PostgreSQL并运行分析查询:
docker exec -it search-analytics psql -U searchuser -d search_analytics-- View search statistics
SELECT * FROM search_stats LIMIT 10;
-- View popular queries
SELECT * FROM popular_queries LIMIT 20;
-- View crawl job status
SELECT status, COUNT(*)
FROM crawl_jobs
GROUP BY status;🔍 故障排除
服务无法启动
检查日志:
docker-compose logs [service-name]常见问题:
- 端口冲突:更改中的端口
docker-compose.yml - 内存限制:增加Docker内存分配
- 缺少文件:确保所有配置文件都存在
SearXNG未返回任何结果
可能的原因:
- 搜索引擎正在阻止请求
- 超出费率限制
- 网络连接问题
解决:
# Check SearXNG logs
docker-compose logs searxng
# Test search engines individually
curl "http://localhost:8080/search?q=test&engines=duckduckgo&format=json"
# Restart SearXNG
docker-compose restart searxngCrawl4AI超时
增加超时时间:
# In crawl request
{
"url": "https://example.com",
"timeout": 60 # Increase from default 30
}检查浏览器安装:
docker exec -it crawl4ai-service playwright install chromiumRedis连接错误
检查Redis状态:
docker exec -it redis-cache redis-cli ping
# Should return: PONG清除缓存:
docker exec -it redis-cache redis-cli FLUSHALL内存使用率高
检查容器统计信息:
docker stats解决:
- 减少缓存TTL
- 限制并发爬网
- 水平而非垂直缩放
📚 额外资源
文档文件
oss-search-architecture.md-完整的架构文档docker-compose.yml-Docker编写配置k8s/-Kubernetes清单mcp-server-fastmcp/-FastMCP服务器(Python)- 活跃的docs/mcp/-MCP服务器文档crawl4ai-service/-Crawl4AI服务包装器
外部链接
🤝 贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支
- 进行更改
- 彻底测试
- 提交拉取请求
📄 许可证
这个项目是开源的,可以在MIT许可证下使用。
🆘 支持
对于问题和疑问:
- 检查故障排除部分
- 审核日志:
docker-compose logs - 在GitHub上打开一个问题
🎉 致谢
- SearXNG团队为优秀的元搜索引擎
- Crawl4AI用于强大的网络爬行库
- MCP规范的拟人化
- 开源社区
______________________________________________________________________
内置于❤️ 面向开源社区
