手把手,嘴对嘴教你Docker(Compose)部署AI全家桶(API+MCP+轮询),玩转AI不求人!

13 1
API网关
一般我们使用AI的时候,需要一个API地址,和一个API KEY,然后才能使用AI的API服务.那么New API就是负责创建并管理各种AI渠道和API KEY的发放,以及额度控制和用户管理的.使用New API的好处之一就是,比如我们使用很多的AI官方服务,比如DeepSeek, OpenAI, Grok, Google Gemini等,如果没有这种整合,那么我就需要在每个用来聊天的AI客户端里,依次添加每个渠道的API地址和API KEY,太麻烦了.那么我们就可以把这些渠道整合在New API里,对外只需要一个域名,一个Key,就可以直接访问这些所有的渠道,非常方便.并且也不用担心KEY的泄露,毕竟不是你的官Key泄露,只需要在New API里删除重新创建一个就行了,而且有完善的日志管理和额度控制,有可疑的地方,翻一翻也能找出问题在哪.还有个好处就是,只要你搭建New API的服务器能正常访问ChatGPT, Claude等,你又能正常访问你的New API这台服务器,那么等于你不用dai--li也能正常访问ChatGPT, Claude.不会暴露你的本机IP.并且New API也可以配置访问dai--li,用配置的dai--li(比如WARP)来访问这些官方的API服务,非常地隐私友好.

mcp

MCP全称Model Context Protocol,模型上下文协议,简单理解就是你可以使用它来获取需要让AI知道的内容,然后喂给AI.比如时间MCP,它会获取本机的时间,然后将返回结果的JSON喂给AI,AI就知道现在是什么时候了,从而给出更符合当前情境的答案.有很多实用的MCP服务器都是stdio类型的,需要在本机运行.但是有一些MCP比如代码运行之类的工具,在本机运行的话可能有风险(比如跑了个删除文件的代码给你电脑文件删了).还有就是如果手机端要用,基本上stdio类的MCP是用不了的,一般只能用SSE或者Streamable HTTP类型的,可以理解为MCP在远程服务器运行,你只需要调用它提供的SSE或者Streamable HTTP的API

key轮循
API KEY的轮询项目(可选),用途是有大量的API KEY的时候,可以轮询使用,用完1次下次就换下1个KEY,避免频率限制等问题(主要是针对大量的,免费的Gemini KEY).因我不喜欢用New API自带的轮询,我喜欢用GPT-Load



简单介绍完,那么就开始搭建步骤
New API:
新建一个new-api目录
  1. mkdir new-api && cd new-api
复制代码
配置环境变量(文本编辑工具爱用哪个用哪个,我喜欢用nano)

  1. nano .env
复制代码
输入以下内容(自己用SQLite就够了,MYSQL等数据库可以去参照官方文档部署)

  1. REDIS_CONN_STRING=redis://new-api-redis
  2. MEMORY_CACHE_ENABLED=true
  3. TZ=Asia/Shanghai
  4. ERROR_LOG_ENABLED=true
复制代码
创建docker-compose.yml文件

  1. nano docker-compose.yml
复制代码
输入以下内容,这里映射的端口是用来SSH隧道访问演示用的,实际使用是和Cloudflared容器组一个自定义网络,然后直接通过CF Tunnel后台配置的域名访问New API容器的,其他容器也如此.你可以自行换成其他方式,比如映射到宿主机端口,或者用nginx容器反代也行.

  1. name: new-api
  2. services:
  3.   new-api:
  4.     image: calciumion/new-api:latest
  5.     container_name: new-api
  6.     restart: unless-stopped
  7.     env_file:
  8.       - .env
  9.     command: --log-dir /app/logs
  10.     volumes:
  11.       - ./data:/data
  12.       - ./logs:/app/logs
  13.     depends_on:
  14.       new-api-redis:
  15.         condition: service_healthy
  16.     healthcheck:
  17.       test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '"success":\\s*true' | awk -F: '{print $$2}'"]
  18.       interval: 30s
  19.       timeout: 10s
  20.       retries: 3
  21.     networks:
  22.       internal:
  23.       cf_tunnel:
  24.         ipv4_address: 192.168.0.2
  25.     expose:
  26.       - 3000
  27.     ports: # 用于SSH隧道访问,可以创建完管理员账号以后删除
  28.       - 127.0.0.1:3000:3000 # 用于SSH隧道访问,可以创建完管理员账号以后删除

  29.   new-api-redis:
  30.     image: redis:alpine
  31.     container_name: new-api-redis
  32.     restart: unless-stopped
  33.     healthcheck:
  34.       test: ["CMD", "redis-cli", "ping"]
  35.       interval: 10s
  36.       timeout: 5s
  37.       retries: 3
  38.     networks:
  39.       - internal

  40. networks:
  41.   internal:
  42.     internal: true
  43.   cf_tunnel:
  44.     external: true
复制代码
创建自定义网络(用来和Cloudflared容器共享网络,走Cloudflare Tunnel从公网访问)

  1. docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.254 --ipv6 cf_tunnel
复制代码
运行容器
  1. docker compose up -d
复制代码
查看日志是否正常运行

  1. docker logs -f new-api
复制代码

  1. ssh -N -L 127.0.0.1:3000:127.0.0.1:3000 -p <port_number> <user>@<your_vps_ip>
复制代码
我们前面在compose配置文件里已经做好了数据持久化,所以下一步

输入完账号密码,下一步


选择自用模式,下一步


最后一步,点初始化系统


我们点击右上角的登录,用刚才注册的管理员账号登录


先点进系统设置,把新用户注册关了(没配置邮箱貌似没问题,因为根本没有邮件服务,所以注册不了,但是怕后面忘了,好习惯,有需要自己再开)



然后我们去添加一个AI渠道,这里演示是DeepSeek



类型选DeepSeek,输入你喜欢的渠道名称,官方的API KEY,下面模型那里如果没显示模型,就点下获取模型列表,然后添加.没问题我们就点提交

测试下渠道看看是否有效



然后我们创建一个API KEY,准备开始跟AI聊天


额度,过期时间,用户组什么的随便设置.(顺便提一嘴,你可以用用户分组控制来实现不同分组的用户,允许或限制访问指定的模型,或者不同的倍率,这里就不多说了,可以自己了解下.这里演示默认是default分组,添加的渠道也是默认default分组,所以不需要额外设置)


打开AI聊天客户端,这里演示用Cherry Studio.添加一个提供商


输入你喜欢易记的名称


输入好API地址和API KEY后点击管理(这里因为是SSH隧道转发到本地的,所以这里填的是http://127.0.0.1:3000,后面用Cloudflare Tunnel可以配置域名从公网访问)


添加所有模型



新建一个AI助手,点左边的模型设置,再点右上角的模型选择,选择我们刚才添加的模型



到这里恭喜你,你有了属于自己的AI API网关




MCP网关
我推荐使用ptbsare大佬的mcp-proxy-server项目
可以聚合MCP服务器,把Stdio, SSE, Streamable HTTP类型的MCP全部集合在这个容器里运行,然后统一对外提供SSE或者Streamable HTTP接口来调用,现在的桌面端AI聊天客户端一般都支持SSE和Streamable HTTP的.手机端的话只有少部分支持Streamable HTTP(比如RikkaHub)

那么开始部署


创建mcp-proxy-server文件夹
  1. mkdir mcp-proxy-server && cd mcp-proxy-server
复制代码
配置环境变量

  1. nano .env
复制代码
输入以下内容:
  1. PORT=8080
  2. ALLOWED_KEYS=<建议用长一点的密码,最好不要带$>
  3. ENABLE_ADMIN_UI=false
  4. ADMIN_USERNAME=username
  5. ADMIN_PASSWORD=<建议用长一点的密码,最好不要带$>
  6. SESSION_SECRET=<建议用长一点的密码,最好不要带$>
  7. RETRY_SSE_TOOL_CALL=true
  8. SSE_TOOL_CALL_MAX_RETRIES=4
  9. SSE_TOOL_CALL_RETRY_DELAY_BASE_MS=300
  10. RETRY_HTTP_TOOL_CALL=true
  11. HTTP_TOOL_CALL_MAX_RETRIES=4
  12. HTTP_TOOL_CALL_RETRY_DELAY_BASE_MS=500
  13. RETRY_STDIO_TOOL_CALL=true
  14. STDIO_TOOL_CALL_MAX_RETRIES=5
  15. STDIO_TOOL_CALL_RETRY_DELAY_BASE_MS=1000
复制代码
输入以下内容:

  1. {
  2.     "mcpServers": {
  3.         "time": {
  4.             "type": "stdio",
  5.             "name": "Time",
  6.             "active": true,
  7.             "command": "uvx",
  8.             "args": [
  9.                 "mcp-server-time",
  10.                 "--local-timezone=Asia/Shanghai"
  11.             ]
  12.         }
  13.     }
  14. }
复制代码
运行容器:
  1. docker compose up -d
复制代码
查看运行日志,容器是否正常运行

  1. docker logs -f mcp-proxy-server
复制代码

开启SSH隧道转发
  1. ssh -N -L 127.0.0.1:3001:127.0.0.1:3001 -p <port_number> <user>@<your_vps_ip>
复制代码
继续转到Cherry Studio,添加一个MCP服务器


名称随意,类型选择Streamable HTTP, URL填 http://127.0.0.1:3001/mcp ,还是一样,可以从Cloudflare Tunnel配置域名从公网访问.
请求头我们填写X-Api-Key=sk-test,也就是你在环境变量里设置的ALLOWED_KEYS



保存并启用以后,可以看到MCP服务器版本号亮了,并且可用工具的数量也更新了.




实际体验一下,先给AI启用对应的MCP服务器

非常完美,AI终于有了获取当前真实世界时间的能力!

KEY轮询

一般来说,个人用没有这么多KEY,所以一般来说是用不到,但是因为之前别的站流行打野,基本上人手都是几千上万的Gemini KEY,这个项目可以添加海量KEY并轮询,性能非常高,占用特别低,而且我也不喜欢New API自带的轮询(一开始还有BUG,后面慢慢完善了),所以后端我一般就用这个项目

开始部署:
创建gpt-load文件夹

  1. mkdir gpt-load && cd gpt-load
复制代码
配置环境变量

  1. nano .env
复制代码
  1. PORT=3000
  2. HOST=0.0.0.0

  3. SERVER_READ_TIMEOUT=60
  4. SERVER_WRITE_TIMEOUT=600
  5. SERVER_IDLE_TIMEOUT=120
  6. SERVER_GRACEFUL_SHUTDOWN_TIMEOUT=10

  7. IS_SLAVE=false

  8. TZ=Asia/Shanghai
  9. AUTH_KEY=sk-test

  10. REDIS_DSN=redis://gpt-load-redis:6379/0

  11. MAX_CONCURRENT_REQUESTS=99

  12. ENCRYPTION_KEY=encrypt_password

  13. #如果有需要可以自己设置代理,通过代理来访问API
  14. #HTTP_PROXY=socks5://192.168.1.1:1080
  15. #HTTPS_PROXY=socks5://192.168.1.1:1080
复制代码
创建docker-compose.yml

  1. nano docker-compose.yml
复制代码
  1. name: gpt-load
  2. services:
  3.   gpt-load:
  4.     image: ghcr.io/tbphp/gpt-load:latest
  5.     container_name: gpt-load
  6.     restart: unless-stopped
  7.     env_file:
  8.       - .env
  9.     volumes:
  10.       - ./data:/app/data
  11.     healthcheck:
  12.       test: wget -q --spider -T 10 -O /dev/null http://localhost:${PORT:-3001}/health
  13.       interval: 30s
  14.       timeout: 10s
  15.       retries: 3
  16.       start_period: 40s
  17.     depends_on:
  18.       gpt-load-redis:
  19.         condition: service_healthy
  20.         restart: true
  21.     networks:
  22.       internal:
  23.       cf_tunnel:
  24.         ipv4_address: 192.168.0.4
  25.     expose:
  26.       - 3000
  27.     ports:
  28.       - 127.0.0.1:3002:3000 # 我这里为了演示就不创建域名了,就用SSH隧道演示下

  29.   gpt-load-redis:
  30.     image: redis:latest
  31.     container_name: gpt-load-redis
  32.     restart: unless-stopped
  33.     healthcheck:
  34.       test: ["CMD", "redis-cli", "ping"]
  35.       interval: 5s
  36.       timeout: 3s
  37.       retries: 3
  38.     networks:
  39.       - internal

  40. networks:
  41.   internal:
  42.     internal: true
  43.   cf_tunnel:
  44.     external: true
复制代码
启动容器
  1. docker compose up -d
复制代码
查看日志,观察容器是否正常运行

  1. docker logs -f gpt-load
复制代码

开启SSH隧道转发

  1. ssh -N -L 127.0.0.1:3002:127.0.0.1:3002 -p <port_number> <user>@<your_vps_ip>
复制代码
浏览器访问 http://127.0.0.1:3002 登录后台,密钥就是环境变量里设置的AUTH_KEY

这里会有很多警告,因为我这里演示密码设置的很短很不安全,所以你们实际部署的时候,需要设置比较复杂的密码,推荐64位以上数字加字母大小写,符号也可以,但是docker环境变量的话$是保留字符,所以如果你需要表示$本身的话就需要2个$$来转义,所以之前密码我才不建议带$.



添加一个组


因为演示,我就只添加了DeepSeek官方渠道,实际使用你可以添加任意的OpenAI兼容渠道,Gemini兼容渠道和Anthropic兼容渠道.这里点生成按钮可以生成任意数量的密钥,因为一般是用作New-API的后端,所以生成1个就行了.


给渠道添加任意数量的KEY


测试一下渠道是否有效



那么如何搭配New-API使用呢,因为这2个容器是在同一个网络(cf_tunnel)中的,所以可以在New-API里添加一个渠道,类型选OpenAI,  API地址就填http://192.168.0.4:3000/proxy/deepseek ,这里192.168.0.4是GPT-Load容器的IP, 3000是端口, /proxy是固定路径, /deepseek是刚才我们创建分组时填写的名称.所以对外提供服务的链接就是http://192.168.0.4:3000/proxy/deepseek.
模型列表里默认会存在大量OpenAI的模型,我们先点击清除,再点击获取


勾选渠道包含的模型,然后确定



测试一下是否有问题


至此API网关+MCP网关+Key轮询就部署完毕了.但是因为这里为了方便,所以用的是SSH隧道的方式访问,下面再讲一下配合Cloudflared(Cloudflare Tunnel)容器实现公网访问.但是需要你自己有域名,并且已经托管到CF




先登录到Cloudflare控制面板,找到Zero Trust


然后 网络 -> Tunnels,创建一个新隧道

类型选Cloudflared



输入你喜欢的隧道名称,然后创建


并不需要安装什么,我们只需要他的密钥,我们点击复制按钮复制安装命令,找个文本编辑器比如VS Code,然后把install后面开始的密钥记录下来,后面要用.


创建cloudflared文件夹
  1. mkdir cloudflared && cd cloudflared
复制代码

配置环境变量
  1. nano .env
复制代码

输入以下内容:
  1. CLOUDFLARED_TOKEN=<你刚才复制并提取的密钥,ey开头的>
复制代码

编辑docker-compose.yml
  1. nano docker-compose.yml
复制代码

输入以下内容:

  1. <div>services:
  2.   cloudflared:
  3.     image: cloudflare/cloudflared:latest
  4.     container_name: cloudflared
  5.     restart: unless-stopped
  6.     env_file:
  7.       - .env
  8.     command: tunnel --no-autoupdate run --token ${CLOUDFLARED_TOKEN}
  9.     networks:
  10.       cf_tunnel:
  11.         ipv4_address: 192.168.0.1

  12. networks:
  13.   cf_tunnel:
  14.     external: true</div>
复制代码

拉起容器
  1. docker compose up -d
复制代码

观察容器运行日志,判断容器是否正常运行
  1. docker logs -f cloudflared
复制代码

我们回到Cloudflare控制台,点击我们刚才创建的隧道,然后点击编辑


切到已发布应用程序路由标签,然后我们添加一个应用程序路由


子域名看你自己喜好填写,域名选择你托管的域名,类型HTTP,URL填写New API容器的IP地址和端口


mcp-proxy-server也一样



配置以后可能因为DNS同步的关系,你本地不一定能立即访问,几秒钟到几个小时都是正常的.
确定解析生效了以后我们就可以去Cherry Studio里,将之前演示用的SSH隧道的本地地址,换成域名从公网访问了.

OK,大功告成!至此你已经拥有了属于自己的API网关,MCP网关.你可以把大量的渠道添加进New API或者GPT-Load,然后对外统一一个URL和KEY来访问,喜欢的MCP服务器也可以全部放进mcp-proxy-server这个容器里运行,你的任何AI聊天客户端都只需要访问mcp-proxy-server提供的SSE或者Stremable HTTP接口即可,All in One!而且SSE和Stremable HTTP接口是同时提供,不是只能用一个,你2个同时用都行.避免了很多手机端的AI聊天客户端只支持SSE的尴尬场面,因为有的MCP网关只支持Streamable HTTP.
存钱罐 正常运行
19 金币
无新回复 6天16小时 后关闭瓜分
10 初始投入
+9 累计添金
-0 累计取钱
存钱罐动态
玩法说明
九三郎 05-24 20:15
添金 +9 金币
kingkare 05-24 18:01
投入 10 金币 创建存钱罐
玩法规则
添金
80% 概率
1 - 10 金币
扣除用户积分
取钱
20% 概率
30 - 100 金币
如何参与

发帖开启存钱罐,回帖随机触发添金或取钱

结算规则

7天无回复自动关闭,关闭后余额随机分配给参与回帖的用户

全部评论1

沙发 昨天 20:15 | 查看全部
看上去好负责的样子。
此回帖触发「添金存钱」,为存钱罐增加 9 金币
来吧来吧,来唱歌吧。
回复
0
恶作剧

举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

hot.热文换一批
琥珀彩蛋
琥珀彩蛋
当前页面有彩蛋,请仔细寻找哦!
牛马论坛(niumabbs.com),一个专注于分享日常新鲜事、职场工作点滴、摸鱼乐趣与各类生活感悟的交流平台。

    关注我们

  • 加入Q群
  • 微信客服
  • QQ客服
Copyright © 2026 NIUMABBS 版权所有 All Rights Reserved. 劰载中...
关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表