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

同步来源:树洞剪藏 源站剪藏 ID:612 原文地址:https://www.deepflood.com/post-9597-1
手把手,嘴对嘴教你Docker(Compose)部署AI全家桶(API+MCP+轮询),玩转AI不求人!
set 限制解除 Deep Flood beta AI 摸鱼 情感 影音 运动 羊毛 推广 NodeSeek
人工智能 摸鱼闲聊 情感八卦 影音图文 运动赛事 游戏同好 羊毛福利 服务推广 投资理财 电子设备 运营反馈 内部版块 沙盒测试
手把手,嘴对嘴教你Docker(Compose)部署AI全家桶(API+MCP+轮询),玩转AI不求人!
ik4r Lv 4 楼主 AI高手 元老 42days ago edited 5days ago in 人工智能 #0
论坛新积分机制上线了,看完的朋友动动发财的小手点点免费小赞吧,有实力的再V我点星辰
你未付款 , 共计 0 用户付款, 共收到 0 🌌
一般我们使用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这台服务器,那么等于你不用代理也能正常访问ChatGPT, Claude.不会暴露你的本机IP.并且New API也可以配置访问代理,用配置的代理(比如WARP)来访问这些官方的API服务,非常地隐私友好.
MCP全称Model Context Protocol,模型上下文协议,简单理解就是你可以使用它来获取需要让AI知道的内容,然后喂给AI.比如时间MCP,它会获取本机的时间,然后将返回结果的JSON喂给AI,AI就知道现在是什么时候了,从而给出更符合当前情境的答案.有很多实用的MCP服务器都是stdio类型的,需要在本机运行.但是有一些MCP比如代码运行之类的工具,在本机运行的话可能有风险(比如跑了个删除文件的代码给你电脑文件删了).还有就是如果我手机端要用,基本上stdio类的MCP是用不了的,一般只能用SSE或者Streamable HTTP类型的,可以理解为MCP在远程服务器运行,你只需要调用它提供的SSE或者Streamable HTTP的API
API KEY的轮询项目(可选),用途是有大量的API KEY的时候,可以轮询使用,用完1次下次就换下1个KEY,避免频率限制等问题(主要是针对大量的,免费的Gemini KEY).因我不喜欢用New API自带的轮询,我喜欢用GPT-Load,也是隔壁站流行打野的时候开始用的,而且比较效率,轻量,用来当New API的后端很不错.
简单介绍完,那么就开始搭建步骤
New API
新建一个new-api目录
mkdir new-api && cd new-api
配置环境变量(文本编辑工具爱用哪个用哪个,我喜欢用nano)
nano . env
输入以下内容(自己用SQLite就够了,MYSQL等数据库可以去参照官方文档部署):
REDIS_CONN_STRING =redis://new-api-redis MEMORY_CACHE_ENABLED = true TZ =Asia/Shanghai ERROR_LOG_ENABLED = true
创建docker-compose.yml文件
nano docker-compose.yml
输入以下内容,这里映射的端口是用来SSH隧道访问演示用的,实际使用是和Cloudflared容器组一个自定义网络,然后直接通过CF Tunnel后台配置的域名访问New API容器的,其他容器也如此.你可以自行换成其他方式,比如映射到宿主机端口,或者用nginx容器反代也行.
name: new-api services: new-api: image: calciumion/new-api:latest container_name: new-api restart: unless-stopped env_file:
- .env command: --log-dir /app/logs volumes:
- ./data:/data
- ./logs:/app/logs depends_on: new-api-redis: condition: service_healthy healthcheck: test: [ "CMD-SHELL" , "wget -q -O - http://localhost:3000/api/status | grep -o '"success":\s*true' | awk -F: '{print $$2}'" ] interval: 30s timeout: 10s retries: 3 networks: internal: cf_tunnel: ipv4_address: 192.168 .0 .2 ports: # 用于SSH隧道访问,可以创建完管理员账号以后删除
- 127.0 .0 .1 :3000:3000 # 用于SSH隧道访问,可以创建完管理员账号以后删除
new-api-redis: image: redis:alpine container_name: new-api-redis restart: unless-stopped healthcheck: test: [ "CMD" , "redis-cli" , "ping" ] interval: 10s timeout: 5s retries: 3 networks:
- internal
networks: internal: internal: true cf_tunnel: external: true
创建自定义网络(用来和Cloudflared容器共享网络,走Cloudflare Tunnel从公网访问)
docker network create --driver bridge --subnet 192.168 . 0.0 / 24 --gateway 192.168 . 0.254 --ipv6 cf_tunnel
运行容器
docker compose up -d
查看日志是否正常运行
docker logs -f new -api
通过SSH隧道访问(虽然一般情况下不会有被扫,然后抢先注册管理员账号的情况发生,因为没有意义),不过这算是一个好习惯吧.
浏览器访问127.0.0.1:3000,注册New API的管理员账号
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文件夹
mkdir mcp-proxy-server && cd mcp-proxy-server
配置环境变量
nano . env
输入以下内容:
PORT = 8080 ALLOWED_KEYS =<建议用长一点的密码,最好不要带$> ENABLE_ADMIN_UI = false ADMIN_USERNAME =username ADMIN_PASSWORD =<建议用长一点的密码,最好不要带$> SESSION_SECRET =<建议用长一点的密码,最好不要带$> RETRY_SSE_TOOL_CALL = true SSE_TOOL_CALL_MAX_RETRIES = 4 SSE_TOOL_CALL_RETRY_DELAY_BASE_MS = 300 RETRY_HTTP_TOOL_CALL = true HTTP_TOOL_CALL_MAX_RETRIES = 4 HTTP_TOOL_CALL_RETRY_DELAY_BASE_MS = 500 RETRY_STDIO_TOOL_CALL = true STDIO_TOOL_CALL_MAX_RETRIES = 5 STDIO_TOOL_CALL_RETRY_DELAY_BASE_MS = 1000
创建docker-compose.yml
nano docker-compose.yml
输入以下内容:
services: mcp-proxy-server: image: ghcr.io/ptbsare/mcp-proxy-server/mcp-proxy-server:latest container_name: mcp-proxy-server restart: unless-stopped env_file:
- .env volumes:
- ./config.json:/mcp-proxy-server/config/mcp_server.json networks: cf_tunnel: ipv4_address: 192.168 .0 .3 ports:
- 127.0 .0 .1 :3001:3001 # 用于SSH隧道演示访问,用不到可删除
networks: cf_tunnel: external: true
创建config.json配置文件
nano config .json
输入以下内容:
{ "mcpServers" : { "time" : { "type" : "stdio" , "name" : "Time" , "active" : true , "command" : "uvx" , "args" : [ "mcp-server-time" , "--local-timezone=Asia/Shanghai" ] } } }
运行容器
docker compose up -d
查看运行日志,容器是否正常运行
docker logs -f mcp-proxy-server
开启SSH隧道转发
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终于有了获取当前真实世界时间的能力!
还有很多实用的MCP,我之前 发帖 推荐过,,以后有机会再多推荐点
KEY轮询
一般来说,个人用没有这么多KEY,所以一般来说是用不到,但是因为之前隔壁站流行打野,基本上人手都是几千上万的Gemini KEY,这个项目可以添加海量KEY并轮询,性能非常高,占用特别低,而且我也不喜欢New API自带的轮询(一开始还有BUG,后面慢慢完善了),所以后端我一般就用这个项目
开始部署:
创建gpt-load文件夹
mkdir gpt-load && cd gpt-load
配置环境变量
nano . env
PORT = 3000 HOST = 0.0 . 0.0
SERVER_READ_TIMEOUT = 60 SERVER_WRITE_TIMEOUT = 600 SERVER_IDLE_TIMEOUT = 120 SERVER_GRACEFUL_SHUTDOWN_TIMEOUT = 10
IS_SLAVE = false
TZ =Asia/Shanghai AUTH_KEY =sk-test
REDIS_DSN =redis://gpt-load-redis: 6379 / 0
MAX_CONCURRENT_REQUESTS = 99
ENCRYPTION_KEY =encrypt_password
#如果有需要可以自己设置代理,通过代理来访问API #HTTP_PROXY=socks5://192.168.1.1:1080 #HTTPS_PROXY=socks5://192.168.1.1:1080
创建docker-compose.yml
nano docker-compose.yml
输入以下内容:
name: gpt-load services: gpt-load: image: ghcr.io/tbphp/gpt-load:latest container_name: gpt-load restart: unless-stopped env_file:
- .env volumes:
- ./data:/app/data healthcheck: test: wget -q --spider -T 10 -O /dev/null http://localhost:${PORT:-3001}/health interval: 30s timeout: 10s retries: 3 start_period: 40s depends_on: gpt-load-redis: condition: service_healthy restart: true networks: internal: cf_tunnel: ipv4_address: 192.168 .0 .4 ports:
- 127.0 .0 .1 :3002:3000 # 我这里为了演示就不创建域名了,就用SSH隧道演示下
gpt-load-redis: image: redis:latest container_name: gpt-load-redis restart: unless-stopped healthcheck: test: [ "CMD" , "redis-cli" , "ping" ] interval: 5s timeout: 3s retries: 3 networks:
- internal
networks: internal: internal: true cf_tunnel: external: true
起飞
docker compose up -d
查看日志,观察容器是否正常运行
docker logs -f gpt- load
开启SSH隧道转发
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
测试一下渠道是否有效
OK,那么如何搭配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的模型,我们先点击清除,再点击获取
勾选渠道包含的模型,然后确定
测试一下是否有问题
OK,至此API网关+MCP网关(+轮询)就部署完毕了.但是因为这里为了方便,所以用的是SSH隧道的方式访问,下面再讲一下配合Cloudflared(Cloudflare Tunnel)容器实现公网访问.但是需要你自己有域名,并且已经托管到CF.
我们先登录到Cloudflare控制面板,找到Zero Trust
然后 网络 -> Tunnels
创建一个新隧道
类型选Cloudflared
输入你喜欢的隧道名称,然后创建
我们并不需要安装什么,我们只需要他的密钥,我们点击复制按钮复制安装命令,找个文本编辑器比如VS Code,然后把install后面开始的密钥记录下来,后面要用.
创建cloudflared文件夹
mkdir cloudflared && cd cloudflared
配置环境变量
nano . env
输入以下内容:
CLOUDFLARED_TOKEN =<你刚才复制并提取的密钥,ey开头的>
编辑docker-compose.yml
nano docker-compose.yml
输入以下内容:
services: cloudflared: image: cloudflare/cloudflared:latest container_name: cloudflared restart: unless-stopped env_file:
- .env command: tunnel --no-autoupdate run --token ${CLOUDFLARED_TOKEN} networks: cf_tunnel: ipv4_address: 192.168 .0 .1
networks: cf_tunnel: external: true
拉起容器
docker compose up -d
观察容器运行日志,判断容器是否正常运行
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.
接下来为了提升使用体验,你将会在网上搜集更多有趣,好用的MCP服务器来充实你的AI体验,比如从 这里 开始.
㊙️鸡你实在是太美
9 22 0 107 引用 回复
1 2 3 4 5 .. 14
ik4r 楼主 AI高手 元老 20h 4min ago
#135
@wiaooapo #134 https://www.deepflood.com/post-13120-1
㊙️鸡你实在是太美
0 1 0 引用 回复
zhxhwyzh14 种子 42days ago #1
教程很详细,感谢分享
0 0 0 引用 回复
nk2150 种子 42days ago #2
这不得精一个呀,太棒了
0 0 0 引用 回复
MaxChan 种子 42days ago #3
很好的帖子
0 0 0 引用 回复
cube 种子 42days ago #4
很好的帖子,使我的鼠标滚轮旋转
0 0 0 引用 回复
xe 管理 Dev 元老 42days ago #5
感谢分享,太详细了
0 0 0 引用 回复
pking 种子 42days ago #6
详细的教程,收藏一下。
0 0 0 引用 回复
SoonWill 种子 42days ago #7
好帖帮顶
0 0 0 引用 回复
ymh1147 种子 42days ago #8
教程不错,如果只是个人使用,gpt-l+CS就够了
人手一个可替换图片的图床 - 油猴脚本 - 乱搞文件床 - BigShow
0 0 0 引用 回复
ik4r 楼主 AI高手 元老 42days ago #9
@ymh1147 #8 是的,最新的Beta版本的GPT-Load也加了聚合分组功能,如果是纯纯自用,不需要看自己花了多少钱,不需要管理Key额度之类的,那就可以直接这么用.但是如果是想跟几个朋友什么的分享下,但是朋友又有可能分享给别的人之类的这种,自己希望对Key,额度,渠道有更多的控制或者想让朋友直接去自己API站注册这种情况,那文中的方式就是最适合了.
㊙️鸡你实在是太美
0 0 0 引用 回复
cy 种子 42days ago #10
好帖收藏回家在看
0 0 0 引用 回复
1 2 3 4 5 .. 14
内容 预览 对照
支持 markdown语法
鼓励友善发言,禁止人身攻击
xxxxxxxxxx
1
1
AC娘
洋葱头
小黄鸡
Fluent
App
发布评论(Ctrl+Enter)
88
等级 Lv 1 鸡腿 103 星辰 0 回复 0 我 0
主题帖 0 评论数 0 粉丝 0 收藏 2 私信 0 发帖
快捷功能区 推荐阅读 管理记录 幸运抽奖 邀请好友 合作商家 友站链接
📈用户数目📈
目前论坛共有7960位用户
🎉欢迎新用户🎉
gblaowang
xteyou6
melon930826
clb2ue
artoria
qy2569
o0onoob
njskks
站内导航 关于本站 隐私协议 sitemap
商业推广 合作商家展示
其他平台 电报频道 电报群组
联系我们
Copyright © 2025 - now, All rights Reserved