你基本会落在下面三种形态之一:
无论你选哪种形态,下面这组参数是最核心的:
| Flag / Env | 说明 |
|---|---|
--bind / PROXY_BIND |
服务监听地址 |
--port / PROXY_PORT |
服务监听端口 |
--db-path / PROXY_DB_PATH |
SQLite 数据库路径 |
--static-dir / WEB_STATIC_DIR |
前端静态资源目录 |
--upstream / TAVILY_UPSTREAM |
Tavily MCP 上游地址 |
TAVILY_USAGE_BASE |
Tavily HTTP / usage 上游基地址 |
然后你还需要再补一类“管理员访问策略”:
DEV_OPEN_ADMIN=true:只适合本地/临时验证仓库根目录自带的 docker-compose.yml
会直接启动 Hikari:
这个 compose 文件已经帮你做了:
0.0.0.0:8787tavily-hikari-data volume/srv/app/data/tavily_proxy.dbghcr.io/ivanli-cn/tavily-hikari:latest但它不会帮你自动提供管理员入口,所以第一次上线前还要补一层:
DEV_OPEN_ADMIN=trueexamples/forwardauth-caddy生产环境通常建议把 Tavily Hikari 部署在可信网关后面,由网关负责 TLS 终止与管理员身份头注入。
仓库现成样例在:
直接启动:
这个示例会拉起:
auth-mock,负责模拟 ForwardAuthupstream-mock,负责模拟 Tavily 上游默认行为:
GET /health 公开可访问Remote-Email、Remote-Name 转发给 HikariRemote-Email=admin@example.com 视为管理员如果你想先验证网关链路,而不是马上连真实 Tavily 与真实 SSO,这个示例就是最短路径。
如果你没有独立的 ForwardAuth 网关,可以直接开启内置管理员登录。
推荐做法:
部署要点:
ADMIN_AUTH_BUILTIN_PASSWORD_HASH,不要长期保留明文密码Secure/health 返回 200/admin 或调通 /api/keys/api/tavily/search 或 /mcp需要长期保留的数据不只是一份主库:
/srv/app/data/tavily_proxy.db/srv/app/data/tavily_proxy-observability.db升级要点:
tavily_proxy.db;离线验证或回滚准备应把 core DB 与 observability sidecar 一起作为完整数据库集处理scripts/export-live-db-snapshot-to-testbox.sh。它会对两份 SQLite 都执行 .backup、记录 SHA-256,并验证 PRAGMA integrity_check如果你遇到 database is locked、quota_sync 长时间停在 running、ha_outbox backlog
过大、或者 SQLite 文件体积明显失控,建议把恢复步骤固定成同一套剧本:
/health 返回 200scheduled_jobs 里没有新的长时间 quota_sync* runningdatabase is locked 不再持续爆发request_logs_gc_onceha_outbox backlog 先修 trigger,再运行 ha_outbox_cleanup_once 或 scripts/ha-outbox-maintenance.shreclaimable_bytes >= 512MB,或者你明确进入维护窗口时,再运行 db_compaction_once容器镜像内置了这些 operator CLI:
如需对大 backlog 做离线演练,先在 101 导出完整只读快照,再上传到 shared testbox:
说明:
request_logs_gc_once 用于 bounded 地清理 request logs / body backlogha_trigger_repair_once 用于显式修复升级库中残留的旧 trg_ha_outbox_* trigger;如果真实问题是旧 trigger 还在持续写 ha_outbox,必须先跑它ha_outbox_cleanup_once 用于 bounded 地清理历史 HA outbox backlog;它支持 --repair-triggers,并会在报告中区分 invalid legacy 删除量与正常 retention 删除量。线上 scheduler 里的 ha_outbox_gc 只负责轻量 freshness cleanup,不负责重型历史收缩scripts/ha-outbox-maintenance.sh 是一层运维封装,顺序固定为“先 repair + cleanup,后按需 compaction”db_compaction_once 用于 SQLite 文件压缩;默认会尊重 reclaimable space 阈值,不满足条件时返回 skipped=truedb_compaction_once --force 只建议在明确的维护窗口里使用tavily_proxy.db + tavily_proxy-observability.db,不能只拷主库Hikari 支持在转发上游时清洗或重写敏感请求头。
它会重点处理这些事:
Forwarded、X-Forwarded-*、Via、CF-* 等链路暴露头Origin、Refererforwarded_headers 与 dropped_headers,方便排障设计背景与更细的匿名策略说明,见:
典型暴露面包括:
/admin 管理端/api/tavily/* 给 HTTP 客户端用/mcp 给 MCP 流量用主运行时产物是容器镜像:
ghcr.io/ivanli-cn/tavily-hikari:<tag>
它内含前端静态资源。公开 docs-site 与 Storybook 则通过 GitHub Pages 单独发布。
如果你部署后卡在管理员入口、数据库持久化或上游 502,继续看 FAQ 与排障。