从零搭建生产级 AI API 中转平台New-API Docker 易支付完整避坑指南️分类标签Docker、Nginx、API中转、大模型、商业化部署、运维实战更新时间2026年5月阅读对象有基础 Linux 操作能力的开发者、计科学生、想搭建 API 中转站的站长 写在前面随着大模型的爆发API 中转分发成为了很多开发者和计科学生薅羊毛乃至商业化运营的首选项目。市面上有很多开源的中转面板其中New-API因其强大的多渠道调度、高并发支持和完善的计费系统而备受青睐。但*能跑起来和能稳定商业运营完全是两码事*。本文将带你跳过所有试错坑用生产环境的标准Docker 容器化 Nginx Proxy Manager 反代 HTTPS 加密 易支付商业化从零搭建一套属于你自己的全链路 API 中转站。全文目录第一阶段基础设施与环境准备第二阶段Docker Compose 全家桶部署第三阶段Nginx 网关接管与 HTTPS 挂载第四阶段商业化闭环 —— 接入易支付第五阶段站长进阶黑科技附录实用命令备忘录️ 第一阶段基础设施与环境准备不要直接在宿主机裸奔二进制文件我们要用现代工程化的标准来做。1.1 服务器与域名选型项目推荐配置VPS延迟较低的海外轻量云服务器阿里云国际版新加坡节点、腾讯云香港节点2C4G 配置起步最佳域名准备一个域名哪怕是几块钱一年的.top或.xyz将子域名如api.yourdomain.com的 A 记录解析到 VPS 公网 IP操作系统Ubuntu 22.04 LTS 或 Debian 121.2 安全组配置极其关键在你的云服务器控制台如阿里云安全组只放行以下入方向端口端口协议用途备注22TCPSSH 远程连接必须保留80TCPHTTP用于 SSL 证书验证443TCPHTTPS加密访问81TCPNPM 管理面板临时放行配置完域名后可关闭⚠️避坑指南千万不要在安全组放行 3000 端口New-API 的默认端口。我们将通过 Nginx 反向代理进行内网转发直接暴露 3000 端口极易遭到黑客扫描和爆破。1.3 安装 Docker 环境在服务器终端执行以下命令安装最新版 Docker 及 Compose 插件# 更新源并安装基础工具sudoaptupdatesudoaptinstall-ycurlvimgit# 一键安装 Dockercurl-fsSLhttps://get.docker.com|bash# 启动并设置开机自启sudosystemctlenable--nowdocker验证安装是否成功docker--versiondockercompose version看到版本号输出即表示安装成功。 第二阶段Docker Compose 全家桶部署为了极致的性能和数据安全我们采用New-API MySQL持久化 Redis缓存提速 NPM网关的经典四件套架构。2.1 创建项目目录mkdir-p/home/new-apicd/home/new-api2.2 编写 docker-compose.ymlnanodocker-compose.yml将以下内容完整复制进去注意修改你的强密码services:new-api:image:calciumion/new-api:latestcontainer_name:new-apirestart:alwayscommand:--log-dir /app/logsports:# ⚠️ 安全加固只监听本地的 3000 端口公网无法直接访问-127.0.0.1:3000:3000volumes:-./data:/data-./logs:/app/logsenvironment:# 请将下面的密码替换为你自己的 MySQL 强密码-SQL_DSNroot:YourStrongPassword123!tcp(db:3306)/newapi?charsetutf8mb4parseTimeTruelocLocal-REDIS_CONN_STRINGredis://redis:6379-SESSION_SECRETchange_this_to_a_random_string-TZAsia/Shanghaidepends_on:-db-redisdb:image:mysql:8.0container_name:mysqlrestart:alwaysenvironment:-MYSQL_ROOT_PASSWORDYourStrongPassword123!# 必须与上面的密码一致-MYSQL_DATABASEnewapivolumes:-./mysql:/var/lib/mysqlredis:image:redis:alpinecontainer_name:redisrestart:alwaysnpm:image:jc21/nginx-proxy-manager:latestcontainer_name:npmrestart:alwaysports:-80:80-81:81-443:443volumes:-./npm/data:/data-./npm/letsencrypt:/etc/letsencryptdepends_on:-new-api2.3 一键启动dockercompose up-d2.4 验证容器状态dockerps确认四个容器new-api、mysql、redis、npm均处于Up状态。架构说明new-api核心 API 中转服务监听 3000 端口mysql数据持久化存储保存用户、令牌、日志等数据redis缓存加速提升高并发场景下的响应速度npmNginx 反向代理网关负责 SSL 终结和域名转发 第三阶段Nginx 网关接管与 HTTPS 挂载目前系统在跑但我们需要给它穿上加密铠甲。3.1 进入 NPM 管理后台浏览器访问http://你的公网IP:81进入 Nginx Proxy Manager 后台。项目值默认账号adminexample.com默认密码changeme登录后系统会强制要求修改默认密码请设置一个强密码。3.2 添加反向代理规则点击左侧菜单Proxy Hosts→Add Proxy HostDetails 选项卡配置字段值Domain Names输入你的解析好的域名如api.yourdomain.com敲回车确认SchemehttpForward Hostname / IPnew-apiDocker 内网 DNS 自动解析容器名Forward Port3000Block Common Exploits✅ 勾选Websockets Support✅ 勾选对 API 的流式对话极其重要SSL 选项卡配置字段值SSL CertificateRequest a new SSL CertificateForce SSL✅ 勾选I Agree to the Let’s Encrypt Terms of Service✅ 勾选点击Save保存。3.3 验证部署等待几秒钟如果列表里显示绿色的Online恭喜你直接访问https://api.yourdomain.com你就能看到带有小绿锁的 New-API 登录界面了。初始登录信息账号root密码123456⚠️登录后请立刻修改默认密码 第四阶段商业化闭环 —— 接入易支付很多人想用支付宝收款但在后台填配置时频频踩坑。这里彻底梳理接入逻辑。4.1 获取商户信息在任意支持支付宝当面付的易支付平台如彩虹易支付、虎皮椒等注册商户获取三个核心参数参数说明示例API 接口地址易支付平台的网关 URL注意末尾带斜杠https://www.ezfpy.cn/商户 PID你的商户编号10001商户 KEY你的商户密钥xxxxxxxxxxxxx4.2 New-API 后台配置进入New-API 后台→设置→充值设置。⚠️避坑指南千万不要填错位置很多新手会把参数填进Stripe PriceId或Creem ProductId里那是给海外信用卡平台用的对于国内易支付完全无视这两个框留空即可。往下拉找到专属的易支付 (Epay) 配置区字段值易支付地址填入平台 URLhttps://www.ezfpy.cn/易支付商户 ID填入 PID易支付商户密钥填入 KEY支付方式勾选支付宝 (Alipay)4.3 终极 Bug 修复为什么点击充值报错账户余额不足如果你配置好后前端点击充值跳转时报错“账户余额不足”这通常不是代码问题原因分析如今大部分易支付平台采用预扣手续费模式。它在为你创建支付二维码前需要先从你的商户余额扣除几分钱的手续费。解决方案登录易支付平台的商户后台给自己充值 1~5 元作为手续费池再次点击即可完美跳出二维码。 这是绝大多数新手都会踩的坑网上几乎搜不到答案记住这个解法能帮你省去几小时的排查时间。 第五阶段站长进阶黑科技黑科技 1为公告加入高颜值的 Telegram 客服卡片在 New-API 的设置 → 常规设置 → 公告中系统支持 Markdown 和原生 HTML。你可以复制以下代码实现一个极具科技感的悬停电报按钮ahrefhttps://t.me/你的TG群组链接target_blankstyledisplay:flex;align-items:center;background-color:#f0f8ff;border-left:4px solid #0088cc;padding:12px 16px;border-radius:8px;text-decoration:none;color:#333;transition:all 0.3s ease;box-shadow:0 2px 5pxrgba(0,0,0,0.05);onmouseoverthis.style.boxShadow0 4px 10px rgba(0,136,204,0.15);this.style.transformtranslateY(-2px);onmouseoutthis.style.boxShadow0 2px 5px rgba(0,0,0,0.05);this.style.transformtranslateY(0);svgxmlnshttp://www.w3.org/2000/svgviewBox0 0 496 512stylewidth:24px;height:24px;fill:#0088cc;margin-right:12px;pathdM248 8C111 8 0 119 0 256S111 504 248 504 496 393 496 256 385 8 248 8zM363 176.7c-3.7 39.2-19.9 134.4-28.1 178.3-3.5 18.6-10.3 24.8-16.9 25.4-14.4 1.3-25.3-9.5-39.3-18.7-21.8-14.3-34.2-23.2-55.3-37.2-24.5-16.1-8.6-25 5.3-39.5 3.7-3.8 67.1-61.5 68.3-66.7 .2-.7 .3-3.1-1.2-4.4s-3.6-.8-5.1-.5q-3.3 .7-104.6 69.1-14.8 10.2-26.9 9.9c-8.9-.2-25.9-5-38.6-9.1-15.5-5-27.9-7.7-26.8-16.3q.8-6.7 18.5-13.7 108.4-47.2 144.6-62.3c68.9-28.6 83.2-33.6 92.5-33.8 2.1 0 6.6 .5 9.6 2.9a10.5 10.5 0 0 1 3.5 6.7A43.8 43.8 0 0 1 363 176.7z//svgdivstrongstyledisplay:block;font-size:15px;color:#0088cc;加入技术交流群/strongspanstylefont-size:13px;color:#666;获取最新模型更新与技术支持/span/div/a效果预览左侧蓝色边框 Telegram 图标悬停时有轻微上浮动画和阴影变化点击直接跳转到你的 Telegram 群组 使用时将https://t.me/你的TG群组链接替换为你真实的群组链接即可。黑科技 2解决关于页面点击无反应 / iframe 跨域报错很多站长想在系统的关于页面跳转到自己的博客或导航站直接填入 URL 后却发现点击无反应按 F12 会出现大量的Mixed ContentHTTPS 混合内容拦截或CORS 跨域报错。解决方案前端路由劫持暴力重定向既然系统的 iframe 渲染被浏览器安全策略拦截了我们可以直接清空输入框里的网址填入这段万能跳转代码imgsrcxonerrorwindow.top.location.hrefhttps://你的目标网址.comstyledisplay:none;原理解析这是一段极具攻击性但非常有效的防御式编程代码。系统一旦尝试渲染这个不可见的破损图片就会立刻触发onerror错误处理钩子利用window.top进行顶级页面的提权跳转直接无视掉所有 Iframe 的限制与跨域拦截。⚠️安全提醒此方法仅用于你自己的站点请勿用于恶意用途。 实用命令备忘录场景命令查看所有容器状态docker ps实时查看报错日志docker compose logs -f new-api重启更新系统docker compose pull docker compose up -d停止所有服务docker compose down重启单个容器docker restart new-api进入 New-API 容器docker exec -it new-api /bin/sh查看 MySQL 数据docker exec -it mysql mysql -uroot -p newapi备份数据库docker exec mysql mysqldump -uroot -p newapi backup.sql 结语从买服务器、写 Docker Compose、配置安全网关到解决商业化支付报错这篇文章凝聚了无数个坑踩出来的实战经验。全文核心知识点回顾✅ Docker Compose 四件套容器化部署✅ Nginx Proxy Manager 反向代理 HTTPS 自动挂载✅ 安全组精细化管控不暴露 3000 端口✅ 易支付接入与余额不足Bug 修复✅ 公告卡片美化与 iframe 跨域绕过技巧如果你在部署中遇到了任何问题欢迎在评论区留言交流版权声明本文为原创实战教程转载请注明出处。❤️ 觉得有帮助的话请点赞 收藏 关注支持一下后续会持续更新更多硬核项目实战本人可以提供相关大模型的渠道搭建过程以及后续渠道可以找我合作