AI API Gateway Docs


中转站搭建教程

项目选择、准备工作、部署步骤、后台配置和维护排错。适合放到宝塔里作为你的 API 站帮助文档。

API

主站入口

你的用户后台和 OpenAI 兼容入口:
https://api.mzai.cc/

KEY

账号池代理

CLIProxyAPI 负责把 CLI / OAuth 账号能力包装成可调用接口。

PAY

计费后台

new-api 负责用户、令牌、额度、渠道、模型倍率和支付配置。

搭建教程

按你的使用目的选择教程路线。简单自用可以只看第一条,对外运营建议按完整链路部署。

个人自用:CLIProxyAPI

把自己的 CLI / OAuth 账号统一成 API,链路短,最容易调通。

推荐起步账号池OpenAI 兼容

对外运营:new-api + CLIProxyAPI

new-api 管用户、令牌和计费,CLIProxyAPI 管上游账号池。

卖 token用户后台支付扩展

订阅源转换:sub2api

需要把订阅源或现成账号源转换成 API 时再部署。

订阅转换备用上游

完整混合运营

new-api 做统一入口,CLIProxyAPI 与 sub2api 分别作为不同类型上游。

多上游团队/商业

最终入口规划

入口服务用途
https://api.mzai.cc/new-api / 主入口用户后台、令牌、额度、OpenAI 兼容接口
https://sub.mzai.cc/sub2api订阅转换、订阅接入、上游账号管理
https://cpa.mzai.cc/CLIProxyAPICLI / OAuth 账号代理,提供兼容接口
如果你只准备使用现有主站 api.mzai.cc,可以先部署 new-api 和 CLIProxyAPI;sub2api 等需要订阅转换时再加。

部署步骤

准备域名和服务器

域名托管到 Cloudflare,服务器使用 Ubuntu 24.04 LTS,防火墙放行 22、80、443。

配置 DNS

添加 api、sub、cpa 三条 A 记录,首次部署使用 DNS only,确认正常后再开启代理。

让 Codex 接管服务器

告诉 Codex 服务器 IP、域名、敏感信息规则和操作确认要求。

展开:第一次发给 Codex 的背景
我在 Windows 本地操作,服务器是腾讯云轻量应用服务器。
服务器 IP 是 你的服务器IP。
域名是 mzai.cc。
后续请按照教程要求,通过 SSH 连接服务器并完成部署。
执行涉及密码、密钥、令牌、OAuth Token 的操作时,不要把敏感内容输出到聊天里。
每次修改服务器文件前,请先说明文件路径和修改目的。
如果遇到会覆盖数据、删除数据、重启关键服务的操作,请先说明风险并等我确认。

配置 root SSH 免密

临时开启 root 密码登录,随后让 Codex 生成 SSH Key 并配置免密,成功后关闭密码登录。

展开:root SSH 免密提示词
登录后 whoami 输出 root。
不要关闭腾讯云控制台登录窗口,等免密登录验证成功后再关闭。
这一步交给 Codex 在本地电脑上完成。前提是你已经能通过下面命令用密码登录:
把下面提示词发给 Codex。
请在本地为服务器配置 root SSH 免密登录。
服务器信息:
1. 服务器 IP:43.130.231.251
2. 登录用户:root
3. SSH 别名:lztoken-api
4. 本地系统:Windows PowerShell
前提:
1. root 密码登录已经开启。
2. 需要 root 密码时,请通过 SSH 密码提示让我输入。
3. 不要把 root 密码写入文件、命令历史、脚本或聊天记录。
目标:
1. 检查本地是否可用 ssh 和 ssh-keygen。
2. 检查本地 ~/.ssh 目录,不存在就创建。
3. 检查是否已有 ~/.ssh/lztoken_fun_root_ed25519。
4. 如果没有,就生成 ed25519 密钥:
ssh-keygen -t ed25519 -C "lztoken.fun root ssh" -f ~/.ssh/lztoken_fun_root_ed25519
5. 只把 .pub 公钥上传到服务器,不要输出或上传私钥。
6. 将公钥追加到服务器 /root/.ssh/authorized_keys,不要覆盖已有内容。
7. 在服务器上设置权限:
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
chown -R root:root /root/.ssh
8. 修改本地 ~/.ssh/config 前先备份。
9. 添加或更新下面的 SSH Host:
Host lztoken-api
HostName 43.130.231.251
User root
IdentityFile ~/.ssh/lztoken_fun_root_ed25519
IdentitiesOnly yes
10. 验证免密登录:
ssh -o PreferredAuthentications=publickey -o PasswordAuthentication=no lztoken-api "whoami && hostname && date"
约束:
1. 不要删除本地已有 SSH 密钥。
2. 不要覆盖服务器已有 authorized_keys。
3. 如果上传或验证失败,先说明失败原因,再给出下一步处理建议。
4. 最后给出验证结果,必须包含 whoami 输出是否为 root。
展开:关闭密码登录提示词
root SSH 免密登录已经成功。请帮我把 SSH 密码登录关闭,只保留密钥登录。
要求:
1. 修改前备份 SSH 配置。
2. 处理 /etc/ssh/sshd_config.d/00-root-password-login.conf,禁用 PasswordAuthentication。
3. root 允许密钥登录,但不允许密码登录,例如使用 PermitRootLogin prohibit-password。
4. 重启 SSH 前先检查配置语法。
5. 不要关闭当前会话,必须新开会话验证 root 免密仍然可用。
6. 如果验证失败,立即回滚配置。
7. 最后给出验证结果:密钥登录是否成功、密码登录是否已禁用。

安装基础环境

安装 Docker、Docker Compose、Caddy,并创建 /opt/caddy、/opt/new-api、/opt/cliproxyapi、/opt/sub2api。

展开:基础环境提示词
六、部署 CLIProxyAPI
6.1 服务信息
6.2 交给 Codex 的提示词
6.3 验证结果
6.4 添加 CLI / OAuth 账号
七、部署 sub2api
7.1 服务信息
7.2 交给 Codex 的提示词
7.3 验证结果
八、部署 new-api
8.1 服务信息
8.2 交给 Codex 的提示词
8.3 初始化后台
九、后台基础配置
9.1 new-api 基本配置
9.2 在 new-api 中添加 CLIProxyAPI 渠道
9.3 在 new-api 中添加 sub2api 渠道
9.4 创建令牌并测试
十、日常维护
10.1 每日健康检查
10.2 备份
10.3 升级
10.4 回滚
十一、常见问题排查
十二、参考资料
来源
更新记录
/opt/caddy/
/opt/cliproxyapi/
/opt/sub2api/
/opt/new-api/
请使用 root 免密 SSH 连接服务器 43.130.231.251,并安装 API 中转站基础环境。
1. 系统:Ubuntu 24.04 LTS。
2. 登录用户:root。
3. SSH 别名:lztoken-api。
4. 服务统一安装在 /opt/ 下。
5. 我不会手动登录服务器执行命令,所有操作都由你完成。
1. 检查系统版本、CPU、内存、磁盘、时区、端口占用。
2. 安装常用工具:curl、wget、vim、git、ca-certificates、gnupg、openssl、jq、lsof、htop。
3. 按 Docker 官方 apt 仓库方式安装 Docker Engine 和 docker compose 插件。
4. 按 Caddy 官方 Ubuntu 包方式安装 Caddy。
5. 创建目录:
- /opt/caddy
- /opt/cliproxyapi

部署 CLIProxyAPI

先部署账号池代理层,端口只绑定 127.0.0.1,通过 Caddy 暴露 cpa 子域名。

展开:CLIProxyAPI 提示词
请使用 root 免密 SSH 连接服务器 43.130.231.251,部署 CLIProxyAPI。
已知信息:
1. 安装目录:/opt/cliproxyapi
2. 对外域名:cpa.lztoken.fun
3. 主服务端口:127.0.0.1:8317
4. 镜像:eceasy/cli-proxy-api:latest
5. Caddy 配置文件:/opt/caddy/api-relay.caddy
1. 根据 CLIProxyAPI 当前官方文档或仓库示例确认 docker-compose.yml 和 config.yaml 的最新写法。
2. 创建 /opt/cliproxyapi/docker-compose.yml。
3. 创建 /opt/cliproxyapi/config.yaml。
4. 持久化 /opt/cliproxyapi/auths 和 /opt/cliproxyapi/logs。
5. 主服务端口只绑定 127.0.0.1:8317。
6. 其他登录、回调或辅助端口也只绑定 127.0.0.1,不直接暴露公网。
7. 在 /opt/caddy/api-relay.caddy 中添加 cpa.lztoken.fun 反向代理。
8. 检查 Caddy 配置并重载。
9. 启动容器并检查日志。
配置要求:
1. 管理密钥、API Key 使用强随机值。
2. 不要把真实密钥输出到聊天里,只告诉我保存在哪个文件和字段。
3. 如果需要我在浏览器里完成 OAuth 授权,请给出授权链接和下一步说明。
4. 如果官方镜像、配置字段或登录命令有变化,以当前官方文档为准,并告诉我差异。
验证:
1. CLIProxyAPI 容器处于运行状态。
2. 127.0.0.1:8317 有响应。
3. https://cpa.lztoken.fun 有响应。
4. https://cpa.lztoken.fun/management.html 可以打开。

部署 new-api

部署主后台,用 api.mzai.cc 作为统一入口,后续在后台添加 CLIProxyAPI 渠道。

展开:new-api 提示词
4. 镜像:calciumion/new-api:latest
5. 数据库:PostgreSQL 容器
6. Redis:Redis 容器
7. Caddy 配置文件:/opt/caddy/api-relay.caddy
1. 根据 new-api 当前官方文档确认 Docker Compose 和环境变量写法。
2. 创建 /opt/new-api/.env。
3. 创建 /opt/new-api/docker-compose.yml。
4. 数据目录放在 /opt/new-api/data。
5. 日志目录放在 /opt/new-api/logs。
6. PostgreSQL 数据放在 /opt/new-api/postgres_data。
7. Redis 数据放在 /opt/new-api/redis_data。
8. 使用强随机值生成 PostgreSQL 密码、Redis 密码、SESSION_SECRET。
9. 服务端口只绑定 127.0.0.1:3000。
10. 数据库和 Redis 端口不要映射到公网。
11. 在 /opt/caddy/api-relay.caddy 中添加 api.lztoken.fun 反向代理。
12. 检查 Caddy 配置并重载。
13. 启动 new-api、PostgreSQL、Redis,并检查日志。
2. 不要暴露数据库和 Redis 端口到公网。
3. 不要删除已有 /opt/new-api 数据。
4. 如果 new-api 官方文档的推荐环境变量有变化,请以官方文档为准并告诉我差异。
5. 如果使用 PostgreSQL,请确认 SQL_DSN 格式正确。
1. new-api、postgres、redis 三个容器都处于运行状态。
2. 127.0.0.1:3000 有响应。
3. https://api.lztoken.fun 可以打开。
4. 首次初始化管理员页面可以正常打开。
浏览器打开:
第一次打开会进入初始化页面。按页面提示设置管理员账号和密码。
初始化后建议配置:
菜单
要做什么

按需部署 sub2api

如果你需要订阅转换或备用账号池,再部署 sub2api。

展开:sub2api 提示词
请使用 root 免密 SSH 连接服务器 43.130.231.251,部署 sub2api。
1. 安装目录:/opt/sub2api
2. 对外域名:sub.lztoken.fun
3. 服务端口:127.0.0.1:8080
4. 镜像:ghcr.io/dr-lin-eng/sub2api:latest
5. 数据目录:/opt/sub2api/data
6. PostgreSQL 数据目录:/opt/sub2api/postgres_data
7. Redis 数据目录:/opt/sub2api/redis_data
8. Caddy 配置文件:/opt/caddy/api-relay.caddy
1. 根据 sub2api 当前官方仓库确认 Docker Compose 部署方式。
2. 优先使用本地目录持久化方式,方便备份和迁移。
3. 创建 /opt/sub2api/.env。
4. 创建 /opt/sub2api/docker-compose.yml。
5. 使用 PostgreSQL 和 Redis 容器。
6. 使用强随机值生成 PostgreSQL 密码、Redis 密码、JWT_SECRET、TOTP_ENCRYPTION_KEY、管理员密码。
7. 端口只绑定 127.0.0.1:8080。
8. 数据库和 Redis 端口不要映射到公网。
9. 在 /opt/caddy/api-relay.caddy 中添加 sub.lztoken.fun 反向代理。
10. 检查 Caddy 配置并重载。
11. 启动 sub2api、PostgreSQL、Redis,并检查日志。
1. 不要把真实密码输出到聊天里。
2. 不要把数据库端口和 Redis 端口暴露公网。
3. 不要删除已有 /opt/sub2api 数据。
4. 如果镜像、环境变量或 compose 写法与当前官方文档不一致,请以官方文档为准并告诉我差异。
1. sub2api、postgres、redis 三个容器都处于运行状态。
2. 127.0.0.1:8080 有响应。
3. https://sub.lztoken.fun 有响应。
4. 管理员账号可以登录,或者初始化流程可以正常打开。
5. 告诉我管理员用户名和密码分别保存在 /opt/sub2api/.env 的哪些字段,不要直接输出真实值。
sub2api 管理后台地址:

创建令牌并测试

在 new-api 后台创建 sk- 令牌,测试 /v1/models 和 /v1/chat/completions。

展开:令牌测试提示词
地址:
https://api.lztoken.fun/v1
测试内容:
1. /v1/models
2. /v1/chat/completions
1. 我会通过安全方式提供 sk- 开头的令牌。
2. 不要把令牌输出到聊天里。
3. 如果失败,请判断是令牌、模型名、渠道、上游还是网络问题。
4. 最后只给出 HTTP 状态、是否成功、失败原因和下一步建议。
new-api 能识别令牌。
渠道测试成功。
模型名能匹配到对应渠道。
返回内容不是 401、403、404、502、渠道不存在、模型不存在。
请帮我对 lztoken-api 服务器做一次 API 中转站健康检查。

后台配置重点

菜单要做什么
系统设置设置站点名称、站点地址、文档地址
用户管理确认管理员账号安全,关闭不需要的注册方式
分组管理创建默认分组或套餐分组
渠道管理接入 CLIProxyAPI、sub2api 或其他上游
令牌管理创建测试令牌
模型设置确认模型名、倍率和渠道映射

CLIProxyAPI 渠道示例

配置项
渠道类型OpenAI 兼容
渠道名称cliproxyapi
Base URLhttps://cpa.mzai.cc/v1
API Key使用 /opt/cliproxyapi/config.yaml 中配置的 Key
模型以 CLIProxyAPI 实际返回为准

维护与排错

健康检查

检查 SSH、磁盘、内存、Docker、Caddy、容器状态、HTTPS 和最近日志。

展开:健康检查提示词
4. Caddy 是否运行。
5. new-api、sub2api、CLIProxyAPI 相关容器是否运行。
6. 三个域名 HTTPS 是否正常:
- https://api.lztoken.fun
- https://sub.lztoken.fun
- https://cpa.lztoken.fun
7. 本机端口监听是否符合预期:
- 127.0.0.1:3000
- 127.0.0.1:8080
- 127.0.0.1:8317
- 0.0.0.0:80
- 0.0.0.0:443
8. 最近 100 行关键日志里是否有 error、panic、failed、timeout、certificate 等异常。
1. 不要输出任何密钥、令牌、密码。
2. 只总结异常和建议。
3. 如果都正常,给出简短健康报告。
建议至少备份这些目录:
重点数据:
必备份内容
.env、data、postgres_data、redis_data、logs
config.yaml、auths、logs
api-relay.caddy
备份提示词:
请帮我备份 API 中转站数据。
1. 备份 /opt/caddy、/opt/cliproxyapi、/opt/sub2api、/opt/new-api。

备份

重点备份 /opt/caddy、/opt/cliproxyapi、/opt/sub2api、/opt/new-api。

展开:备份提示词
请先完成:
1. 检查当前 new-api、sub2api、CLIProxyAPI 的镜像版本或镜像摘要。
2. 检查官方文档或仓库是否有破坏性变更。
3. 给出升级计划,包括备份、拉取镜像、重启、验证和回滚方式。
4. 明确哪些服务会短暂中断。
等我确认后,再执行升级。
回滚前要确认:
是否有升级前备份。

常见问题

现象优先检查处理方向
域名打不开DNS 是否生效、A 记录是否指向服务器 IP用 dig / nslookup 查解析
HTTPS 证书失败80/443 是否放行、Caddy 日志先用 DNS only 检查 Caddy 证书
502 Bad GatewayCaddy 反代端口是否可达检查 127.0.0.1:3000/8080/8317
渠道测试 401/403API Key 或鉴权方式重新确认上游 Key 和渠道密钥
容器反复重启环境变量、数据目录权限、端口冲突查日志,不要先删数据
展开:通用排错提示词
通用排错提示词:
请帮我排查 API 中转站故障。
故障现象:
请在这里填写具体表现,例如 api.lztoken.fun 返回 502。
1. 先只读检查,不要修改配置。
2. 检查 DNS、端口、Caddy、Docker、目标容器、最近日志。
3. 不要输出任何密钥、令牌、密码。
4. 给出最可能的 3 个原因,按概率排序。
5. 每个原因给出验证命令和修复建议。
6. 修复前先征求我确认。