资讯详情

资讯详情

9Router 自托管部署指南:把 AI 网关搬进自己的服务器

9Router 自托管部署指南把 AI 网关搬进自己的服务器【免费下载链接】9routerUnlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40 providers. Auto-fallback, RTK -40% tokens, never hit limits.项目地址: https://gitcode.com/GitHub_Trending/9r/9router当一个 AI 编码网关需要统一接入 Claude、GPT、Gemini、DeepSeek 等数十家模型提供商并把订阅配额耗尽 → 廉价模型 → 免费模型的三层回退逻辑集中管理时它事实上已经成为你开发流程里的关键基础设施。9Router 正是一个这样的开源网关连接 Claude Code、Codex、Cursor、Cline 等编码工具与 40 提供商、100 模型附带 RTK 令牌压缩每请求节省 20-40% 输入令牌与自动回退能力。本地跑通它只需一条 npm 命令但把它搬进自己的服务器、长期稳定运行则涉及密钥管理、数据持久化、健康检查与日志观测等一系列工程决策。本文结合仓库源码给出从权衡到落地的完整路径。自托管 vs 云端密钥与合规的权衡9Router 本质上是一个本地代理local proxy/router它自己不持有你的信用卡、没有计费系统只负责把请求路由到各提供商。选择自托管而不是依赖某个公共云端实例第一个理由就是密钥主权你的 OAuth 订阅令牌Claude Code、Codex、API KeyGLM、MiniMax、Kimi以及网关生成的 JWT 签名密钥全部存放在你自己机器的磁盘上而不是第三方服务器。这一点在仓库的运行契约里体现得很直接。核心密钥与安全开关全部通过环境变量注入.env.example 给出了完整清单# Required JWT_SECRETchange-me-to-a-long-random-secret INITIAL_PASSWORDchange-me DATA_DIR/var/lib/9router # Recommended security and ops variables API_KEY_SECRETendpoint-proxy-api-key-secret MACHINE_ID_SALTendpoint-proxy-salt ENABLE_REQUEST_LOGSfalse AUTH_COOKIE_SECUREfalse REQUIRE_API_KEYfalse其中JWT_SECRET决定仪表盘登录 Cookie 的签名API_KEY_SECRET是网关生成端点 API Key 的 HMAC 密钥DATA_DIR则把所有状态收敛到一处。README 中的环境变量表README.md明确标注REQUIRE_API_KEY用于在/v1/*路由上强制 Bearer API Key面向互联网部署时推荐开启AUTH_COOKIE_SECURE则是在 HTTPS 反向代理之后强制 Secure Cookie。这两条是自托管上云前必须想清楚的第一组开关。合规层面的第二个关键点是默认口令的安全缺口。仓库源码在登录路由中做了非常明确的安全取舍src/app/api/auth/login/route.js 里有一段值得细读的逻辑新装实例未设置INITIAL_PASSWORD时回退密码是公开常识级别的123456。因此当远程客户端用默认密码首次登录时接口会拒绝签发任何会话令牌const mustChangePassword !storedHash !process.env.INITIAL_PASSWORD !isLocalRequest(request); if (mustChangePassword) { // 不签发 JWT默认密码是公开知识123456远程签发令牌等于 // 把整个网关交给任意远程攻击者CVE-2026-56679 类攻击链 return NextResponse.json( { success: false, error: Default password must be changed before remote access. ..., mustChangePassword }, { status: 403, headers: NO_STORE_HEADERS } ); }配合登录限流checkLock/recordFail连续失败返回 429 并携带Retry-After以及isTunnelRequest对隧道域名的 dashboard 访问白名单控制这套组合说明自托管的安全边界不是部署完就万事大吉而是要在暴露给公网前完成改密、开鉴权、考虑 HTTPS 三件事。最后是数据与依赖的本地化。DATA_DIR下的状态全部落在本地 SQLite$DATA_DIR/db/data.sqlite含提供商、组合、别名、密钥、设置与用量历史自动备份存放在db/backups/。README 还专门澄清了仪表盘上成本数字的性质它只是按付费 API 价格折算的节省追踪器不是账单——用 Kiro 免费层时显示 $290 总成本实际支出是 $0。自托管后这个数字的含义完全由你掌控云端同步CLOUD_URL也只是可选功能不想让配置出机器就把ENABLE_REQUEST_LOGS关掉、不配置云同步地址即可。部署到服务器的最小步骤9Router 的官方镜像已发布到 Docker Hub 与 GHCR多平台支持linux/amd64与linux/arm64DOCKER.md。在任意一台有 Docker 的服务器上最小部署就是一条命令docker run -d \ -p 20128:20128 \ -v $HOME/.9router:/app/data \ -e DATA_DIR/app/data \ --name 9router \ decolua/9router:latest容器监听 20128 端口-v把宿主目录挂载为容器内/app/dataDATA_DIR/app/data让 bind mount 真正生效——不设置这个变量时应用会回退到~/.9router/macOS/Linux或%APPDATA%\9router\Windows在容器里就找不到挂载点了。启动后浏览器打开http://服务器IP:20128即可进入仪表盘OpenAI 兼容端点位于http://服务器IP:20128/v1。官方镜像的构建过程值得关注Dockerfile 采用多阶段构建builder 阶段用node:22-alpine安装 python3/make/g 后执行npm run buildrunner 阶段只拷贝.next/standalone产物并显式补齐 Next.js 文件追踪会遗漏的运行时依赖——src/mitmMITM 子进程、node-forge、sql.js的 wasm 二进制、node-machine-id等。最后的入口脚本负责在容器启动时把/app/data与/app/data-home的属主修正为node用户再以su-exec降权运行避免数据卷权限错乱。这解释了为什么官方镜像更推荐直接拉取而非自行构建。如果希望开箱即用完整链路含 Headroom 令牌压缩 sidecar仓库提供了现成的 docker-compose.yml9router 服务通过命名卷9router-data持久化通过env_file: .env注入配置并把HEADROOM_URL指向同网络的 headroom 服务headroom 则独立运行在 8787 端口。restart: always保证机器重启后自动拉起。源码部署VPS 裸机路径则完整记录了环境变量清单README.md 的 Deployment 小节给出可直接执行的流程git clone https://github.com/decolua/9router.git cd 9router npm install npm run build export JWT_SECRETyour-secure-secret-change-this export INITIAL_PASSWORDyour-password export DATA_DIR/var/lib/9router export PORT20128 export HOSTNAME0.0.0.0 export NODE_ENVproduction export API_KEY_SECRETendpoint-proxy-api-key-secret export MACHINE_ID_SALTendpoint-proxy-salt npm run start # 或交给 PM2 守护 pm2 start npm --name 9router -- start pm2 save pm2 startup注意 README 提示构建阶段对低内存机器需要临时 swap 与MAKEFLAGS-j1等降载参数这也是 VPS 部署最常见的坑构建是内存密集型操作2G swap 是为npm run build兜底的常规做法。部署完成后的接入方式和本地完全一致Claude Code 修改~/.claude/config.json指向http://服务器:20128/v1Codex 设置OPENAI_BASE_URL与OPENAI_API_KEYCursor 在 Models → Advanced 填入同样的 Base URL 与 Key。网关的格式翻译层会把 OpenAI 格式自动转译为各提供商的原生格式这也是它能兼容任意支持自定义端点的编码工具的原因。上线后的健康检查与日志观察服务跑起来只是第一步上线后如何确认它活着、以及出问题时如何定位是自托管运维的日常。9Router 提供了几个层次的观测手段。健康检查。仓库在 src/app/api/health/route.js 实现了极简的探活端点export async function GET() { return NextResponse.json({ ok: true }, { headers: CORS_HEADERS }); }/api/health返回{ ok: true }且允许跨域 GET这个端点不只是给人工 curl 用的——DOCKER.md 明确记录官方 CI 在发布镜像前会在 amd64/arm64 两种原生平台镜像上分别执行/api/health健康检查组装多平台 manifest 后再做第二轮验证全部通过才推进latest标签。因此它同样适合接入你自己的监控系统如 Uptime Kuma、Prometheus Blackbox实现宕机自动告警curl -s http://localhost:20128/api/health # {ok:true}容器日志。Docker 部署下docker logs -f 9router即可实时跟随应用输出。更新流程也简单直接docker pull decolua/9router:latest后重建容器即可需要不可变部署时可以按镜像摘要digest固定版本避免latest标签漂移。请求级观测。如果仪表盘的用量统计还不够可以打开请求详情记录。仓库中的 src/lib/db/repos/requestDetailsRepo.js 实现了完整的请求观测链路值得了解的工程细节有三点默认关闭显式开启ENABLE_REQUEST_LOGStrue或仪表盘开关才启用避免为所有请求落库带来的写放大安全脱敏入库前sanitizeHeaders会删除authorization、x-api-key、cookie、token等敏感头防止 API Key 泄漏进日志库限流与截断单条 JSON 超过 5KB 被截断并标记_truncated默认最多保留 200 条记录、每 5 秒批量刷库flushToDatabase把观测成本控制住。这套设计把可观测和别把网关拖垮两件事做了平衡日志是批量、异步、脱敏、有上限的而不是无脑全量写盘。配额与用量是运维的另一个观测面。仪表盘的实时配额追踪按提供商统计令牌消耗、显示重置倒计时与费用估算本质上是网关自带的业务健康度指标——某个提供商持续 429 或配额耗尽会直接反映在回退命中率上。上线初期建议把 RTK 令牌压缩保持默认开启X-9Router-Token-Saver: off可对单次请求显式关闭再结合用量分析页核对每个 provider 的实际支出与节省。公网暴露的最后一公里。自托管到公网通常有三种选择直接映射端口配合REQUIRE_API_KEY HTTPS 反向代理 AUTH_COOKIE_SECURE、或启用仓库内置的 Cloudflare / Tailscale 隧道src/lib/tunnel/index.js 统一导出了两类隧道的启停与状态探测。用隧道时登录路由会按settings.tunnelUrl/tailscaleUrl识别隧道域名并在tunnelDashboardAccess ! true时拒绝经由隧道的仪表盘登录——也就是说把仪表盘暴露出去是显式授权的行为默认不允许。对大多数单人使用场景Tailscale 私有网络是比公网端口暴露更稳妥的选择只有你的设备能到达天然省去 HTTPS 证书与暴力破解的烦恼。最后把排查清单压缩成几条可执行结论端口不对看PORT与NEXT_PUBLIC_BASE_URL是否一致首次登录失败检查INITIAL_PASSWORD未设置则回退123456且远程登录会被强制改密logs/下没有请求日志就确认ENABLE_REQUEST_LOGStrue提供商报 Language model did not provide messages 大概率是配额耗尽应检查配额追踪器或把回退组合调成订阅 → 廉价 → 免费的三层结构。至此一个密钥可控、数据落盘、可探活、可观测的 AI 网关就算真正搬进了自己的服务器。【免费下载链接】9routerUnlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40 providers. Auto-fallback, RTK -40% tokens, never hit limits.项目地址: https://gitcode.com/GitHub_Trending/9r/9router创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →