内容
# OrioSearch 自托管 — 网络搜索 + 提取,带有用于 AI 代理的 MCP 服务器
OrioSearch 的一键自托管部署([OrioSearch](https://github.com/vkfolio/orio-search))
(兼容 Tavily 的 **网络搜索 + 内容提取** API)捆绑了一个 **MCP 服务器**,使您的 AI 代理(Claude Code、Claude Desktop、Cursor…)能够像原生工具一样进行网络搜索。
```
┌── docker compose up -d ────────────────────────────────────────────┐
│ orio-search REST API → http://localhost:8000 (/search /extract)
│ orio-mcp MCP 服务器 → http://localhost:7710/mcp (tavily_search, tavily_extract)
│ searxng + redis → 仅限内部使用(搜索后端 + 缓存)
└────────────────────────────────────────────────────────────────────┘
```
无需 LLM,无需 API 账户,无需云服务 — 它通过您自己的 SearXNG 搜索网络。
## 要求
- Docker + Docker Compose v2 (`docker compose version`)
- ~2 GB RAM 空闲,出站互联网访问
## 快速开始
```bash
git clone https://github.com/budhaz01/oriosearch-selfhost.git
cd oriosearch-selfhost
# 1. 为 SearXNG 设置其自己的密钥
sed -i "s/CHANGE_ME_openssl_rand_hex_32/$(openssl rand -hex 32)/" searxng/settings.yml
# 2. 构建 + 运行(首次构建会克隆上游引擎 + 构建 — 几分钟)
docker compose up -d --build
# 3. 检查是否健康
docker compose ps
curl http://localhost:8000/health
```
## 使用 REST API
```bash
curl -X POST http://localhost:8000/search \
-H "Content-Type: application/json" \
-d '{"query":"kubernetes 最佳实践 2026","max_results":5}'
curl -X POST http://localhost:8000/extract \
-H "Content-Type: application/json" \
-d '{"urls":["https://example.com"],"format":"markdown"}'
```
响应格式与 Tavily 兼容(`{query, answer, results[], images[], response_time}`)。
## 使用 MCP 服务器(Claude Code、Cursor、Claude Desktop)
MCP 服务器暴露了两个工具 — `tavily_search` 和 `tavily_extract`。
**Claude Code(CLI):**
```bash
claude mcp add orio --transport http http://localhost:7710/mcp
```
**Claude Desktop / Cursor(JSON 配置):**
```json
{
"mcpServers": {
"orio": { "type": "http", "url": "http://localhost:7710/mcp" }
}
}
```
然后您的代理可以搜索网络。(在 localhost 上不需要密钥 — 请参阅以下安全公开内容。)
## 配置
- **`config.yaml`** — 引擎:搜索后端、缓存、速率限制、身份验证、LLM。
- **`searxng/settings.yml`** — SearXNG 后端(引擎、密钥)。
- **`docker-compose.yml`** — 端口、资源。
### 可选:AI 答案(`include_answer`)
搜索/提取功能无需任何 LLM。 要在 `answer` 字段中获取 AI 编写的摘要,请在 `config.yaml` 中设置 `llm.enabled: true`,并将 `base_url` / `api_key` / `model` 指向任何 OpenAI 兼容的端点(OpenAI、本地 Ollama、GLM/Zhipu、…)。
## 公开访问(阅读后再操作)
默认情况下,两个端口都绑定到 **127.0.0.1** — 只有此主机可以访问它们。 要服务其他机器或互联网:
1. **引擎** — 设置 `auth.enabled: true` + 在 `config.yaml` 中添加 `api_keys` 下的密钥(客户端然后发送 `Authorization: Bearer <key>`),然后将 `orio-search` 端口从 `127.0.0.1:8000:8000` 更改为 `8000:8000`(或使用反向代理 + TLS)。
2. **MCP 服务器** — `orio-mcp` **没有内置身份验证**。 请勿直接公开;请将其放在检查令牌的反向代理后面(或保持在 localhost / LAN 上)。
## 管理
```bash
docker compose logs -f orio-search # 日志
docker compose restart orio-search # 重启
docker compose pull && docker compose up -d --build # 更新
docker compose down # 停止
```
## 致谢
引擎:[vkfolio/orio-search](https://github.com/vkfolio/orio-search)。MCP 服务器改编自 [Tavily MCP](https://github.com/tavily-ai/tavily-mcp),用于调用 OrioSearch 而非 api.tavily.com。