部署前的环境检查
- 1 台 Linux 服务器(Ubuntu 22.04+,2 vCPU + 4GB RAM 推荐)
- 一个域名(如
llm.yourdomain.com,A 记录指向服务器) - 至少 1 个 LLM provider 的 key(Anthropic / OpenAI / 中转任选)
- Docker + Docker Compose 已装好
部署步骤
Step 1:项目结构
~/litellm/
├── docker-compose.yml
├── config.yaml
├── .env
└── Caddyfile
Step 2:docker-compose.yml
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
restart: unless-stopped
ports:
- "127.0.0.1:4000:4000"
env_file:
- .env
volumes:
- ./config.yaml:/app/config.yaml
command: ["--config", "/app/config.yaml", "--port", "4000"]
depends_on:
- postgres
postgres:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: litellm
POSTGRES_USER: litellm
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./pgdata:/var/lib/postgresql/data
caddy:
image: caddy:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
Step 3:.env
LITELLM_MASTER_KEY=sk-master-xxx-rotate-monthly
LITELLM_SALT_KEY=随机 32 字节字符串
UI_USERNAME=admin
UI_PASSWORD=换成强密码
DATABASE_URL=postgresql://litellm:你的密码@postgres:5432/litellm
POSTGRES_PASSWORD=你的密码
ANTHROPIC_API_KEY=sk-ant-xxx
OPENAI_API_KEY=sk-xxx
Step 4:config.yaml
model_list:
- model_name: chat-main
litellm_params:
model: anthropic/claude-3-5-sonnet-20241022
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: chat-main
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
- model_name: chat-fast
litellm_params:
model: anthropic/claude-3-5-haiku-20241022
api_key: os.environ/ANTHROPIC_API_KEY
router_settings:
routing_strategy: simple-shuffle
num_retries: 2
fallbacks:
- chat-main: ["chat-fast"]
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
database_url: os.environ/DATABASE_URL
Step 5:Caddyfile
llm.yourdomain.com {
reverse_proxy 127.0.0.1:4000
encode gzip
}
Step 6:启动
cd ~/litellm
docker compose up -d
docker compose logs -f litellm
5-10 秒后访问 https://llm.yourdomain.com/ui 看到登录页即成功。
安全加固
1. UI 启用 SSO(可选)
config.yaml 加:
general_settings:
ui_access_mode: admin_only
microsoft_client_id: ... # 如果用 Azure AD SSO
2. 速率限制
Caddyfile 加:
llm.yourdomain.com {
rate_limit {
zone llm {
key {remote_host}
events 100
window 1m
}
}
reverse_proxy 127.0.0.1:4000
}
3. 备份脚本
backup.sh,每日 cron:
#!/bin/bash
docker compose exec -T postgres pg_dump -U litellm litellm | gzip > /backups/litellm-$(date +%F).sql.gz
# 保留最近 30 天
find /backups -name 'litellm-*.sql.gz' -mtime +30 -delete
4. 监控
config.yaml 加:
litellm_settings:
success_callback: ["langfuse"]
failure_callback: ["langfuse"]
设置 LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY 环境变量。
或直接用内置 Prometheus:
litellm_settings:
callbacks: ["prometheus"]
访问 https://llm.yourdomain.com/metrics 抓 Prometheus metrics。
常见失败原因
- 启动报「Database connection failed」:检查 DATABASE_URL 用户密码
- UI 进不去:检查 UI_USERNAME / UI_PASSWORD 是否在 .env
- 调用报 401:用的不是 master key 或者子 key 过期
- /metrics 404:忘了配 callbacks [“prometheus”]
跨地区访问
LiteLLM Proxy 部署在境外服务器(Hetzner / DigitalOcean)的话,从国内调用域名需要稳定网络。可以把 LiteLLM Proxy 本身作为一个 channel 套进中转方,国内用户走中转转发到你的 LiteLLM 实例,既保留子 key 管理能力又解决国内访问问题。
运维备忘
一个人管 LiteLLM 实例建议建一张简单的运维记录表:负责人是谁、后台入口在哪里、证书什么时候过期、谁在付服务器费用、出问题时回滚到哪个版本。换服务器或迁数据库的时候,没有这张表很容易漏掉关键资料。
LiteLLM Proxy 自托管的准备材料
一个人运营时可以用表格压住复杂度:负责人、后台入口、到期日、费用来源和回滚动作各占一列,避免换服务商时才发现资料缺口。
涉及 Stripe、公司注册、税表或签证的内容,只能作为操作参考。当前页面没有覆盖你所在司法辖区的特殊规定时,不应把它当成法律或税务意见。
LiteLLM Proxy 自托管最怕把法律主体、收款工具和产品代码混成一个问题。动手前看清失败提示、回滚动作和费用影响,金额较大或涉及税务时应交给专业顾问处理。
| 项目 | 看什么 | 不宜继续的信号 |
|---|---|---|
| 失败提示 | 当前后台、日志或设置页里能直接看到的字段 | 页面提示和手头资料对不上 |
| 回滚动作 | 费用、权限、地区或设备造成的实际影响 | 已经影响付款、审核、生产环境或家庭使用 |
| 费用影响 | 回退入口、旧配置、官方支持材料 | 找不到回滚方式,或责任人无法确认 |