好文章
1. 一般我们使用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的后端很不错.
简单介绍完,那么就开始搭建步骤
mkdir new-api && cd new-api
nano .env
REDIS_CONN_STRING=redis://new-api-redis
MEMORY_CACHE_ENABLED=true
TZ=Asia/Shanghai
ERROR_LOG_ENABLED=true
nano docker-compose.yml
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
expose:
- 3000
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
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 -N -L 127.0.0.1:3000:127.0.0.1:3000 -p <port_number> <user>@<your_vps_ip>






















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
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
expose:
- 3001
ports:
- 127.0.0.1:3001:3001 # 用于SSH隧道演示访问,用不到可删除
networks:
cf_tunnel:
external: true
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 -N -L 127.0.0.1:3001:127.0.0.1:3001 -p <port_number> <user>@<your_vps_ip>





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
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
expose:
- 3000
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 -N -L 127.0.0.1:3002:127.0.0.1:3002 -p <port_number> <user>@<your_vps_ip>
















mkdir cloudflared && cd cloudflared
nano .env
CLOUDFLARED_TOKEN=<你刚才复制并提取的密钥,ey开头的>
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






好文章