上一篇 下一篇 分享链接 返回 返回顶部

Claude 不能本地跑?用 Docker 搭好 WebUI 和 API 代理全流程教程

发布人:慈云数据-客服中心 发布时间:13小时前 阅读量:6

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。

操作步骤如下:

  1. 访问 Anthropic 官方控制台;
  2. 注册或登录账号;
  3. 创建 API Key;
  4. 复制并妥善保存 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"

如果云服务器有安全组,还需要在云厂商控制台开放端口。


十九、推荐的生产环境安全配置

如果是团队或生产环境使用,建议至少做以下安全加固:

  1. 不要直接暴露 LiteLLM 4000 端口到公网
    可以只让 Open WebUI 在 Docker 内部访问 LiteLLM。

  2. 使用强 Master Key
    不要使用示例中的:

    sk-local-master-key

    可以生成一个随机字符串:

    openssl rand -hex 32
  3. 启用 HTTPS
    使用 Nginx + Certbot 配置 TLS 证书。

  4. 限制访问来源
    可以通过 Nginx、云安全组或 VPN 限制访问 IP。

  5. 定期更新镜像

    docker compose pull
    docker compose up -d
  6. 妥善保存 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 化部署。

目录结构
全文