适用环境:Debian GNU/Linux 12 (bookworm)、x86_64 VPS
架构:客户端 → Cloudflare DNS(可选代理)→ Caddy → LiteLLM → Groq API
LiteLLM 负责统一 OpenAI 兼容 API,并为后续增加 OpenAI、Anthropic、Gemini 等上游 API 预留统一入口。
1. 最终架构
Client
│
│ https://llm.example.com/v1/...
▼
Cloudflare DNS / Proxy(可选)
│
▼
Caddy :443
│
▼
LiteLLM :4000
│
▼
Groq API
https://api.groq.com/openai/v1
建议:
- LiteLLM 只负责 API 网关、模型映射和统一 OpenAI 兼容接口。
- Caddy 负责 HTTPS/TLS、域名入口和反向代理。
- Groq API Key 只保存在 VPS。
- 客户端只使用 LiteLLM Master Key。
- 后续增加其他 AI 平台时,只需增加 LiteLLM 的模型配置。
2. 确认系统
cat /etc/os-release
预期:
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
确认架构:
uname -m
x86 VPS 通常显示:
x86_64
3. 更新系统并安装基础工具
apt update && apt upgrade -y
安装常用工具:
apt install -y \
curl \
wget \
ca-certificates \
gnupg \
lsb-release \
nano \
ufw
4. 安装 Docker
添加 Docker 官方仓库:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
添加仓库:
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null
更新:
apt update
安装 Docker:
apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
验证:
docker --version
docker compose version
启动:
systemctl enable --now docker
5. 为什么使用 Docker 部署 LiteLLM
Docker 的主要优势:
环境隔离
LiteLLM 运行所需的 Python、依赖库和版本全部封装在容器内。
不会污染 Debian 系统 Python 环境。
升级方便
更新镜像:
docker compose pull
docker compose up -d
重建方便
配置出问题时:
docker compose down
docker compose up -d
环境变量管理方便
API Key 可以放在 .env:
GROQ_API_KEY=...
不需要写入配置文件。
需要注意的影响
Docker 会增加少量:
- 内存占用
- 磁盘镜像占用
- 网络层复杂度
对于 API 反代场景,这些开销通常非常小。
6. 创建 LiteLLM 目录
mkdir -p /opt/litellm
cd /opt/litellm
7. 创建 .env
创建:
nano /opt/litellm/.env
填写:
GROQ_API_KEY=gsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LITELLM_MASTER_KEY=sk-your-random-master-key
生成一个随机 Master Key:
openssl rand -hex 32
然后保存。
限制权限:
chmod 600 /opt/litellm/.env
8. 创建 LiteLLM 配置
创建:
nano /opt/litellm/config.yaml
配置 Groq 模型:
model_list:
# OpenAI GPT OSS 120B
- model_name: groq-gpt-oss-120b
litellm_params:
model: groq/openai/gpt-oss-120b
api_key: os.environ/GROQ_API_KEY
# OpenAI GPT OSS 20B
- model_name: groq-gpt-oss-20b
litellm_params:
model: groq/openai/gpt-oss-20b
api_key: os.environ/GROQ_API_KEY
# Qwen 3.8 27B
- model_name: groq-qwen3.8-27b
litellm_params:
model: groq/qwen/qwen3.8-27b
api_key: os.environ/GROQ_API_KEY
# Qwen 3.6 27B
- model_name: groq-qwen3.6-27b
litellm_params:
model: groq/qwen/qwen3.6-27b
api_key: os.environ/GROQ_API_KEY
# Groq Compound
- model_name: groq-compound
litellm_params:
model: groq/groq/compound
api_key: os.environ/GROQ_API_KEY
# Groq Compound Mini
- model_name: groq-compound-mini
litellm_params:
model: groq/groq/compound-mini
api_key: os.environ/GROQ_API_KEY
说明:
左侧:
groq-gpt-oss-20b
是客户端看到的统一模型名称。
右侧:
groq/openai/gpt-oss-20b
是 LiteLLM 调用 Groq 时使用的 provider/model 标识。
9. 创建 Docker Compose
创建:
nano /opt/litellm/docker-compose.yml
内容:
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: litellm
restart: unless-stopped
env_file:
- .env
volumes:
- ./config.yaml:/app/config.yaml:ro
# 使用 VPS 宿主机网络
network_mode: host
command:
- "--config"
- "/app/config.yaml"
启动:
cd /opt/litellm
docker compose up -d
查看:
docker compose ps
日志:
docker logs -f litellm
正常情况下会看到:
Uvicorn running on http://0.0.0.0:4000
10. 验证 LiteLLM 本地服务
确认端口:
ss -ltnp | grep ':4000'
访问首页:
curl -I http://127.0.0.1:4000/
获取模型:
set -a
source /opt/litellm/.env
set +a
curl http://127.0.0.1:4000/v1/models \
-H "Authorization: Bearer $LITELLM_MASTER_KEY"
测试 Chat Completions:
curl http://127.0.0.1:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
-d '{
"model": "groq-gpt-oss-20b",
"messages": [
{
"role": "user",
"content": "Reply with OK"
}
],
"max_tokens": 100
}'
预期:
{
"choices": [
{
"message": {
"content": "OK"
}
}
]
}
11. Groq API Key 故障排查
如果 LiteLLM 返回:
Invalid API Key
首先确认 VPS 当前环境变量:
printf '%s' "$GROQ_API_KEY" | sha256sum
检查 .env:
grep '^GROQ_API_KEY=' /opt/litellm/.env \
| cut -d= -f2- \
| tr -d '\r\n' \
| sha256sum
检查容器:
docker exec litellm sh -c 'printf "%s" "$GROQ_API_KEY"' \
| sha256sum
如果 .env 和容器一致,但宿主机不同,通常说明当前 Shell 中使用的是旧环境变量。
重新加载:
cd /opt/litellm
set -a
source .env
set +a
直接测试 Groq:
curl -i https://api.groq.com/openai/v1/models \
-H "Authorization: Bearer $GROQ_API_KEY"
如果返回:
HTTP/2 200
说明 Key 本身有效。
如果容器需要验证:
docker exec litellm python -c '
import os
import httpx
r = httpx.get(
"https://api.groq.com/openai/v1/models",
headers={
"Authorization": "Bearer " + os.environ["GROQ_API_KEY"]
},
timeout=30
)
print("STATUS:", r.status_code)
print("BODY:", r.text[:500])
'
12. 安装 Caddy
安装:
apt install -y caddy
启动:
systemctl enable --now caddy
查看:
systemctl status caddy --no-pager
13. 配置 Caddy 反向代理
编辑:
nano /etc/caddy/Caddyfile
建议最终配置类似:
llm.example.com {
reverse_proxy 127.0.0.1:4000
}
将:
llm.example.com
替换成实际域名,例如:
llm.1463298.xyz
完整示例:
llm.1463298.xyz {
reverse_proxy 127.0.0.1:4000
}
Caddy 会自动:
- 监听 HTTPS
- 申请证书
- 自动续期
- HTTP 自动跳转 HTTPS
格式化:
caddy fmt --overwrite /etc/caddy/Caddyfile
验证:
caddy validate --config /etc/caddy/Caddyfile
重载:
systemctl reload caddy
14. 如果 Caddy 报 443 被占用
检查:
ss -ltnp | grep -E ':80|:443'
如果看到其他程序占用:
*:443
Caddy 无法监听 HTTPS。
例如:
xray
nginx
apache2
都可能占用 443。
需要修改对应服务端口,或者停止对应服务。
再次检查:
ss -ltnp | grep -E ':80|:443'
理想状态:
*:80 caddy
*:443 caddy
然后:
systemctl reload caddy
15. Cloudflare DNS 配置
在 Cloudflare 创建:
Type: A
Name: llm
Content: VPS IPv4
例如:
llm.1463298.xyz
是否开启橙云?
灰云
DNS only
客户端直接访问 VPS。
优点:
- 链路简单
- 适合 API
- 没有 Cloudflare Proxy 的请求限制影响
橙云
Proxied
客户端 → Cloudflare → VPS。
优点:
- 隐藏 VPS IP
- 获得 Cloudflare 网络保护
- 可使用部分 Cloudflare 安全能力
对于普通 API 反代,两种都可以。
如果使用橙云,需要确认你的 API 流量符合 Cloudflare 当前计划和代理规则。
16. Cloudflare SSL/TLS
建议:
SSL/TLS encryption mode:
Full (strict)
Full (strict) 的含义:
Cloudflare → VPS 之间也必须使用有效 TLS。
这里的 TLS 设置通常是域名/Zone 级别配置,不只是顶级域名。
Caddy 自动申请的公开证书可以满足严格模式。
不要使用:
Flexible
因为 Flexible 会导致 Cloudflare 到源站可能使用 HTTP,并容易造成重定向或安全问题。
17. UFW 防火墙
先查看:
ufw status
如果启用 UFW,放行 SSH:
ufw allow 22/tcp
放行 HTTP:
ufw allow 80/tcp
放行 HTTPS:
ufw allow 443/tcp
如果你的其他服务需要端口,例如:
ufw allow 30635/tcp
ufw allow 23116/tcp
启用:
ufw enable
查看:
ufw status numbered
注意:
LiteLLM 使用了:
4000
如果 Caddy 和 LiteLLM 在同一 VPS,并且 LiteLLM 只作为 Caddy 后端,通常不建议对公网开放 4000。
18. 验证 HTTPS
curl -I https://llm.example.com
正常可能看到:
HTTP/2 200
server: uvicorn
via: 1.1 Caddy
获取模型:
curl https://llm.example.com/v1/models \
-H "Authorization: Bearer $LITELLM_MASTER_KEY"
测试模型:
curl https://llm.example.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
-d '{
"model": "groq-gpt-oss-20b",
"messages": [
{
"role": "user",
"content": "Reply with OK"
}
]
}'
如果返回:
{
"choices": [
{
"message": {
"content": "OK"
}
}
]
}
说明完整链路已经成功:
Client
↓
HTTPS Domain
↓
Caddy
↓
LiteLLM
↓
Groq
19. 常用运维命令
进入目录:
cd /opt/litellm
查看状态:
docker compose ps
查看日志:
docker logs -f litellm
重启:
docker compose restart
配置修改后重建:
docker compose up -d --force-recreate
停止:
docker compose down
更新 LiteLLM:
docker compose pull
docker compose up -d
查看 Caddy:
systemctl status caddy --no-pager
重载 Caddy:
systemctl reload caddy
查看 Caddy 日志:
journalctl -u caddy -f
20. 后续增加其他 AI 平台
LiteLLM 的优势是后续可以继续增加:
- OpenAI
- Anthropic
- Google Gemini
- DeepSeek
- OpenRouter
- Azure OpenAI
- 其他 OpenAI Compatible API
最终客户端保持统一:
https://llm.example.com/v1
只需要在 LiteLLM 中增加新的:
model_name
和对应 provider 配置即可。
例如客户端始终调用:
/v1/chat/completions
切换模型:
{
"model": "your-model-name"
}
不需要让客户端分别处理每个平台的 API 地址和认证方式。
21. 最终检查清单
LiteLLM
docker compose ps
应为:
Up
4000 端口
ss -ltnp | grep ':4000'
Caddy
systemctl status caddy --no-pager
应为:
active (running)
80 / 443
ss -ltnp | grep -E ':80|:443'
通常应由 Caddy 监听。
本地 API
curl http://127.0.0.1:4000/v1/models \
-H "Authorization: Bearer $LITELLM_MASTER_KEY"
公网 API
curl https://llm.example.com/v1/models \
-H "Authorization: Bearer $LITELLM_MASTER_KEY"
模型调用
curl https://llm.example.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
-d '{
"model": "groq-gpt-oss-20b",
"messages": [
{
"role": "user",
"content": "Reply with OK"
}
]
}'
22. 当前推荐架构总结
Internet
│
▼
Cloudflare
│
▼
Caddy :443
│
▼
LiteLLM :4000
│
├── Groq
├── OpenAI(未来)
├── Gemini(未来)
├── Anthropic(未来)
└── 其他 API(未来)
这是一个适合低负载、多 AI Provider、统一 OpenAI 兼容 API 的部署方案。
建议后续进一步完善:
- LiteLLM 不直接暴露公网 4000。
- 为不同客户端创建独立 API Key。
- 增加速率限制。
- 定期更新 Docker 镜像。
- 备份
/opt/litellm/config.yaml。 - 不要把
.env上传到 GitHub。 - Cloudflare 使用 Full (strict)。