Refocus docs around MySearch Proxy

This commit is contained in:
skernelx committed 2026-03-17 09:29:35 +08:00
1 parent 27fd9f6b3c
commit 638c690ae9
5 files changed
+169 -815

No files matched your search

+43 -267
View File
@@ -2,27 +2,25 @@
[English Guide](./README_EN.md)
这是现在这套真正可用的多服务注册器,已经把 **Tavily** 和
**Firecrawl** 放进同一个启动台:
这是当前的多服务注册器与聚合 API 上游工具,聚焦两件事:
- **Tavily**:AI 搜索 API
- **Firecrawl**:网页抓取 API
- 注册 `Tavily` / `Firecrawl` key
- 验证 key 是否真实可用,并把可用 key 提供给统一搜索层
和早期零散脚本不一样,这版已经统一收口到一条稳定链路:
它不是 `MySearch` 的正式产品仓库。
如果你要部署公开可用的统一搜索控制台、MCP、Skill 和 Social / X
接入,请直接使用独立项目:
- [MySearch-Proxy](https://github.com/skernelx/MySearch-Proxy)
## 这个仓库负责什么
- 本地真实浏览器注册
- Tavily 本地 Turnstile Solver
- 邮箱 API 自动收验证码 / 验证链接
- 提取到 API Key 后立刻做真实调用验证
- 可选自动上传到多服务代理池
目标很直接:把 Tavily / Firecrawl 的注册、验证、落盘、上传全部放到一套真正能长期跑的工作流里。
Cloudflare 通用无限别名域名邮箱教程见:
[Cloudflare 邮件设置详解](./docs/Cloudflare%E9%82%AE%E4%BB%B6%E8%AE%BE%E7%BD%AE%E8%AF%A6%E8%A7%A3.md)
英文版说明见:
[Cloudflare Mail Setup Guide](./docs/Cloudflare-Mail-Setup-Guide.md)
- 可选自动上传到统一代理池
- 可作为 `MySearch` / `MySearch-Proxy` 的 provider 上游之一
## Features
@@ -33,27 +31,19 @@ Cloudflare 通用无限别名域名邮箱教程见:
- 并发注册:支持批量和并发执行
- 后台浏览器模式:默认 headless,必要时可切前台排查
- 真实可用性验证:拿到 key 后马上调用官方接口
- 自动上传到代理池:上传时会带上服务标记,服务器能自动识别 Tavily / Firecrawl 并写入各自池子
- 代理控制台:支持独立 Key 池、独立 Token 池和真实额度同步
- 自动上传到代理池:上传时会带上服务标记,服务端能自动识别 Tavily / Firecrawl 并写入各自池子
- 适合作为统一搜索网关的上游:给 `MySearch-Proxy` 提供稳定的 key 来源
- 跨平台启动:Windows / macOS / Linux 都能直接跑
## Screenshots
## 配套工作台预览
### 多服务启动台
### MySearch Proxy 首屏
![Multi Service Launcher](./docs/screenshots/multi-service-launcher.jpg)
![MySearch Console Hero](./docs/screenshots/mysearch-console-hero.jpg)
### 并发注册与真实验证
### MySearch Proxy 工作台
![Registration Success](./docs/screenshots/registration-success.jpg)
### Proxy 工作台切换
![Proxy Workspace Switcher](./docs/screenshots/proxy-workspace-switcher.jpg)
### Proxy Key 池详情
![Proxy Key Pool](./docs/screenshots/proxy-key-pool.jpg)
![MySearch Console Workspaces](./docs/screenshots/mysearch-console-workspaces.jpg)
## Quick Start
@@ -70,7 +60,7 @@ cd tavily-key-generator
cp .env.example .env
```
编辑 `.env`,填好你的邮箱链路和可选上传配置。
编辑 `.env`,填好邮箱配置和可选上传配置。
### 3. Run
@@ -80,7 +70,7 @@ macOS / Linux:
python3 run.py
```
或:
或者:
```bash
./start_auto.sh
@@ -92,251 +82,37 @@ Windows:
start_auto.bat
```
## How It Works
## 推荐搭配方式
程序启动后会自动执行:
如果你希望把注册出来的 key 接成公开可用的统一搜索服务,推荐直接搭配:
1. 选择要注册的服务(Tavily / Firecrawl)
2. 创建或复用 `venv`
3. 安装 Python 依赖
4. 安装 Camoufox / Playwright 浏览器依赖
5. 读取 `.env`
6. 检查邮箱 provider 配置
7. 如果配置了多个域名,提示选择本轮使用的域名
8. 输入注册数量
9. 输入并发数
10. 选择是否自动上传到服务器
11. 如果是 Tavily,自动启动本地 Solver
12. 自动处理邮箱验证码与密码设置
13. 遇到随机 challenge 时自动恢复(Tavily)
14. 提取 API Key
15. 真实调用 API 验证
16. 保存到 `accounts.txt` 或 `firecrawl_accounts.txt`
17. 如已开启上传,则继续上传到服务器
- [MySearch-Proxy](https://github.com/skernelx/MySearch-Proxy)
## Runtime Flow
它负责:
```text
run.py
-> choose service (Tavily / Firecrawl)
-> load .env
-> choose domain
-> input count / concurrency
-> choose upload or not
-> [Tavily only] start Turnstile Solver
-> create mailbox
-> open signup page
-> [Tavily only] solve Turnstile locally
-> receive email verification link
-> set password
-> [Tavily only] recover random password-page challenge
-> enter dashboard
-> extract API key
-> verify API key with real API call
-> save / upload
```
- 统一控制台
- Tavily / Firecrawl / Social / X 统一接线
- MCP + Skill 安装说明
- 官方接口与 compatible 网关双接入
- 面向 Codex / Claude Code 的最终接入方式
## Configuration
当前仓库则继续专注于:
完整配置示例见 [`.env.example`](./.env.example)。
- 注册可用 key
- 做真实可用性验证
- 提供聚合 API 上游能力
### Cloudflare Mail API
`proxy/` 目录目前仅保留给旧部署或迁移场景,不再作为主推荐入口。
```env
EMAIL_PROVIDER=cloudflare
EMAIL_API_URL=https://your-mail-api.example.com
EMAIL_API_TOKEN=replace-with-your-token
EMAIL_DOMAIN=example.com
EMAIL_DOMAINS=example.com,example.org
```
## MySearch 的关系
说明:
这里的 `tavily-key-generator` 只负责:
- 单域名可只填 `EMAIL_DOMAIN`
- 多域名可填 `EMAIL_DOMAINS`
- 启动时会提示选择本轮使用的域名
- 注册 Tavily / Firecrawl key
- 验证 key 是否真实可用
- 提供可选聚合 API,供 `MySearch` / `MySearch-Proxy` 调用
### DuckMail API
`MySearch` 自己的安装、MCP 工具、统一控制台、social gateway、Codex /
Claude Code 接入说明,统一放在:
```env
EMAIL_PROVIDER=duckmail
DUCKMAIL_API_URL=https://api.duckmail.sbs
DUCKMAIL_API_KEY=
DUCKMAIL_DOMAIN=
DUCKMAIL_DOMAINS=
```
说明:
- 可使用单域名或多域名配置
- 如果你有 DuckMail 私有域名和 API Key,直接填入即可
- 公开 DuckMail 域名可以测试收信链路,但不保证能通过 Tavily 风控
### Upload to Your Server
```env
SERVER_URL=https://your-server.example.com
SERVER_ADMIN_PASSWORD=replace-with-your-admin-password
DEFAULT_UPLOAD=true
```
说明:
- `DEFAULT_UPLOAD=true` 表示启动台默认开启自动上传
- 真正是否上传,仍以本轮启动时的选择为准
- 上传到代理服务器时会带 `service` 字段
- Tavily 会自动进入 Tavily 池,Firecrawl 会自动进入 Firecrawl 池
### Runtime Options
```env
DEFAULT_COUNT=1
DEFAULT_CONCURRENCY=2
DEFAULT_DELAY=10
REGISTER_HEADLESS=true
FIRECRAWL_REGISTER_HEADLESS=true
EMAIL_CODE_TIMEOUT=90
API_KEY_TIMEOUT=20
EMAIL_POLL_INTERVAL=3
SOLVER_PORT=5073
SOLVER_THREADS=1
```
说明:
- `REGISTER_HEADLESS=true` 表示浏览器后台运行
- `FIRECRAWL_REGISTER_HEADLESS` 未单独配置时会继承 `REGISTER_HEADLESS`
- 现在默认是后台运行;如果你遇到 `Security check failed`,再临时改成 `false` 用前台浏览器排查
- `SOLVER_THREADS` 最终会自动取 `max(SOLVER_THREADS, 本轮并发数)`
- 普通使用场景下不需要额外传命令参数
## Output
注册成功后,结果会写入:
**Tavily**:
```text
accounts.txt
```
**Firecrawl**:
```text
firecrawl_accounts.txt
```
格式:
```text
email,password,api_key
email,password,api_key
```
## Real-World Validation
当前主线已经做过真实回归验证:
**Tavily**:
- Cloudflare 邮箱链路可跑通完整注册
- 邮箱验证码可自动读取
- 获取到 API Key 后会立即做真实 API 调用验证
- 并发注册已做过真实回归
- 密码页随机 challenge 已补恢复逻辑,并已真测通过
**Firecrawl**:
- 邮箱验证链接可自动读取
- 支持自动登录和 API Key 提取
- API Key 验证通过真实 API 调用
## Known Limitations
### DuckMail Public Domains
DuckMail 公开域名当前的状态是:
- 创建邮箱可以
- 接收 6 位验证码可以
- 但 Tavily 在密码页可能直接风控拦截
常见页面提示:
```text
Suspicious activity detected
```
如果你要跑通完整注册,建议优先使用:
- Cloudflare 自定义域名邮箱
- DuckMail 私有域名 + API Key
### First Run on New Machine
首次换机器运行时,建议先单账号跑通一遍,再开并发。
因为首次运行会自动下载浏览器依赖,且不同机器的本地网络环境、代理环境、系统依赖可能不同。
## Project Structure
```text
.
├── run.py # 唯一推荐入口
├── tavily_core.py # Tavily 注册入口
├── tavily_browser_solver.py # Tavily 浏览器注册主逻辑
├── firecrawl_core.py # Firecrawl 注册入口
├── firecrawl_browser_solver.py # Firecrawl 浏览器注册主逻辑
├── api_solver.py # 本地 Turnstile Solver(Tavily 专用)
├── mail_provider.py # 邮箱 provider 抽象
├── config.py # .env / 环境变量读取
├── start_auto.sh # macOS / Linux 启动脚本
├── start_auto.bat # Windows 启动脚本
├── proxy/ # 可选的多服务代理(Tavily / Firecrawl)
└── README.md
```
## Module Notes
仓库里有一些不是主入口、但仍然是运行时依赖的模块:
- `tavily_core.py`
现在是兼容层,负责把统一入口转发到浏览器注册主链路。
- `browser_configs.py`
`api_solver.py` 的浏览器配置辅助模块。
- `db_results.py`
`api_solver.py` 的结果存储辅助模块。
- `proxy/`
独立可选模块,用于把 Tavily / Firecrawl 分别做成统一代理池。
## Optional Proxy Service
如果你希望把注册出来的 key 接成统一池子,可以使用 `proxy/`。
现在它已经支持 Tavily 和 Firecrawl 两套独立池子、独立 Token 与独立额度同步。
启动方式:
```bash
cd proxy
docker compose up -d
```
详细说明见 [`proxy/README.md`](./proxy/README.md)。
## Recommended Usage
如果你只是想批量拿 key,最简单的使用方式就是:
1. 配好 `.env`
2. 运行 `python3 run.py`
3. 选择服务(Tavily / Firecrawl)
4. 选择域名
5. 输入注册数量
6. 输入并发数
7. 看 `accounts.txt` 或 `firecrawl_accounts.txt`
如果你有自己的 key 池服务器,再把自动上传或者 `proxy/` 接上即可。
## Disclaimer
本项目仅供自动化测试、研究和个人学习使用。
请自行评估目标站点的服务条款、风控策略和账号使用风险。
- [MySearch-Proxy](https://github.com/skernelx/MySearch-Proxy)
+47 -300
View File
@@ -2,29 +2,26 @@
[中文说明](./README.md)
This is the current production-ready multi-service registration toolkit.
It puts **Tavily** and **Firecrawl** behind the same launcher:
This repository is the multi-service registration toolkit and aggregation API
upstream for:
- **Tavily**: AI search API
- **Firecrawl**: web scraping API
- registering `Tavily` / `Firecrawl` keys
- validating that the keys actually work before feeding a unified search layer
Unlike the older fragmented scripts, the current workflow is built around a
single stable pipeline:
It is not the main product repository for `MySearch`.
If you want the public-facing unified search console, MCP, Skill, and Social / X
integration, use the standalone project:
- Real local browser registration
- Local Turnstile solver for Tavily
- Email API based verification-link / code retrieval
- Real API validation immediately after a key is extracted
- Optional automatic upload to the multi-service proxy pool
- [MySearch-Proxy](https://github.com/skernelx/MySearch-Proxy)
The goal is straightforward: keep Tavily / Firecrawl registration, validation,
output, and upload inside one workflow that can actually be reused long term.
## What this repo is for
For a general Cloudflare unlimited-alias domain mail guide, see:
[Cloudflare Mail Setup Guide](./docs/Cloudflare-Mail-Setup-Guide.md)
For the Chinese version of that guide, see:
[Cloudflare Mail Setup Guide (Chinese)](./docs/Cloudflare%E9%82%AE%E4%BB%B6%E8%AE%BE%E7%BD%AE%E8%AF%A6%E8%A7%A3.md)
- real local browser-based registration
- local Turnstile solving for Tavily
- email API based verification link / code retrieval
- immediate live API validation after a key is extracted
- optional upload into unified proxy pools
- optional use as one upstream provider source for `MySearch` / `MySearch-Proxy`
## Features
@@ -35,28 +32,19 @@ For the Chinese version of that guide, see:
- Concurrent registration: batch and parallel runs are supported
- Background browser mode: headless by default, visible mode when debugging
- Real usability verification: validates the key against the official API
- Automatic upload to proxy pools: uploads include the service field, so the
server can place Tavily and Firecrawl keys into the correct pools
- Proxy console: separate key pools, token pools, and real quota sync
- Automatic upload to proxy pools
- A clean upstream for unified search gateways such as `MySearch-Proxy`
- Cross-platform startup: Windows, macOS, and Linux
## Screenshots
## Paired Console Preview
### Multi-Service Launcher
### MySearch Proxy Hero
![Multi Service Launcher](./docs/screenshots/multi-service-launcher.jpg)
![MySearch Console Hero](./docs/screenshots/mysearch-console-hero.jpg)
### Concurrent Registration and Real API Validation
### MySearch Proxy Workspaces
![Registration Success](./docs/screenshots/registration-success.jpg)
### Proxy Workspace Switcher
![Proxy Workspace Switcher](./docs/screenshots/proxy-workspace-switcher.jpg)
### Proxy Key Pool Details
![Proxy Key Pool](./docs/screenshots/proxy-key-pool.jpg)
![MySearch Console Workspaces](./docs/screenshots/mysearch-console-workspaces.jpg)
## Quick Start
@@ -73,7 +61,7 @@ cd tavily-key-generator
cp .env.example .env
```
Edit `.env` and fill in your mail configuration and optional upload settings.
Edit `.env` and fill in your mail settings and optional upload settings.
### 3. Run
@@ -95,280 +83,39 @@ Windows:
start_auto.bat
```
## How It Works
## Recommended Pairing
When you run the launcher, it will automatically:
If you want to turn the generated keys into a public, reusable unified search
service, the recommended deployment target is:
1. Choose the target service: Tavily or Firecrawl
2. Create or reuse `venv`
3. Install Python dependencies
4. Install Camoufox / Playwright browser dependencies
5. Load `.env`
6. Validate the configured mail provider
7. Let you choose the active domain if multiple domains are configured
8. Ask for the registration count
9. Ask for the concurrency level
10. Ask whether to upload results automatically
11. Start the local solver for Tavily
12. Handle email verification and password setup
13. Recover from random challenge cases on the Tavily password page
14. Extract the API key
15. Validate the key with a real API request
16. Save results to `accounts.txt` or `firecrawl_accounts.txt`
17. Upload results to the server when enabled
- [MySearch-Proxy](https://github.com/skernelx/MySearch-Proxy)
## Runtime Flow
That project provides:
```text
run.py
-> choose service (Tavily / Firecrawl)
-> load .env
-> choose domain
-> input count / concurrency
-> choose upload or not
-> [Tavily only] start Turnstile solver
-> create mailbox
-> open signup page
-> [Tavily only] solve Turnstile locally
-> receive email verification link
-> set password
-> [Tavily only] recover random password-page challenge
-> enter dashboard
-> extract API key
-> verify API key with real API call
-> save / upload
```
- a unified console
- Tavily / Firecrawl / Social / X routing
- MCP + Skill installation docs
- official API and compatible gateway support
- final integration guidance for Codex / Claude Code
## Configuration
This repository stays focused on:
See [`.env.example`](./.env.example) for the full configuration template.
- producing working keys
- verifying them with live requests
- serving as the upstream aggregation source
### Cloudflare Mail API
The local `proxy/` directory is now kept only for legacy deployments or
migration scenarios, not as the primary recommended path.
```env
EMAIL_PROVIDER=cloudflare
EMAIL_API_URL=https://your-mail-api.example.com
EMAIL_API_TOKEN=replace-with-your-token
EMAIL_DOMAIN=example.com
EMAIL_DOMAINS=example.com,example.org
```
## Relationship to MySearch
Notes:
This repo only handles:
- Use `EMAIL_DOMAIN` for a single domain
- Use `EMAIL_DOMAINS` for multiple domains
- The launcher lets you choose the active domain at runtime
- Tavily / Firecrawl key registration
- live key validation
- optional aggregation API serving for `MySearch` / `MySearch-Proxy`
### DuckMail API
All `MySearch` installation, MCP usage, unified console, social gateway, and
Codex / Claude Code integration docs now live in:
```env
EMAIL_PROVIDER=duckmail
DUCKMAIL_API_URL=https://api.duckmail.sbs
DUCKMAIL_API_KEY=
DUCKMAIL_DOMAIN=
DUCKMAIL_DOMAINS=
```
Notes:
- You can configure either one domain or multiple domains
- If you have a private DuckMail domain and API key, just put them in `.env`
- Public DuckMail domains can be used to test the mail path, but they are not
guaranteed to pass Tavily risk control
### Upload to Your Server
```env
SERVER_URL=https://your-server.example.com
SERVER_ADMIN_PASSWORD=replace-with-your-admin-password
DEFAULT_UPLOAD=true
```
Notes:
- `DEFAULT_UPLOAD=true` makes upload enabled by default in the launcher
- The actual upload decision still depends on the runtime choice you make
- Upload payloads include the `service` field
- Tavily keys are automatically placed into the Tavily pool
- Firecrawl keys are automatically placed into the Firecrawl pool
### Runtime Options
```env
DEFAULT_COUNT=1
DEFAULT_CONCURRENCY=2
DEFAULT_DELAY=10
REGISTER_HEADLESS=true
FIRECRAWL_REGISTER_HEADLESS=true
EMAIL_CODE_TIMEOUT=90
API_KEY_TIMEOUT=20
EMAIL_POLL_INTERVAL=3
SOLVER_PORT=5073
SOLVER_THREADS=1
```
Notes:
- `REGISTER_HEADLESS=true` keeps the browser in the background
- `FIRECRAWL_REGISTER_HEADLESS` inherits `REGISTER_HEADLESS` if it is not set
- If you hit `Security check failed`, temporarily switch headless off and debug
with a visible browser
- The effective solver thread count becomes `max(SOLVER_THREADS, concurrency)`
- In normal use, no extra command-line flags are needed
## Output
Successful registrations are written to:
**Tavily**:
```text
accounts.txt
```
**Firecrawl**:
```text
firecrawl_accounts.txt
```
Format:
```text
email,password,api_key
email,password,api_key
```
## Real-World Validation
The current mainline has been validated in real runs.
**Tavily**:
- Full registration works with the Cloudflare mail flow
- Email verification codes can be fetched automatically
- Extracted API keys are immediately validated with real API requests
- Concurrent registration has been regression tested
- Random password-page challenge recovery has been added and verified
**Firecrawl**:
- Email verification links can be fetched automatically
- Automatic sign-in and API key extraction are supported
- API key validation is done with real Firecrawl API requests
- Uploads to the proxy server are auto-tagged with `service=firecrawl`
## Known Limitations
### DuckMail Public Domains
The current status of public DuckMail domains is:
- Mailbox creation works
- 6-digit verification-code retrieval works
- Tavily may still be blocked on the password page
Common page message:
```text
Suspicious activity detected
```
If you want reliable full registration, prefer:
- Cloudflare custom-domain mail
- DuckMail private domain plus API key
### First Run on a New Machine
On a new machine, it is better to run one account first before enabling
concurrency.
The first run may need to download browser dependencies, and system, network,
or proxy conditions can differ across machines.
### System-Level Prerequisites
The launcher can bootstrap project dependencies and browser dependencies
automatically, but it does not install Python itself.
At minimum, the target machine should already have:
- Python 3
- `venv` support
- A usable network environment for installing dependencies
## Project Structure
```text
.
├── run.py # Recommended entry point
├── tavily_core.py # Tavily registration entry
├── tavily_browser_solver.py # Tavily browser registration flow
├── firecrawl_core.py # Firecrawl registration entry
├── firecrawl_browser_solver.py # Firecrawl browser registration flow
├── api_solver.py # Local Turnstile solver (Tavily only)
├── mail_provider.py # Mail provider abstraction
├── config.py # .env / environment loading
├── start_auto.sh # macOS / Linux launcher
├── start_auto.bat # Windows launcher
├── proxy/ # Optional multi-service proxy
└── README.md
```
## Module Notes
Some files are not primary entry points, but they are still part of the
runtime:
- `tavily_core.py`
Compatibility layer that forwards the unified entry to the Tavily browser
flow.
- `browser_configs.py`
Browser configuration helper used by `api_solver.py`.
- `db_results.py`
Result-storage helper used by `api_solver.py`.
- `proxy/`
Optional standalone module for turning Tavily / Firecrawl keys into separate
pooled proxy services.
## Optional Proxy Service
If you want to route registered keys behind one stable endpoint, use `proxy/`.
It now exposes independent Tavily and Firecrawl pools, tokens, and quota sync.
Start it with:
```bash
cd proxy
docker compose up -d
```
See [`proxy/README.md`](./proxy/README.md) for details.
## Recommended Usage
If your goal is simply to batch-register and collect keys, the shortest path
is:
1. Configure `.env`
2. Run `python3 run.py`
3. Choose the service: Tavily or Firecrawl
4. Choose the mail domain
5. Enter the registration count
6. Enter the concurrency level
7. Read the results from `accounts.txt` or `firecrawl_accounts.txt`
If you also need centralized distribution, enable server upload or connect the
generated keys to `proxy/`.
## Disclaimer
This project is provided for automation testing, research, and personal
learning purposes only.
You are responsible for evaluating the target service terms, risk controls,
and account-usage implications.
- [MySearch-Proxy](https://github.com/skernelx/MySearch-Proxy)
Binary file not shown.

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 KiB

+79 -248
View File
@@ -1,63 +1,43 @@
# Multi-Service API Proxy
# Legacy Proxy Snapshot
把多个 **Tavily** 和 **Firecrawl** API Key 做成统一代理池,对外暴露固定入口、独立 Token,并提供一个更适合日常维护的可视化控制台。
这个 `proxy/` 目录现在是保留在 `tavily-key-generator` 里的历史兼容副本。
当前这版 `proxy/` 已支持:
如果你要部署正式对外可用的统一搜索控制台、MCP、Skill 和 Social / X
路由,请直接使用独立仓库:
- Tavily / Firecrawl **分服务隔离**
- 独立 Key 池、独立 Token 池
- 顶部卡片切换 + 单服务详情面板
- Tavily 真实额度同步:`GET /usage`
- Firecrawl 真实额度同步:
- `GET /v2/team/credit-usage`
- `GET /v2/team/credit-usage/historical?byApiKey=true`
- 本地代理调用统计、成功率、延迟统计
- [MySearch-Proxy](https://github.com/skernelx/MySearch-Proxy)
## 控制台截图
## 当前推荐的正式入口
### 工作台切换
`MySearch-Proxy` 负责:
![Proxy Workspace Switcher](../docs/screenshots/proxy-workspace-switcher.jpg)
- 统一控制台
- `Tavily + Firecrawl + Social / X` 聚合路由
- MCP Server
- 可直接安装给智能体使用的 Skill
- 官方接口与 compatible 网关双接入
- 面向 `Codex` / `Claude Code` 的最终接线方式
### Key 池详情
## 控制台预览
![Proxy Key Pool](../docs/screenshots/proxy-key-pool.jpg)
### 首屏
## Docker Image
![MySearch Console Hero](../docs/screenshots/mysearch-console-hero.jpg)
当前兼容镜像名仍沿用旧名字:
### 工作台
```text
docker.io/skernelx/tavily-proxy:latest
```
![MySearch Console Workspaces](../docs/screenshots/mysearch-console-workspaces.jpg)
拉取方式:
## 和 `tavily-key-generator` 的关系
```bash
docker pull skernelx/tavily-proxy:latest
```
当前仓库继续负责上游 provider 层:
## 功能概览
- 注册 Tavily / Firecrawl key
- 做真实可用性验证
- 可选上传到统一代理池
- 作为 `MySearch-Proxy` 的 Tavily / Firecrawl key 来源
- Tavily 独立代理入口:
- `POST /api/search`
- `POST /api/extract`
- Firecrawl 独立代理入口:
- `/firecrawl/*`
- 示例:`POST /firecrawl/v2/scrape`
- 独立代理 Token:
- Tavily Token 前缀:`tvly-`
- Firecrawl Token 前缀:`fctk-`
- 控制台支持:
- 按服务导入 Key
- 按服务创建 Token
- 按服务同步真实额度
- 按服务查看 Key 池与用量
- 顶部一键切换 Tavily / Firecrawl 工作台
## 和注册器如何联动
注册器上传到 proxy 时,会直接调用:
注册器上传时仍会带上 `service` 字段,例如:
```json
{
@@ -67,226 +47,77 @@ docker pull skernelx/tavily-proxy:latest
}
```
也就是说:
所以:
- Tavily 注册结果上传时会写入 Tavily 池
- Firecrawl 注册结果上传时会写入 Firecrawl 池
- 服务器不需要再靠 key 前缀猜测服务
- Tavily 上传会进入 Tavily 池
- Firecrawl 上传会进入 Firecrawl 池
- 服务端不需要再靠 key 前缀猜测服务
这条链路已经做过真实验证:Firecrawl 上传后会被 `/api/keys`
识别成 `service=firecrawl`,不会落到 Tavily 池里。
## 新部署建议
## 推荐部署方式
### 1. 直接使用 Docker Hub 镜像
推荐直接部署 `MySearch-Proxy`:
```bash
mkdir -p tavily-proxy-data
docker pull skernelx/mysearch-proxy:latest
```
项目地址:
- [skernelx/MySearch-Proxy](https://github.com/skernelx/MySearch-Proxy)
## 旧部署如何迁移
如果你已经在跑这个目录下的旧 `proxy/`,更稳的迁移方式是:
1. 保留原来的数据卷目录
2. 改用 `skernelx/mysearch-proxy:latest`
3. 继续挂载到 `/app/data`
4. 使用新的 `proxy/.env` 或容器环境变量补齐配置
一个通用迁移示例:
```bash
docker pull skernelx/mysearch-proxy:latest
docker rm -f mysearch-proxy 2>/dev/null || true
docker run -d \
--name tavily-proxy \
--name mysearch-proxy \
--restart unless-stopped \
-p 9874:9874 \
-e ADMIN_PASSWORD=your-admin-password \
-v $(pwd)/tavily-proxy-data:/app/data \
skernelx/tavily-proxy:latest
-v /your/data/path:/app/data \
skernelx/mysearch-proxy:latest
```
启动后访问:
只要保留原数据卷,已有 Key、Token 和控制台里的数据就可以继续沿用。
```text
http://localhost:9874
```
## 兼容 API 摘要
### 2. 使用 docker compose
当前这套能力对外仍然兼容这些重点接口:
- Tavily
- `POST /api/search`
- `POST /api/extract`
- Firecrawl
- `/firecrawl/*`
- 示例:`POST /firecrawl/v2/scrape`
- Social / X
- `POST /social/search`
- `GET /social/health`
认证方式支持:
- `Authorization: Bearer YOUR_TOKEN`
- body 里传 `api_key`
## 如果你只是要保留本地旧目录
这个目录还可以继续作为历史兼容副本使用:
```bash
cd proxy
docker compose up -d
```
默认 compose 会:
- 暴露端口 `9874`
- 将数据库挂载到 `./data`
- 使用 `ADMIN_PASSWORD` 作为控制台密码
### 3. 本地源码运行
```bash
cd proxy
pip install -r requirements.txt
ADMIN_PASSWORD=your-admin-password uvicorn server:app --host 0.0.0.0 --port 9874
```
## 更新方式
如果你已经在服务器上跑了旧版本,推荐直接拉新镜像后重启容器:
```bash
docker pull skernelx/tavily-proxy:latest
docker rm -f tavily-proxy
docker run -d \
--name tavily-proxy \
--restart unless-stopped \
-p 9874:9874 \
-e ADMIN_PASSWORD=your-admin-password \
-v /your/data/path:/app/data \
skernelx/tavily-proxy:latest
```
只要保留原来的数据卷目录,Key、Token 和控制台密码都会继续保留。旧库会自动迁移出 `service` 字段,历史 Tavily 数据会被标记为 `tavily`。
## 控制台里能看到什么
控制台现在不是上下两个长栏目硬堆,而是:
- 顶部服务卡片切换区
- 首屏当前工作台概览
- 下方当前服务的完整详情面板
每个服务面板里都能看到:
### 1. Tavily 栏目
- Key 池
- Token 池
- 真实额度汇总
- Tavily `/usage` 同步状态
- 代理侧成功 / 失败 / 月度统计
### 2. Firecrawl 栏目
- Key 池
- Token 池
- Firecrawl credits 汇总
- Firecrawl credits 同步状态
- 代理侧成功 / 失败 / 月度统计
## 使用流程
1. 启动 proxy
2. 打开控制台并登录
3. 在 Tavily 或 Firecrawl 栏目导入对应 Key
4. 在对应栏目创建 Token
5. 把该 Token 发给你的下游程序
6. 用对应的代理端点发起请求
7. 在控制台查看该服务的真实额度和代理统计
## API 调用方式
认证方式支持两种:
- `Authorization: Bearer YOUR_TOKEN`
- body 里传 `api_key`
### Tavily 示例
```bash
curl -X POST http://localhost:9874/api/search \
-H "Authorization: Bearer YOUR_TAVILY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "hello world", "max_results": 1}'
```
```bash
curl -X POST http://localhost:9874/api/extract \
-H "Authorization: Bearer YOUR_TAVILY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://example.com"]}'
```
### Firecrawl 示例
```bash
curl -X POST http://localhost:9874/firecrawl/v2/scrape \
-H "Authorization: Bearer YOUR_FIRECRAWL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "formats": ["markdown"]}'
```
```bash
curl -X GET http://localhost:9874/firecrawl/v2/team/credit-usage \
-H "Authorization: Bearer YOUR_FIRECRAWL_TOKEN"
```
## 管理 API
所有管理 API 需要:
- `X-Admin-Password: your-admin-password`
或者:
- `Authorization: Bearer your-admin-password`
### 常用管理端点
- `GET /api/stats`
返回 Tavily / Firecrawl 双服务概览
- `GET /api/keys?service=tavily`
- `GET /api/keys?service=firecrawl`
返回指定服务的 Key 列表
- `POST /api/keys`
body 里传 `service`
- `PUT /api/keys/{id}/toggle`
启用 / 禁用某个 Key
- `DELETE /api/keys/{id}`
删除 Key
- `GET /api/tokens?service=tavily`
- `GET /api/tokens?service=firecrawl`
返回指定服务的 Token 列表
- `POST /api/tokens`
body 里传 `service`
- `DELETE /api/tokens/{id}`
删除 Token
- `POST /api/usage/sync`
body 里传 `service`
- `PUT /api/password`
修改控制台密码
## 配置项
| 环境变量 | 默认值 | 说明 |
|----------|--------|------|
| `ADMIN_PASSWORD` | `admin` | 控制台登录密码 |
| `USAGE_SYNC_TTL_SECONDS` | `300` | 真实额度缓存秒数 |
| `USAGE_SYNC_CONCURRENCY` | `4` | 并发同步额度的最大 Key 数 |
## 数据持久化
SQLite 数据库默认保存在:
```text
/app/data/proxy.db
```
所以容器部署时一定要挂载数据卷,例如:
```bash
-v /your/data/path:/app/data
```
## 适合什么场景
- 你有多组 Tavily / Firecrawl Key,想统一出口
- 你不想把真实 API Key 直接发给下游程序
- 你希望 Tavily 和 Firecrawl 各自独立统计、独立授权
- 你想让注册器自动把新拿到的 Key 上传进对应池子
## 注意事项
- Tavily 真实额度依赖官方 `/usage`
- Firecrawl 当前主要返回账户级 credits 视图,控制台会优先展示账户额度
- 旧数据库会自动迁移 `service` 字段,但旧数据默认视为 Tavily
但它不再是对外发布时的主推荐入口。