Claude 不能本地跑?用 Docker 搭好 WebUI 和 API 代理全流程教程
Claude Docker部署教程|附完整命令
Claude 是 Anthropic 推出的强大 AI 大模型,擅长长文本理解、代码生成、文档分析、知识问答和复杂推理。很多开发者在使用 Claude 时,希望能够通过 Docker 的方式快速部署一个本地 Web 服务或 API 代理,从而在浏览器、内网环境或团队协作场景中更方便地调用 Claude。
需要先说明一点:Claude 模型本身并不能像一些开源大模型那样直接下载到本地运行。Claude 是 Anthropic 提供的云端闭源模型,通常需要通过官方 API 调用。因此,所谓“Docker 部署 Claude”,更准确地说,是指:
- 使用 Docker 部署一个 Web UI;
- 使用 Docker 部署一个 API 网关或代理服务;
- 在容器中配置 Anthropic API Key;
- 通过浏览器或接口调用 Claude 模型。
本文将以实用为主,介绍如何使用 Docker 部署 Claude 调用环境,并附上完整命令。适合个人开发者、服务器运维人员以及希望在团队内部统一使用 Claude 的用户。
一、部署前准备
在开始之前,你需要准备以下内容:
1. 一台服务器或本地电脑
可以是:
- Linux 服务器,例如 Ubuntu、Debian、CentOS;
- macOS;
- Windows + WSL2;
- 本地开发机。
推荐使用 Linux 服务器,尤其是 Ubuntu 22.04 或 Ubuntu 24.04。
2. 已安装 Docker
如果你还没有安装 Docker,可以参考下面的命令进行安装。
以 Ubuntu 为例:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
添加 Docker 官方 GPG Key:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
添加 Docker 软件源:
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
查看 Docker 是否安装成功:
docker version
查看 Docker Compose 是否安装成功:
docker compose version
如果你希望当前用户可以直接运行 Docker,而不是每次都加 sudo,可以执行:
sudo usermod -aG docker $USER
然后重新登录服务器,或者执行:
newgrp docker
测试 Docker:
docker run hello-world
如果能看到 Hello from Docker 相关提示,说明 Docker 已经可以正常使用。
二、申请 Anthropic API Key
由于 Claude 是通过 Anthropic API 调用的,所以你需要先获取 API Key。
操作步骤如下:
- 访问 Anthropic 官方控制台;
- 注册或登录账号;
- 创建 API Key;
- 复制并妥善保存 API Key。
API Key 通常形如:
sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxx
注意:
API Key 非常敏感,不要上传到 GitHub,也不要公开写在博客、截图或日志中。
三、方案选择说明
本文介绍两种常见部署方式:
| 方案 | 适用场景 | 特点 |
|---|---|---|
| Open WebUI + Claude API | 想要浏览器聊天界面 | 使用简单,界面友好 |
| LiteLLM Proxy + Claude API | 想要统一 API 代理 | 适合开发和团队集成 |
如果你只是想在浏览器中像 ChatGPT 一样使用 Claude,推荐使用 Open WebUI。
如果你想让程序通过统一接口调用 Claude,或者希望将 Claude、OpenAI、Gemini 等模型统一管理,推荐使用 LiteLLM Proxy。
方案一:使用 Docker 部署 Open WebUI 调用 Claude
Open WebUI 是一个流行的开源 Web 聊天界面,支持通过 OpenAI 兼容接口连接不同模型。由于 Anthropic Claude 原生 API 并不完全等同于 OpenAI API,所以通常需要搭配一个代理层,例如 LiteLLM,将 Claude 转换成 OpenAI 兼容接口。
因此比较推荐的架构是:
浏览器
↓
Open WebUI
↓
LiteLLM Proxy
↓
Anthropic Claude API
下面我们使用 Docker Compose 一次性部署 Open WebUI 和 LiteLLM。
四、创建部署目录
先创建一个目录用于存放配置文件:
mkdir -p ~/claude-docker
cd ~/claude-docker
五、创建 LiteLLM 配置文件
创建配置目录:
mkdir -p litellm
创建 LiteLLM 配置文件:
nano litellm/config.yaml
写入以下内容:
model_list:
- model_name: claude-3-5-sonnet
litellm_params:
model: anthropic/claude-3-5-sonnet-20240620
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-3-haiku
litellm_params:
model: anthropic/claude-3-haiku-20240307
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-3-opus
litellm_params:
model: anthropic/claude-3-opus-20240229
api_key: os.environ/ANTHROPIC_API_KEY
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
保存并退出。
如果你使用的是 nano 编辑器:
- 按
Ctrl + O保存; - 按
Enter确认; - 按
Ctrl + X退出。
这里定义了三个模型名称:
claude-3-5-sonnet
claude-3-haiku
claude-3-opus
其中 claude-3-5-sonnet 通常适合大多数场景,速度、能力和成本比较平衡。
六、创建 docker-compose.yml
在 ~/claude-docker 目录下创建 Docker Compose 文件:
nano docker-compose.yml
写入以下内容:
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: claude-litellm
restart: unless-stopped
ports:
- "4000:4000"
environment:
ANTHROPIC_API_KEY: "替换为你的Anthropic_API_Key"
LITELLM_MASTER_KEY: "sk-local-master-key"
volumes:
- ./litellm/config.yaml:/app/config.yaml
command:
- "--config=/app/config.yaml"
- "--port=4000"
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: claude-open-webui
restart: unless-stopped
ports:
- "3000:8080"
environment:
OPENAI_API_BASE_URL: "http://litellm:4000/v1"
OPENAI_API_KEY: "sk-local-master-key"
volumes:
- open-webui:/app/backend/data
depends_on:
- litellm
volumes:
open-webui:
请把下面这一行:
ANTHROPIC_API_KEY: "替换为你的Anthropic_API_Key"
替换成你自己的 Anthropic API Key,例如:
ANTHROPIC_API_KEY: "sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxx"
为了安全,生产环境中更推荐使用 .env 文件,不建议直接把密钥写进 docker-compose.yml。后面会介绍更安全的写法。
七、启动服务
在当前目录执行:
docker compose up -d
查看容器状态:
docker compose ps
如果一切正常,你应该能看到类似结果:
NAME IMAGE STATUS
claude-litellm ghcr.io/berriai/litellm:main-latest Up
claude-open-webui ghcr.io/open-webui/open-webui:main Up
查看日志:
docker compose logs -f
如果只想查看 LiteLLM 日志:
docker logs -f claude-litellm
如果只想查看 Open WebUI 日志:
docker logs -f claude-open-webui
八、访问 Open WebUI
打开浏览器访问:
http://服务器IP:3000
如果你是在本地电脑部署,可以访问:
http://localhost:3000
首次访问时,Open WebUI 通常会要求创建管理员账号。按照页面提示注册即可。
进入界面后,你应该可以选择或使用 LiteLLM 中配置的 Claude 模型,例如:
claude-3-5-sonnet
claude-3-haiku
claude-3-opus
如果模型没有显示,可以在 Open WebUI 的设置中检查 OpenAI API 配置是否正确:
API Base URL: http://litellm:4000/v1
API Key: sk-local-master-key
需要注意的是,在容器内部,Open WebUI 访问 LiteLLM 要使用服务名:
http://litellm:4000/v1
而不是:
http://localhost:4000/v1
因为 localhost 在容器内部指的是当前容器自身,而不是宿主机或其他容器。
方案二:只部署 LiteLLM Proxy 调用 Claude
如果你不需要 Web 聊天界面,只希望提供一个 OpenAI 兼容 API,用于程序调用,那么可以只部署 LiteLLM。
九、创建单独的 LiteLLM 部署目录
mkdir -p ~/claude-litellm
cd ~/claude-litellm
mkdir -p litellm
创建配置文件:
nano litellm/config.yaml
写入:
model_list:
- model_name: claude-sonnet
litellm_params:
model: anthropic/claude-3-5-sonnet-20240620
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-haiku
litellm_params:
model: anthropic/claude-3-haiku-20240307
api_key: os.environ/ANTHROPIC_API_KEY
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
创建 .env 文件:
nano .env
写入:
ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxx
LITELLM_MASTER_KEY=sk-local-master-key
这里的 ANTHROPIC_API_KEY 替换成你的真实 Anthropic API Key。
创建 docker-compose.yml:
nano docker-compose.yml
写入:
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: claude-litellm
restart: unless-stopped
ports:
- "4000:4000"
env_file:
- .env
volumes:
- ./litellm/config.yaml:/app/config.yaml
command:
- "--config=/app/config.yaml"
- "--port=4000"
启动:
docker compose up -d
查看状态:
docker compose ps
查看日志:
docker logs -f claude-litellm
十、测试 Claude API 是否可用
LiteLLM 启动后,你可以使用 OpenAI 兼容接口进行测试。
1. 查看模型列表
curl http://localhost:4000/v1/models \
-H "Authorization: Bearer sk-local-master-key"
如果部署在远程服务器上,把 localhost 替换成服务器 IP:
curl http://服务器IP:4000/v1/models \
-H "Authorization: Bearer sk-local-master-key"
正常情况下会返回模型列表,其中包含:
claude-sonnet
claude-haiku
2. 发送聊天请求
curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer sk-local-master-key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet",
"messages": [
{
"role": "user",
"content": "请用中文介绍一下 Docker 的核心概念"
}
]
}'
如果返回了 Claude 的回答,说明部署成功。
十一、使用 Python 调用 Claude
由于 LiteLLM 提供的是 OpenAI 兼容接口,所以可以直接使用 OpenAI SDK。
安装依赖:
pip install openai
创建测试文件:
nano test_claude.py
写入:
from openai import OpenAI
client = OpenAI(
api_key="sk-local-master-key",
base_url="http://localhost:4000/v1"
)
response = client.chat.completions.create(
model="claude-sonnet",
messages=[
{
"role": "user",
"content": "请用中文写一段关于人工智能发展的简短介绍"
}
]
)
print(response.choices[0].message.content)
运行:
python test_claude.py
如果你的 LiteLLM 部署在远程服务器上,需要将:
base_url="http://localhost:4000/v1"
改成:
base_url="http://服务器IP:4000/v1"
十二、使用 Node.js 调用 Claude
安装依赖:
npm install openai
创建测试文件:
nano test-claude.js
写入:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-local-master-key",
baseURL: "http://localhost:4000/v1",
});
const completion = await client.chat.completions.create({
model: "claude-sonnet",
messages: [
{
role: "user",
content: "请用中文解释一下什么是 API 网关",
},
],
});
console.log(completion.choices[0].message.content);
如果你的项目不是 ES Module,可以在 package.json 中添加:
{
"type": "module"
}
运行:
node test-claude.js
十三、使用环境变量增强安全性
前面为了演示方便,在部分配置中直接写了 API Key。实际部署时,更推荐使用 .env 文件。
推荐目录结构如下:
claude-docker/
├── docker-compose.yml
├── .env
└── litellm/
└── config.yaml
.env 文件:
ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxx
LITELLM_MASTER_KEY=sk-local-master-key
docker-compose.yml 文件:
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: claude-litellm
restart: unless-stopped
ports:
- "4000:4000"
env_file:
- .env
volumes:
- ./litellm/config.yaml:/app/config.yaml
command:
- "--config=/app/config.yaml"
- "--port=4000"
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: claude-open-webui
restart: unless-stopped
ports:
- "3000:8080"
environment:
OPENAI_API_BASE_URL: "http://litellm:4000/v1"
OPENAI_API_KEY: "${LITELLM_MASTER_KEY}"
volumes:
- open-webui:/app/backend/data
depends_on:
- litellm
volumes:
open-webui:
这样可以避免把密钥直接写在 Compose 文件里,也方便后续维护。
十四、配置防火墙
如果你在云服务器上部署,需要开放对应端口。
Open WebUI 默认映射端口:
3000
LiteLLM 默认映射端口:
4000
如果使用 Ubuntu 的 UFW,可以执行:
sudo ufw allow 3000/tcp
sudo ufw allow 4000/tcp
sudo ufw reload
sudo ufw status
不过更推荐的做法是:
- Open WebUI 可以开放给特定用户访问;
- LiteLLM API 不建议直接暴露到公网;
- 如果必须公网访问,请配置强密码、访问控制、HTTPS 和反向代理。
十五、使用 Nginx 反向代理
如果你希望通过域名访问,例如:
https://claude.example.com
可以使用 Nginx 做反向代理。
安装 Nginx:
sudo apt update
sudo apt install -y nginx
创建站点配置:
sudo nano /etc/nginx/sites-available/claude-webui
写入:
server {
listen 80;
server_name claude.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/claude-webui /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
然后就可以访问:
http://claude.example.com
十六、配置 HTTPS 证书
推荐使用 Certbot 免费申请 Let’s Encrypt 证书。
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d claude.example.com
按照提示输入邮箱并确认即可。
证书申请完成后,Certbot 会自动修改 Nginx 配置并启用 HTTPS。
测试自动续期:
sudo certbot renew --dry-run
十七、常用维护命令
进入部署目录:
cd ~/claude-docker
启动服务:
docker compose up -d
停止服务:
docker compose down
重启服务:
docker compose restart
查看容器状态:
docker compose ps
查看日志:
docker compose logs -f
更新镜像:
docker compose pull
docker compose up -d
删除停止的容器:
docker container prune
删除未使用镜像:
docker image prune
查看 Docker 占用空间:
docker system df
十八、常见问题排查
1. Open WebUI 无法连接 Claude
首先检查 LiteLLM 是否正常运行:
docker ps
docker logs -f claude-litellm
然后测试 LiteLLM 接口:
curl http://localhost:4000/v1/models \
-H "Authorization: Bearer sk-local-master-key"
如果模型列表无法返回,说明问题在 LiteLLM 或 API Key 配置上。
2. 提示 API Key 无效
检查 .env 文件中的 Anthropic API Key 是否正确:
cat .env
确认没有多余空格、换行错误或复制遗漏。
修改 .env 后,需要重启容器:
docker compose down
docker compose up -d
3. 容器启动后马上退出
查看日志:
docker logs claude-litellm
常见原因包括:
config.yaml格式错误;- YAML 缩进错误;
- API Key 没有正确传入;
- 端口被占用;
- Docker 镜像拉取不完整。
检查端口占用:
sudo lsof -i:4000
sudo lsof -i:3000
如果端口被占用,可以修改 docker-compose.yml 中的端口映射。
例如把 Open WebUI 改成宿主机 8080 端口:
ports:
- "8080:8080"
访问时改为:
http://服务器IP:8080
4. 远程访问失败
检查云服务器安全组、防火墙和端口开放情况。
UFW 检查:
sudo ufw status
Docker 容器检查:
docker compose ps
端口监听检查:
sudo ss -tulnp | grep -E "3000|4000"
如果云服务器有安全组,还需要在云厂商控制台开放端口。
十九、推荐的生产环境安全配置
如果是团队或生产环境使用,建议至少做以下安全加固:
-
不要直接暴露 LiteLLM 4000 端口到公网
可以只让 Open WebUI 在 Docker 内部访问 LiteLLM。 -
使用强 Master Key
不要使用示例中的:sk-local-master-key可以生成一个随机字符串:
openssl rand -hex 32 -
启用 HTTPS
使用 Nginx + Certbot 配置 TLS 证书。 -
限制访问来源
可以通过 Nginx、云安全组或 VPN 限制访问 IP。 -
定期更新镜像
docker compose pull docker compose up -d -
妥善保存 API Key
不要把.env文件提交到 Git 仓库。
可以创建 .gitignore:
nano .gitignore
写入:
.env
二十、完整一键部署示例
如果你想快速部署 Open WebUI + LiteLLM,可以参考下面的完整命令。
mkdir -p ~/claude-docker/litellm
cd ~/claude-docker
cat > .env << 'EOF'
ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxx
LITELLM_MASTER_KEY=sk-local-master-key
EOF
cat > litellm/config.yaml << 'EOF'
model_list:
- model_name: claude-sonnet
litellm_params:
model: anthropic/claude-3-5-sonnet-20240620
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-haiku
litellm_params:
model: anthropic/claude-3-haiku-20240307
api_key: os.environ/ANTHROPIC_API_KEY
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
EOF
cat > docker-compose.yml << 'EOF'
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: claude-litellm
restart: unless-stopped
ports:
- "4000:4000"
env_file:
- .env
volumes:
- ./litellm/config.yaml:/app/config.yaml
command:
- "--config=/app/config.yaml"
- "--port=4000"
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: claude-open-webui
restart: unless-stopped
ports:
- "3000:8080"
environment:
OPENAI_API_BASE_URL: "http://litellm:4000/v1"
OPENAI_API_KEY: "sk-local-master-key"
volumes:
- open-webui:/app/backend/data
depends_on:
- litellm
volumes:
open-webui:
EOF
docker compose up -d
docker compose ps
执行前请务必把:
ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxx
替换为你的真实 API Key。
部署完成后访问:
http://服务器IP:3000
总结
通过 Docker 部署 Claude,本质上是部署一个可以调用 Anthropic Claude API 的服务环境。对于普通用户来说,推荐使用 Open WebUI + LiteLLM,这样既有友好的浏览器聊天界面,又能通过 LiteLLM 将 Claude 转换成 OpenAI 兼容接口,方便后续集成。
如果你是开发者,只需要 API 服务,那么单独部署 LiteLLM Proxy 就足够了。它可以让你用 OpenAI SDK 的方式调用 Claude,大大降低多模型接入成本。
最终推荐架构如下:
用户浏览器 / 应用程序
↓
Open WebUI / OpenAI SDK
↓
LiteLLM Proxy
↓
Anthropic Claude API
常用访问地址如下:
Open WebUI: http://服务器IP:3000
LiteLLM API: http://服务器IP:4000/v1
只要正确配置 Anthropic API Key、LiteLLM Master Key 和 Docker Compose 文件,就可以快速完成 Claude 的 Docker 化部署。