使用 Docker 部署 ClaudeCodeUI+Claude-Code-Router 中文教程
使用 Docker 部署 ClaudeCodeUI+Claude-Code-Router 中文教程
惊呼这才是生产力工具!国内也能用的 AI 编程神器!
项目介绍
ClaudeCodeUI + Claude-Code-Router 是一套强大的 AI
编程助手解决方案。由于国内无法直接访问 Claude,本方案使用了七牛云 AI
推理、蓝耘科技、智谱 AI、魔塔社区、硅基流动等国内可用的 API
提供商,实现真正可用的 AI 编程!
架构说明
- Claude-Code-Router: 路由服务,将请求转发到国内 AI 提供商
- ClaudeCodeUI: 现代化的 Web 界面,支持桌面和移动设备
- 多种 AI 提供商: 支持 Kimi、智谱 GLM-4.5 等模型
申请 kimi 的 apikey 网址:
Moonshot AI 开放平台 - Kimi 大模型 API 服务
https://platform.moonshot.cn/console/api-keys
申请智谱 apikey 网址: 智谱 AI 开放平台
https://bigmodel.cn/usercenter/proj-mgmt/apikeys
https://gitee.com/masx200/claude-code-router
https://gitee.com/masx200/ClaudeWebUI-Docker
原始项目地址
https://github.com/musistudio/claude-code-router/
https://github.com/sruckh/ClaudeWebUI-Docker
https://github.com/siteboon/claudecodeui
部署步骤
1. 创建网络
docker network create shared_net-network
2. 配置 API 密钥
编辑配置文件,替换为你自己的 API 密钥:
config.json - 路由器配置:
{
"APIKEY": "你的API密钥",
"Providers": [
{
"name": "七牛云AI推理",
"api_base_url": "https://api.qnaigc.com/v1/chat/completions",
"api_key": "你的七牛云API密钥",
"models": ["kimi-k2"]
},
{
"name": "蓝耘科技",
"api_base_url": "https://maas-api.lanyun.net/v1/chat/completions",
"api_key": "你的蓝耘API密钥",
"models": ["/maas/kimi/Kimi-K2-Instruct"]
},
{
"name": "智谱AI",
"api_base_url": "https://open.bigmodel.cn/api/paas/v4/chat/completions",
"api_key": "你的智谱API密钥",
"models": ["glm-4.5"]
}
]
}
claudecodeui.yml - UI 服务配置:
environment:
- "ANTHROPIC_API_KEY=你的API密钥"
- "ANTHROPIC_BASE_URL=http://路由器IP:13456"
- "ANTHROPIC_AUTH_TOKEN=你的认证令牌"
3. 启动服务
启动 Claude-Code-Router 路由器
# 使用现有的YAML配置
docker-compose -f claude-code-router.yml up -d
# 或者手动运行
docker run -d \
--name claude-code-router \
--network shared_net-network \
-p 13456:13456 \
-v "f:/docker/claude-code-router/root/.claude-code-router:/root/.claude-code-router" \
docker.cnb.cool/masx200/docker_mirror/claude-code-router:1.0.33
启动 ClaudeCodeUI 界面
先创建一个空的数据库文件"F:/ClaudeWebUI-Docker-main/database/auth.db",
# 使用现有的YAML配置
docker-compose -f claudecodeui.yml up -d
# 或者手动运行
docker run -d \
--name claudecodeui \
--network shared_net-network \
-p 3008:3008 \
-e ANTHROPIC_API_KEY=你的API密钥 \
-e ANTHROPIC_BASE_URL=http://claude-code-router:13456 \
-e ANTHROPIC_AUTH_TOKEN=你的认证令牌 \
-v "F:/ClaudeWebUI-Docker-main/database/auth.db:/app/server/database/auth.db" \
registry.cn-hangzhou.aliyuncs.com/masx200/claudewebui:1.5.0
API 提供商申请指南
1. 七牛云 AI 推理
- 官网:https://www.qiniu.com/
- 免费额度:每月 1 万 tokens
- 申请步骤:注册账号 → 控制台 →AI 推理 → 获取 API 密钥
2. 蓝耘科技
- 官网:https://www.lanyun.net/
- 免费额度:新用户免费试用
- 支持模型:Kimi、Qwen 等
3. 智谱 AI
- 官网:https://open.bigmodel.cn/
- 免费额度:新用户免费 tokens
- 优势:中文优化好,响应快
4. ModelScope 魔塔
- 官网:https://www.modelscope.cn/
- 社区驱动,开源友好
5. 硅基流动
- 官网:https://siliconflow.cn/
- 企业级服务,稳定性高
系统特色功能
🚀 智能路由
- 自动选择最佳 API 提供商
- 负载均衡,避免单点故障
- 支持故障转移
💬 中文优化
- 完全支持中文对话
- 中文文件名、路径无乱码
- 符合中文开发习惯
📱 多端支持
- 支持桌面浏览器(Chrome、Firefox、Safari)
- 支持移动设备(iOS、Android)
- 支持 PWA,可添加到主屏
🔧 特性功能
- 实时文件编辑(支持语法高亮)
- Git 集成(提交、分支、Diff)
- 集成终端(支持 bash/zsh)
- 项目目录树浏览
- 会话历史管理
- 多标签支持
使用场景
- 代码生成:根据需求生成完整的代码文件
- 代码解释:看懂复杂的开源项目代码
- 代码重构:安全地重构现有代码库
- Bug 修复:快速定位并修复代码问题
- 文档生成:自动生成项目文档和 API 文档
测试验证
部署完成后,访问:
- Web 界面:http://localhost:3008
- API 接口:http://localhost:13456
- 健康检查:两个服务都能正常响应
性能优化建议
1. 缓存策略
- 启用 Redis 缓存经常使用的对话
- 设置合理的缓存过期时间
2. 负载均衡
- 在生产环境中使用 Nginx 作为反向代理
- 配置多个路由器实例做负载均衡
3. 监控告警
- 使用 Prometheus 监控 API 调用成功率
- 设置 SLA 告警,保证服务质量
常见问题解答
Q: 为什么国内无法直接访问 Claude? A: Anthropic
在中国地区暂未开放服务,但可以通过我们的路由器方案使用国内的 AI 提供商。
Q: 如何选择最合适的 AI 模型? A:
本项目已经配置了智能路由,会根据任务类型自动选择最适合的模型。
Q: 支持的编程语言有哪些? A:
支持所有主流编程语言:JavaScript/TypeScript、Python、Java、Go、Rust、C++等。
Q: 是否需要付费? A: 路由器和 UI 完全开源免费,只需支付各 AI 提供商的 API
调用费用,大部分都有免费额度。
总结
这套解决方案才是真正适合国内开发者的 AI 编程神器!无需FQ,使用国内稳定、快速的
AI 服务,配合现代化的 Web 界面,让 AI 编程变得前所未有的简单。仅需将 API
密钥替换为你自己的即可使用,真正做到了即开即用!
部署完成后,你会惊呼:这才是真正的生产力工具!
可以在网页中进行配置 claude-code-router,访问
claude-code-ui 图形化界面如图所示

claude-code-router 图形化界面如图所示

最后贴上我的配置文件为例:
"F:\docker\claude-code-router\root.claude-code-router\config.json"
{
"LOG": true,
"CLAUDE_PATH": "C:\\Users\\msx\\AppData\\Local\\Yarn\\Data\\global\\node_modules\\.bin\\claude.cmd",
"HOST": "0.0.0.0",
"PORT": 13456,
"APIKEY": "<api-key>",
"API_TIMEOUT_MS": "600000",
"PROXY_URL": "",
"transformers": [],
"Providers": [
{
"name": "七牛云AI推理",
"api_base_url": "https://api.qnaigc.com/v1/chat/completions",
"api_key": "<api-key>",
"models": ["kimi-k2"]
},
{
"name": "蓝耘科技",
"api_base_url": "https://maas-api.lanyun.net/v1/chat/completions",
"api_key": "<api-key>",
"models": ["/maas/kimi/Kimi-K2-Instruct"]
},
{
"name": "智谱AI",
"api_base_url": "https://open.bigmodel.cn/api/paas/v4/chat/completions",
"api_key": "<api-key>",
"models": ["glm-4.5"]
},
{
"name": "modelscope魔塔",
"api_base_url": "https://api-inference.modelscope.cn/v1/chat/completions",
"api_key": "<api-key>",
"models": ["moonshotai/Kimi-K2-Instruct"]
},
{
"name": "硅基流动",
"api_base_url": "https://api.siliconflow.cn/v1/chat/completions",
"api_key": "<api-key>",
"models": ["moonshotai/Kimi-K2-Instruct"]
}
],
"Router": {
"default": "modelscope魔塔,moonshotai/Kimi-K2-Instruct",
"background": "蓝耘科技,/maas/kimi/Kimi-K2-Instruct",
"think": "智谱AI,glm-4.5",
"longContext": "蓝耘科技,/maas/kimi/Kimi-K2-Instruct",
"longContextThreshold": 60000,
"webSearch": "七牛云AI推理,kimi-k2"
}
}
claude-code-router.yml
networks:
shared_net-network:
external: true
name: "shared_net-network"
driver: bridge
enable_ipv6: true
ipam:
config:
- subnet: "172.25.25.0/24"
- subnet: "fc99:db8:21::/64"
services:
claude-code-router:
cap_drop:
- "AUDIT_CONTROL"
- "BLOCK_SUSPEND"
- "DAC_READ_SEARCH"
- "IPC_LOCK"
- "IPC_OWNER"
- "LEASE"
- "LINUX_IMMUTABLE"
- "MAC_ADMIN"
- "MAC_OVERRIDE"
- "NET_ADMIN"
- "NET_BROADCAST"
- "SYSLOG"
- "SYS_ADMIN"
- "SYS_BOOT"
- "SYS_MODULE"
- "SYS_NICE"
- "SYS_PACCT"
- "SYS_PTRACE"
- "SYS_RAWIO"
- "SYS_RESOURCE"
- "SYS_TIME"
- "SYS_TTY_CONFIG"
- "WAKE_ALARM"
command:
- "sh"
- "-c"
- "rm -frv /root/.claude-code-router/.claude-code-router.pid && 'node' 'dist/cli.js' 'start'"
container_name: "claude-code-router"
entrypoint:
- "docker-entrypoint.sh"
environment:
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
- "NODE_VERSION=24.5.0"
- "YARN_VERSION=1.22.22"
hostname: "aa53006c8dc1"
image: "docker.cnb.cool/masx200/docker_mirror/claude-code-router:1.0.33"
ipc: "private"
logging:
driver: "json-file"
options: {}
networks:
- "shared_net-network"
ports:
- "13456:13456/tcp"
restart: "always"
stdin_open: true
tty: true
volumes:
- "f:/docker/claude-code-router/root/.claude-code-router:/root/.claude-code-router"
working_dir: "/app"
version: "3.6"
claudecodeui.yml
services:
claudecodeui:
cap_drop:
- "AUDIT_CONTROL"
- "BLOCK_SUSPEND"
- "DAC_READ_SEARCH"
- "IPC_LOCK"
- "IPC_OWNER"
- "LEASE"
- "LINUX_IMMUTABLE"
- "MAC_ADMIN"
- "MAC_OVERRIDE"
- "NET_ADMIN"
- "NET_BROADCAST"
- "SYSLOG"
- "SYS_ADMIN"
- "SYS_BOOT"
- "SYS_MODULE"
- "SYS_NICE"
- "SYS_PACCT"
- "SYS_RAWIO"
- "SYS_RESOURCE"
- "SYS_TIME"
- "SYS_TTY_CONFIG"
- "WAKE_ALARM"
command:
- "npm"
- "run"
- "server"
container_name: "claudecodeui"
entrypoint:
- "docker-entrypoint.sh"
environment:
- "ANTHROPIC_API_KEY=<api-key>"
- "OPENAI_API_KEY=<api-key>"
- "HOME=/opt/docker"
- "ANTHROPIC_BASE_URL=http://<docker宿主机ip>:13456"
- "TZ=Asia/Shanghai"
- "ANTHROPIC_AUTH_TOKEN=<api-key>"
- "JWT_SECRET=<随机字符串>"
- "VITE_PORT=3009"
- "DB_PATH=/app/data/auth.db"
- "PORT=3008"
- "NODE_ENV=production"
- "API_KEY="
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
- "NODE_VERSION=20.19.3"
- "YARN_VERSION=1.22.22"
hostname: "cb666984ce22"
image: "registry.cn-hangzhou.aliyuncs.com/masx200/claudewebui:1.5.0"
ipc: "private"
labels:
com.docker.compose.config-hash: "c073333da1e6c64f2fd1eea3aba867442a40bd746930154aea382912a2827436"
com.docker.compose.container-number: "1"
com.docker.compose.depends_on: ""
com.docker.compose.image: "sha256:f84e56b73a32b520111f0661463952401e91acae09e76ea90a54282aaf8f1ac9"
com.docker.compose.oneoff: "False"
com.docker.compose.project: "claudecodeui"
com.docker.compose.project.config_files: ""
com.docker.compose.project.working_dir: "f:\\portainer\\data\\compose\\84"
com.docker.compose.service: "claudecodeui"
com.docker.compose.version: ""
logging:
driver: "json-file"
options: {}
networks:
- "shared_net-network"
ports:
- "3008:3008/tcp"
privileged: true
restart: "always"
security_opt:
- "label=disable"
stdin_open: true
tty: true
user: "0:0"
volumes:
- "F:/ClaudeWebUI-Docker-main/claudecodeui_data:/app/data"
- "F:/ClaudeWebUI-Docker-main/database/auth.db:/app/server/database/auth.db"
- "F:/ClaudeWebUI-Docker-main/opt/docker/.gitconfig:/home/nodejs/.gitconfig:ro"
- "F:/ClaudeWebUI-Docker-main/opt/docker:/opt/docker"
working_dir: "/app"
version: "3.6"
networks:
shared_net-network:
external: false
name: "shared_net-network"
driver: bridge
enable_ipv6: true
ipam:
config:
- subnet: "172.25.25.0/24"
- subnet: "fc99:db8:21::/64"

浙公网安备 33010602011771号