Clawdbot整合Qwen3:32B保姆级教程:Docker Compose一键启停与环境变量说明
1. 为什么需要这个组合?
你是不是也遇到过这些情况:想用大模型做本地聊天,但每次都要手动启动Ollama、配置API地址、改Clawdbot的连接参数,一不小心端口就冲突;或者换台机器部署,又要重新查文档、调环境变量、反复试错?更别说团队协作时,每个人配出来的环境还不一样。
Clawdbot + Qwen3:32B 这个组合,就是为了解决“能跑通”和“好维护”之间的断层。它不是简单把两个工具拼在一起,而是通过 Docker Compose 把整个链路封装成可复现、可共享、可一键启停的标准化单元——模型服务、网关代理、前端界面,三者解耦又协同。
这里说的 Qwen3:32B,是通义千问最新发布的高性能版本,32B 参数量带来更强的逻辑推理和多轮对话能力,特别适合做技术咨询、文档解读、代码辅助等深度交互场景。而 Clawdbot 是一个轻量但功能完整的 Web 聊天前端,不依赖云服务,纯本地运行,界面干净、响应快、支持历史会话持久化。
最关键的是:它不碰任何外部 API 密钥,所有流量都在你自己的机器里流转。你掌控模型、掌控数据、掌控端口——这才是真正属于你的 AI 助手。
2. 整体架构一句话说清
整个系统只有三个核心组件,全部运行在你本机(或私有服务器)上:
- Qwen3:32B 模型服务:由 Ollama 启动,监听
127.0.0.1:11434(默认 Ollama API 端口) - Web 网关代理:一个轻量 Node.js 服务,负责把 Clawdbot 的请求转发给 Ollama,并把响应原样返回,同时把 Ollama 的
11434端口映射到对外友好的18789 - Clawdbot 前端:静态 HTML + JS 应用,通过浏览器访问
http://localhost:8080,所有请求都发往http://localhost:18789(即网关)
它们之间没有中间件、没有数据库、不写日志到磁盘(除非你主动开启),结构极简,故障点少,出问题一眼就能定位到是哪一层。
小提示:你完全不需要懂 Node.js 或 Ollama 内部原理。只要会复制粘贴命令、会改几个文本字段,就能让整套系统跑起来。
3. 准备工作:5分钟搞定基础依赖
在开始之前,请确认你的机器满足以下最低要求:
- 操作系统:Linux(推荐 Ubuntu 22.04+/Debian 12+)或 macOS(Intel/M1/M2/M3)
- 内存:≥32GB(Qwen3:32B 推理需约 26–28GB 显存或内存,CPU 模式下走 RAM)
- 磁盘:预留 ≥15GB 空间(模型文件约 12GB,缓存和镜像约 3GB)
- 已安装:Docker(≥24.0)、Docker Compose(v2,已集成进 Docker Desktop 或可通过
sudo apt install docker-compose-plugin安装)
如果你还没装 Ollama,现在就执行这一条命令(Linux/macOS):
curl -fsSL https://ollama.com/install.sh | sh安装完成后,验证是否正常:
ollama --version # 输出类似:ollama version is 0.3.12注意:不要用
sudo ollama run qwen3:32b手动拉取模型——我们后面会统一由 Docker Compose 管理,避免权限和路径混乱。
4. 项目结构与文件准备
我们不建复杂目录,只用一个干净的文件夹。建议新建并进入:
mkdir -p ~/clawdbot-qwen3 && cd ~/clawdbot-qwen3在这个目录下,你需要创建 3 个文件:
docker-compose.yml:定义服务编排(Ollama + 网关 + Clawdbot).env:存放所有可配置参数(端口、模型名、Ollama 地址等)gateway.js:轻量代理脚本(仅 40 行,无需额外依赖)
下面逐个给出完整内容,请严格按格式复制,注意缩进和引号:
4.1 创建.env环境变量文件
# === 基础配置 === COMPOSE_PROJECT_NAME=clawdbot-qwen3 # === 模型服务配置 === OLLAMA_HOST=host.docker.internal # Docker 内部访问宿主机 Ollama OLLAMA_PORT=11434 MODEL_NAME=qwen3:32b # === 网关配置 === GATEWAY_PORT=18789 GATEWAY_TIMEOUT=120000 # === Clawdbot 配置 === CLAWDBOT_PORT=8080 CLAWDBOT_API_BASE=http://localhost:18789说明:
host.docker.internal是 Docker 提供的特殊 DNS 名,让容器内能直接访问宿主机上的 Ollama 服务。Windows/macOS Docker Desktop 默认支持;Linux 用户如遇问题,可临时替换为宿主机真实 IP(如192.168.1.100),并在docker-compose.yml中加extra_hosts。
4.2 创建gateway.js代理脚本
const http = require('http'); const url = require('url'); const { ClientRequest } = require('http'); const PORT = process.env.GATEWAY_PORT || 18789; const OLLAMA_URL = `http://${process.env.OLLAMA_HOST}:${process.env.OLLAMA_PORT}`; const server = http.createServer((req, res) => { const proxyUrl = new URL(req.url, OLLAMA_URL); const options = { method: req.method, headers: req.headers, timeout: parseInt(process.env.GATEWAY_TIMEOUT) || 120000, }; const proxyReq = http.request(proxyUrl, (proxyRes) => { res.writeHead(proxyRes.statusCode, proxyRes.headers); proxyRes.pipe(res); }); proxyReq.on('error', (err) => { console.error(`[Gateway] Proxy error: ${err.message}`); res.writeHead(502, { 'Content-Type': 'text/plain' }); res.end('Bad Gateway: Ollama unreachable'); }); req.pipe(proxyReq); }); server.listen(PORT, () => { console.log(` Gateway running on http://localhost:${PORT}`); console.log(`➡ Forwarding to ${OLLAMA_URL}`); });保存后,给执行权限(Linux/macOS):
chmod +x gateway.js4.3 创建docker-compose.yml
version: '3.8' services: ollama: image: ollama/ollama:latest container_name: ollama-qwen3 restart: unless-stopped volumes: - ~/.ollama:/root/.ollama ports: - "11434:11434" environment: - OLLAMA_ORIGINS=http://localhost:8080,http://127.0.0.1:8080 networks: - clawdbot-net gateway: image: node:18-alpine container_name: clawdbot-gateway restart: unless-stopped working_dir: /app volumes: - ./gateway.js:/app/gateway.js:ro - ./.env:/app/.env:ro command: sh -c "npm config set registry https://registry.npmjs.org/ && node gateway.js" environment: - NODE_ENV=production ports: - "${GATEWAY_PORT}:18789" depends_on: - ollama networks: - clawdbot-net clawdbot: image: ghcr.io/clawdbot/clawdbot:latest container_name: clawdbot-ui restart: unless-stopped environment: - VITE_API_BASE=${CLAWDBOT_API_BASE} ports: - "${CLAWDBOT_PORT}:80" depends_on: - gateway networks: - clawdbot-net networks: clawdbot-net: driver: bridge关键设计说明:
ollama容器挂载了宿主机的~/.ollama目录,确保模型一次下载、永久可用;gateway容器用 Alpine Node 镜像,体积仅 120MB,启动秒级;clawdbot使用官方预构建镜像,无须构建前端,开箱即用;- 所有服务共用
clawdbot-net网络,内部通信走 Docker DNS,稳定可靠。
5. 一键启动:3条命令完成全部部署
准备好上面 3 个文件后,回到终端,执行以下命令:
5.1 第一步:拉取并加载 Qwen3:32B 模型(仅首次需要)
ollama pull qwen3:32b小技巧:如果网络慢,可提前在另一终端运行
ollama serve,再开新窗口执行pull,速度提升明显。模型约 12GB,视带宽需 10–30 分钟。
5.2 第二步:启动整个服务栈
docker compose up -d你会看到类似输出:
[+] Running 3/3 ✔ Network clawdbot-net Created 0.0s ✔ Container ollama-qwen3 Started 0.5s ✔ Container clawdbot-gateway Started 0.6s ✔ Container clawdbot-ui Started 0.7s5.3 第三步:确认服务状态
docker compose ps正常应显示三行,状态均为running。再检查日志是否报错:
docker compose logs -f gateway # 应看到: Gateway running on http://localhost:18789 # ➡ Forwarding to http://host.docker.internal:11434验证连通性(可选):
在宿主机执行:curl -s http://localhost:18789/api/tags | jq '.models[].name'如果返回
"qwen3:32b",说明网关已成功连接 Ollama。
6. 访问与使用:打开浏览器,开始对话
现在,打开你的浏览器,访问:
http://localhost:8080你会看到 Clawdbot 的简洁界面——左侧是会话列表,右侧是聊天窗口,顶部有模型选择下拉框(默认已设为qwen3:32b)。
试着输入一句:
你好,你是谁?用中文回答,不超过30个字。几秒后,你应该看到 Qwen3:32B 的回复,例如:
我是通义千问Qwen3,320亿参数的大语言模型,专注高质量对话。成功!你已经拥有了一个完全本地、无需联网、一键启停、模型可控的 AI 聊天平台。
📸 页面截图说明(对应原文图示):
- 启动教程图:展示
docker compose up -d终端输出效果;- 使用页面图:Clawdbot 界面,左栏会话、右栏输入框、顶部模型切换;
- 内部说明图:架构流程图,清晰标注
Ollama → Gateway(18789) → Clawdbot(8080)数据流向。
7. 环境变量详解:哪些可以改?怎么改才安全?
.env文件里的每一项,都对应一个实际作用。我们按使用频率排序说明:
| 变量名 | 默认值 | 是否建议修改 | 说明 |
|---|---|---|---|
GATEWAY_PORT | 18789 | 强烈建议 | 如果你本机 18789 被占用,直接改成18790等空闲端口,重启即可生效 |
CLAWDBOT_PORT | 8080 | 推荐 | 若 8080 已被其他服务占用(如本地开发服务器),改为8081或3000 |
MODEL_NAME | qwen3:32b | 谨慎 | 想换模型(如qwen2.5:7b),只需改此项 +ollama pull新模型,无需改代码 |
OLLAMA_HOST | host.docker.internal | ❌ 不建议 | Linux 用户若无法解析,可改为宿主机 IP,并在docker-compose.yml的ollama服务下添加:extra_hosts:- "host.docker.internal:192.168.1.100" |
GATEWAY_TIMEOUT | 120000(2分钟) | 大模型长思考时建议调大 | Qwen3:32B 处理复杂问题可能超 60 秒,设为300000(5分钟)更稳妥 |
🛑绝对不要改的项:
COMPOSE_PROJECT_NAME:影响容器命名和网络隔离,改了会导致docker compose down清不干净;OLLAMA_PORT:Ollama 固定为 11434,改了要同步改ollama容器端口映射;VITE_API_BASE:Clawdbot 前端编译时已固化,必须与网关暴露端口一致。
改完.env后,只需执行:
docker compose down && docker compose up -d无需重拉镜像、无需重下模型,3 秒内完成热更新。
8. 日常运维:启停、日志、清理全指南
这套系统设计之初就考虑了“随时可停、随时可走”。以下是高频操作清单:
8.1 一键停止所有服务
docker compose down效果:停止并移除容器,但保留卷(
~/.ollama模型仍在)、网络、镜像。下次up秒启。
8.2 查看实时日志(聚焦某服务)
# 看网关转发是否正常 docker compose logs -f gateway # 看 Ollama 是否收到请求(调试用) docker compose logs ollama \| grep "POST /api/chat" # 看 Clawdbot 前端错误(如 CORS、404) docker compose logs clawdbot8.3 清理无用镜像与构建缓存(每月一次)
# 清理已停止容器、悬空镜像、构建缓存 docker system prune -a --volumes -f # 单独清理 Ollama 模型缓存(谨慎!会删掉所有模型) # ollama rm qwen3:32b8.4 升级到新版 Clawdbot 或 Ollama
# 更新 Clawdbot 前端(拉取最新镜像) docker compose pull clawdbot # 更新 Ollama(注意:可能重置模型,建议先备份 ~/.ollama) docker compose pull ollama # 重启生效 docker compose up -d进阶提示:你可以把整个
~/clawdbot-qwen3文件夹加入 Git,提交.env(记得.gitignore排除敏感值)、docker-compose.yml、gateway.js—— 团队成员git clone && docker compose up -d即可获得完全一致环境。
9. 常见问题与解决方法(实测版)
我们整理了 5 个新手最常卡住的点,附带一行命令修复方案:
| 现象 | 原因 | 一行修复命令 |
|---|---|---|
curl: (7) Failed to connect to localhost port 18789 | 网关容器没启动或端口被占 | docker compose logs gateway | head -5→ 查端口冲突 → 改.env中GATEWAY_PORT |
Clawdbot 页面空白,控制台报Failed to fetch | VITE_API_BASE和网关端口不一致 | grep VITE_API_BASE .env对比GATEWAY_PORT,确保一致 |
Ollama 报错model not found | 模型没拉取或名字拼错 | ollama list→ 确认输出含qwen3:32b→ 若无,ollama pull qwen3:32b |
输入后无响应,日志显示timeout | 网关超时太短或模型加载中 | sed -i 's/GATEWAY_TIMEOUT=120000/GATEWAY_TIMEOUT=300000/' .env && docker compose up -d |
Linux 下host.docker.internal解析失败 | Docker 默认不支持该 DNS | echo '192.168.1.100 host.docker.internal' >> /etc/hosts(替换成你宿主机 IP) |
所有修复都不需要重装、不丢失数据、不重下模型。
10. 总结:你真正掌握的不只是部署
读完这篇教程,你拿到的不是一个“能跑的 demo”,而是一套可理解、可修改、可迁移的本地大模型工作流:
- 你知道了为什么用 Docker Compose 而不是裸跑:它让服务依赖显性化、端口管理集中化、启停操作原子化;
- 你掌握了网关存在的真正价值:不是多此一举,而是解耦前端与模型、屏蔽 Ollama 版本差异、统一超时与错误处理;
- 你理解了环境变量驱动配置的工程意义:同一套代码,改 3 个字段就能切模型、换端口、适配不同机器;
- 你获得了可持续维护的能力:从日志定位、一键重启、到版本升级,每一步都有明确指令和预期结果。
这不是终点,而是起点。接下来,你可以:
- 把
gateway.js改造成支持流式响应(SSE),让 Clawdbot 实现“打字机效果”; - 加入 Redis 缓存会话历史,让重启后聊天记录不丢失;
- 用 Nginx 做反向代理 + HTTPS,让家人也能通过域名访问你的 AI 助手。
真正的掌控感,从来不是“点开就用”,而是“我知道它在哪、怎么修、怎么变”。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。