对于许多开发者而言,Anthropic公司推出的Claude Code无疑是AI编程领域的得力助手。尽管其代码理解与工具调用能力超强,但价格高昂、网络受限、注册严苛的三座“大山”,让不少人望而却步。
现在可以使用智谱ai大模型,或者kimi大模型代替Claude模型了。
智谱的api接口为:
https:// open.bigmodel.cn/api/an thropickimi的api接口为:
https:// api.moonshot.cn/anthrop ic原始项目网址:
https:// github.com/siteboon/cla udecodeuidocker版本网址:
https:// gitee.com/masx200/Claud eWebUI-Docker构建与部署 Claude Code UI Docker 容器完全指南
> 本文将带你从零开始:
1. 理解 Dockerfile 的每一步在做什么;
2. 在本地准备好持久化目录与空数据库文件;
3. 修改密钥并启动容器;
4. 最终得到一个可远程访问、数据可持久化的 Claude Web UI 服务。
—
一、镜像构建原理(Dockerfile 拆解)
整个 Dockerfile 采用「三阶段构建」策略:
阶段 作用 关键指令
base 准备操作系统和基础依赖 apk add …、yarn install --omit=dev
build 拉源码、装 dev 依赖、构建前端静态文件 yarn install、npm run build
production 拷贝产物、装运行时依赖、降权启动 COPY --from=build、USER nodejs
1.1 加速国内构建
- 所有 npm / yarn / pip 均切换到清华或 npmmirror 镜像。
- Alpine 软件源替换为 USTC,减少拉取时间。
1.2 产物精简
- 最终镜像只含运行时必须的文件:
- /app/dist/ 前端静态资源
- /app/server/ Node 后端
- /app/data/ 可挂载的数据目录
- 删除 dev 依赖、缓存、构建缓存,镜像体积更小。
1.3 安全加固
- 创建非 root 用户 nodejs:1001;
- 只暴露内部端口 3008;
- 通过 HEALTHCHECK 每 30 s 自检一次 /api/auth/status。
—
二、部署前准备(数据目录 & 密钥)
一键生成随机 JWT_SECRET(可选脚本)
在启动前执行一次即可:
bash
# Linux / macOS
讯享网export JWT_SECRET=\((openssl rand -hex 32)</code></pre></div><p class="ztext-empty-paragraph"><br/></p><p data-pid="Fvdt4hzk"># Windows PowerShell</p><div class="highlight"><pre><code class="language-text">\)env:JWT_SECRET = (openssl rand -hex 32)
2.1 选择数据目录
假设你想把数据放在 D:\claude-docker,则将下面所有路径中的
F:/ClaudeWebUI-Docker-main 全部替换成 D:/claude-docker。
2.2 创建空数据库文件
Windows PowerShell 执行:
”`powershell
# 创建目录
mkdir D:\claude-docker\database
创建空 SQLite 文件
ni D:\claude-docker\database\auth.db
</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Y9cwLtWq">Linux / macOS:</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="TFyA78wt">bash
讯享网mkdir -p /opt/claude-docker/database touch /opt/claude-docker/database/auth.db
</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="CASGCSwV">2.3 准备密钥 </p><p data-pid="xA6__ycx">- OPENAI_API_KEY:你的 OpenAI API Key(以 `sk-` 开头)。 </p><p data-pid="8ktlg8G2">- ANTHROPIC_AUTH_TOKEN:智谱 AI 开放平台申请的 key。 </p><p data-pid="R71dfbL_">申请kimi的apikey网址:</p>Moonshot AI 开放平台 - Kimi 大模型 API 服务<p data-pid="RPrSNz7X">申请智谱 apikey网址:</p>智谱AI开放平台<p data-pid="Wf3fNUfr">把环境变量ANTHROPIC_BASE_URL改为兼容ANTHROPIC的接口地址,以智谱为例“ANTHROPIC_BASE_URL=<span class="invisible">https://</span><span class="visible">open.bigmodel.cn/api/an</span><span class="invisible">thropic</span><span class="ellipsis"></span>"。</p><p data-pid="R6l0UQiz">把这两个值先写到临时文件,稍后在 `docker-compose.yml` 或 `.env` 里引用。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="BgKT24yl">---</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="_5QpHQzS">三、编写 docker-compose.yml(示例)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="3MLUndS3">在项目根目录(`D:\claude-docker`)新建 `docker-compose.yml`:</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="zSLykkCO">yaml
version: “3.9” services: claudecodeui: user: “0:0” command: - “npm” - “run” - “server” entrypoint: - “docker-entrypoint.sh”
image: “registry.cn-hangzhou.aliyuncs.com/masx200/claudewebui:1.5.0” container_name: claude-webui # 关键修改:restart 设为 always restart: always environment: # ———- 必填:换成你自己的 ———- OPENAI_API_KEY: “<sk-你的openai-key>” ANTHROPIC_AUTH_TOKEN: “<glm-你的智谱key>” # ———- 以下保持原样 ———- ANTHROPIC_BASE_URL: “https://open.bigmodel.cn/api/anthropic" NODE_ENV: production PORT: 3008 DB_PATH: /app/data/auth.db HOME: /opt/docker # 随机 32 位 JWT_SECRET JWT_SECRET: ”\({JWT_SECRET:-}"</span><span class="w"> </span><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span><span class="w"> </span>- <span class="s2">"3008:3008"</span><span class="w"> </span><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span><span class="w"> </span><span class="c"># 1) 把本地空数据库文件挂进容器</span><span class="w"> </span><span class="w"> </span>- <span class="s2">"F:/ClaudeWebUI-Docker-main/database/auth.db:/app/server/database/auth.db:rw"</span><span class="w"> </span><span class="w"> </span><span class="c"># 2) 其余持久化目录(可按需修改)</span><span class="w"> </span><span class="w"> </span>- <span class="s2">"F:/ClaudeWebUI-Docker-main/data:/app/data"</span><span class="w"> </span><span class="w"> </span>- <span class="s2">"F:/ClaudeWebUI-Docker-main/workspace:/opt/docker:rw"</span><span class="w"> </span><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span><span class="w"> </span>- <span class="l">claude-net</span><span class="w"> </span><span class="w"> </span><span class="nt">working_dir</span><span class="p">:</span><span class="w"> </span><span class="s2">"/app"</span><span class="w"> </span><span class="w"> </span><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span><span class="w"> </span><span class="nt">claude-net</span><span class="p">:</span><span class="w"> </span><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">bridge</span><span class="w"> </span><span class="w"> </span><span class="nt">enable_ipv6</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="w"> </span><span class="nt">ipam</span><span class="p">:</span><span class="w"> </span><span class="w"> </span><span class="nt">config</span><span class="p">:</span><span class="w"> </span><span class="w"> </span>- <span class="nt">subnet</span><span class="p">:</span><span class="w"> </span><span class="s2">"172.25.25.0/24"</span><span class="w"> </span><span class="w"> </span>- <span class="nt">subnet</span><span class="p">:</span><span class="w"> </span><span class="s2">"fc99:db8:21::/64"</span></code></pre></div><p class="ztext-empty-paragraph"><br/></p><p data-pid="cDz8Eynf">```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="IN6To_2S">> 提示 </p><p data-pid="dqzuEH5y">- Windows 路径用 `/` 或 `\\` 均可。 </p><p data-pid="XdO-8oFV">- `JWT_SECRET` 至少 32 位随机字符串,可执行 `openssl rand -hex 16` 得到。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="iq00DmV5">---</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="XLJ-v5zu">四、构建 & 启动</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="zFtkqyEQ">1. 构建(首次较慢) </p><p data-pid="lF***jIU">```bash</p><div class="highlight"><pre><code class="language-text"> docker build -f Dockerfile -t claudewebui:1.5.0 .</code></pre></div><p data-pid="z2fvXcQc"> ```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="IR3F3a-t">2. 启动 </p><p data-pid="d3wpfs_1">```bash</p><div class="highlight"><pre><code class="language-text"> docker compose up -d</code></pre></div><p data-pid="l118Hg4q"> ```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="LPkphQfq">3. 查看日志 </p><p data-pid="mdIZNstT">```bash</p><div class="highlight"><pre><code class="language-text"> docker compose logs -f</code></pre></div><p data-pid="vi1N7Xuw"> ```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="C3UT6dgo">4. 浏览器访问 </p><p data-pid="yE6c0ylM">```</p><p data-pid="uMYQWBgF">http://localhost:3008</p><p data-pid="6XzxEnN-"> ```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="TlIuLrcY"> 首次打开会提示注册管理员账号,完成即可使用。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="O-V2i206">---</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="dgmfPh7U">五、日常运维</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="2i35OEH8">操作 命令 </p><p data-pid="lWYx6Gv2">重启服务 `docker compose restart` </p><p data-pid="yl5JJYzP">更新镜像 `docker compose pull && docker compose up -d --build` </p><p data-pid="I8ffkusT">备份数据库 `docker cp claude-webui:/app/data/auth.db https://zhuanlan.zhihu.com/p/auth-\)(date +%F).db </p><p data-pid="Bm-NDa6r">进入容器 docker exec -it claude-webui sh </p><p class="ztext-empty-paragraph"><br/></p><p data-pid="xYHXYXO5">---</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="lvEWW_1a">六、常见问题速查</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="yaoJlbYC">现象 解决 </p><p data-pid="4Iue2eWD">端口被占用 改ports为“3009:3008” </p><p data-pid="EHlG0MaB">找不到 SQLite 文件 确认宿主机路径已挂载且权限 777 / 755 </p><p data-pid="iLGnYB1m">前端空白 检查dist目录是否成功拷贝,npm run build是否报错 </p><p data-pid="nDsiy2lr">日志出现EACCES 把宿主机挂载目录chown -R 1001:1001`
—
至此,你已经拥有一个可长期运行、数据持久化、密钥自定义的 Claude Web UI Docker 容器。祝编码愉快!
讯享网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/209943.html