1. 项目概述:快速启动你的AI助手
最近在折腾一个叫 openclaw 的开源AI助手项目,它本质上是一个可以部署在本地或服务器上的智能体(Agent)平台。简单来说,你可以把它理解为一个“大脑”,通过连接各种大语言模型(比如 OpenAI 的 GPT、Anthropic 的 Claude、国内的 Qwen 等)和消息渠道(比如 Telegram、Discord、飞书),让它帮你处理信息、回答问题,甚至执行一些自动化任务。我之所以对它感兴趣,是因为它提供了一个高度可定制、且能完全私有化部署的AI交互方案,这对于注重数据隐私或者想深度集成到自有工作流的开发者来说,非常有吸引力。
这个项目本身功能强大,但初始的部署和配置对于不熟悉 Docker 和命令行操作的朋友来说,可能有点门槛。好在社区里已经有了一个名为start-openclaw的配套项目,它的目标非常明确:用最简单、最标准化的 Docker 方式,帮你一键拉起 openclaw 服务。它把环境依赖、服务编排都打包好了,你只需要几条命令,就能获得一个可运行的 openclaw 实例,极大地降低了上手难度。无论你是想快速体验 openclaw 的核心功能,还是打算将其作为长期服务的基础,这个 Docker 化的启动方案都是极佳的起点。
接下来,我将结合我自己的部署经验,为你详细拆解从零开始使用start-openclaw的完整流程。我会重点解释每个步骤背后的“为什么”,分享我在配置过程中踩过的坑和总结的技巧,目标是让你不仅能成功跑起来,还能理解其中的关键配置,以便后续根据自身需求进行灵活调整。
2. 环境准备与核心概念解析
在动手之前,我们需要确保基础环境就绪,并理解几个核心概念,这能帮助你在后续配置时做出更明智的选择。
2.1 系统与Docker环境检查
start-openclaw的核心依赖是 Docker。Docker 是一个容器化平台,它可以把应用程序及其所有依赖(库、环境变量、配置文件)打包成一个独立的“容器”。这样做的好处是,你无需在宿主机上复杂地配置 Python、Node.js 等运行环境,避免了“在我机器上能跑”的经典问题。
宿主机要求:
- 操作系统:主流的 Linux 发行版(如 Ubuntu 22.04 LTS、Debian 11/12、CentOS Stream 9)、macOS 或 Windows(需使用 WSL 2)。我个人推荐在 Linux 服务器或 WSL 2 环境下进行,最为稳定。
- Docker 引擎:需要安装 Docker CE(社区版)或 Docker Desktop。你可以通过运行
docker --version和docker-compose --version(或docker compose version)来检查是否已安装及版本。 - 网络:由于需要从 GitHub 的容器注册表(ghcr.io)拉取镜像,你的宿主机必须能够访问
ghcr.io和github.com。对于国内用户,如果拉取镜像缓慢或失败,可能需要配置 Docker 镜像加速器。
安装与加速(针对Linux):如果你还没有安装 Docker,可以参照以下步骤(以 Ubuntu 为例):
# 1. 卸载旧版本(如有) sudo apt-get remove docker docker-engine docker.io containerd runc # 2. 安装依赖包 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release # 3. 添加 Docker 官方 GPG 密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 4. 设置稳定版仓库 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 # 5. 安装 Docker 引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # 6. 验证安装 sudo docker run hello-world对于网络加速,可以编辑或创建/etc/docker/daemon.json文件,加入国内镜像源,例如:
{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] }然后重启 Docker 服务:sudo systemctl restart docker。
2.2 理解 openclaw 的容器化部署架构
当我们使用start-openclaw时,我们实际上在运行一个包含了完整 openclaw 应用及其运行时的 Docker 容器。这个架构有几个关键点需要理解:
- 镜像(Image)与容器(Container):
ghcr.io/iamliuxiaozhen/start-openclaw:latest是一个 Docker 镜像,它是应用的静态模板。当我们执行docker run或docker-compose up时,Docker 会根据这个镜像创建并启动一个容器,容器是镜像的运行实例。 - 端口映射(Port Mapping):在配置中,你会看到
-p 127.0.0.1:18789:18789。这表示将容器内部的 18789 端口映射到宿主机的 18789 端口,并且只绑定在宿主机的本地回环地址(127.0.0.1)上。这意味着最初只有宿主机本身能通过http://127.0.0.1:18789访问 openclaw 的 Web 界面。 - 数据卷挂载(Volume Mount):这是至关重要的一环。容器本身是无状态的,当容器被删除时,其中的所有更改(如下载的模型、创建的配置、聊天记录)都会丢失。通过
-v /host/path:/container/path将宿主机的目录挂载到容器内,我们就能将 openclaw 产生的持久化数据(如配置文件、工作空间文件)保存在宿主机上。即使容器重建,只要重新挂载相同的目录,数据就能恢复。 - 初始化(Onboarding):第一次运行容器后,你需要进入容器执行
openclaw onboard命令。这个过程会引导你完成核心配置,如选择 AI 模型提供商、消息渠道、网络搜索工具等。这些配置信息会被保存在挂载的数据卷中。
注意:务必重视数据卷的配置。我曾因为忘记挂载卷,在重启容器后丢失了所有配置和对话上下文,不得不从头再来。官方也强烈建议配置卷挂载,以避免 AI 助手“失忆”。
3. 详细部署与初始化实操
理解了基础概念后,我们进入实战环节。我将以docker-compose方式为例进行详解,因为这是管理容器生命周期(启动、停止、重启)更优雅的方式。
3.1 获取并配置 docker-compose.yml 文件
首先,你需要获取项目的docker-compose.yml.example文件。通常你可以直接克隆start-openclaw的仓库,或者直接下载这个文件。
# 假设你在一个工作目录下,例如 ~/projects cd ~/projects # 克隆仓库(如果网络允许) git clone https://github.com/iamliuxiaozhen/start-openclaw.git cd start-openclaw如果网络不畅,你也可以直接在 GitHub 页面上找到docker-compose.yml.example文件,点击“Raw”按钮,复制其内容,然后在本地创建一个同名文件。
接下来,将其重命名为docker-compose.yml:
cp docker-compose.yml.example docker-compose.yml现在,用你喜欢的文本编辑器(如nano,vim,VSCode)打开docker-compose.yml文件。你会看到类似以下的内容:
services: openclaw: build: . container_name: openclaw-bot restart: unless-stopped privileged: true ports: - "127.0.0.1:18789:18789" volumes: # Mount volumes here # -/home/username/ai-workspace:/workspace # /home/username/.openclaw:/root/.openclaw environment: - NODE_ENV=production stdin_open: true tty: true关键配置修改与解释:
build: .:这行指示 Docker Compose 根据当前目录的 Dockerfile 构建镜像。但start-openclaw项目更推荐直接使用预构建的镜像。因此,我建议将这行替换为image: ghcr.io/iamliuxiaozhen/start-openclaw:latest。这样会直接从仓库拉取镜像,更快更稳定。services: openclaw: image: ghcr.io/iamliuxiaozhen/start-openclaw:latest # ... 其他配置保持不变volumes(数据卷挂载):这是你必须取消注释并修改的部分。它定义了哪些宿主机目录要映射到容器内。- /home/username/ai-workspace:/workspace:将宿主机的/home/username/ai-workspace目录挂载到容器的/workspace。这是 openclaw 的工作空间,AI 读写文件、执行代码都在这里。请将/home/username替换为你自己宿主机上的真实用户目录,例如/home/ubuntu或/home/yourname。- /home/username/.openclaw:/root/.openclaw:将宿主机的/home/username/.openclaw目录挂载到容器的/root/.openclaw。这是 openclaw 的核心配置目录,onboard流程生成的配置文件、凭证、对话缓存等都存储在这里。同样需要替换路径。实操建议:在宿主机上提前创建好这两个目录,并确保当前用户有读写权限。
mkdir -p ~/ai-workspace ~/.openclaw修改后的
volumes部分应类似:volumes: - /home/your_username/ai-workspace:/workspace - /home/your_username/.openclaw:/root/.openclawports(端口映射):默认127.0.0.1:18789:18789意味着服务只在宿主机本地可访问。如果你需要通过局域网其他设备访问 Web 界面,暂时保持不动,我们后面在高级配置里再调整。privileged: true:给予容器特权模式。这通常是必要的,因为 openclaw 可能需要访问宿主机的某些资源(如 Docker 守护进程,如果要在容器内运行代码或操作其他容器)。这是一个安全权衡,在可信环境下使用问题不大。
修改并保存好docker-compose.yml文件。
3.2 启动 openclaw 服务
在包含docker-compose.yml文件的目录下,执行以下命令启动服务:
# 默认在前台启动,可以看到日志输出,按 Ctrl+C 停止 docker-compose up # 或者,使用守护进程模式在后台启动 docker-compose up -d我推荐先使用docker-compose up在前台运行,观察启动日志是否有错误。如果看到服务正常启动并监听端口的日志,说明容器已成功运行。之后可以按Ctrl+C停止,再用docker-compose up -d在后台运行。
使用docker-compose ps可以查看服务状态,docker-compose logs -f openclaw可以实时查看日志。
3.3 首次初始化配置 (Onboarding)
容器运行起来后,openclaw 服务本身还处于“未配置”状态。我们需要进入容器内部进行初始化。
进入容器:
docker exec -it openclaw-bot bash这个命令会打开一个交互式的 bash 终端,你就像登录到了这个容器内部。
执行初始化向导:
openclaw onboard这会启动一个交互式的命令行向导。下面我带你一步步走完关键选择,并解释每个选项的意义。
第一步:风险确认与模式选择你会看到一个安全提示页,需要阅读并确认。然后选择模式:
◆ Onboarding mode │ ● QuickStart (Configure details later via openclaw configure.) │ ○ Manual- QuickStart(快速开始):推荐新手选择。它会引导你完成最核心的几项配置(模型、渠道),其他高级设置可以后续通过
openclaw configure命令再调整。 - Manual(手动模式):提供所有可配置项的完整列表,适合有经验的用户进行精细化配置。选择
QuickStart,按回车。
第二步:选择 AI 模型/认证提供商这是一个很长的列表,包含了 openclaw 支持的各种大模型 API。
◆ Model/auth provider │ ● OpenAI (Codex OAuth + API key) │ ○ Anthropic │ ○ Chutes ... (众多选项) │ ○ Skip for now- OpenAI:如果你有 OpenAI 的 API Key,这是最通用和强大的选择。
- Anthropic:Claude 系列模型。
- Qwen:阿里通义千问。
- Ollama:如果你在本地运行了 Ollama 来部署开源模型(如 Llama 3, Qwen2.5),选这个。
- Skip for now:暂时跳过,后续再配置。但这样 AI 助手将无法工作。根据你的实际情况选择。例如,选择
OpenAI,接下来会提示你输入 API Key。请提前准备好。
第三步:选择默认模型在选择完提供商后,可能会让你选择该提供商下的具体模型。
◆ Default model │ ● Keep current (qwen-portal/coder-model) │ ○ Enter model manually │ ○ qwen-portal/coder-model │ ○ qwen-portal/vision-model例如,如果你选了 Qwen,这里会列出可用的模型。选择你想要的,比如
qwen-portal/coder-model(代码能力较强的模型)。第四步:选择消息渠道这是决定你如何与 AI 助手交互的关键。
◆ Select channel (QuickStart) │ ● Telegram (Bot API) (recommended · newcomer-friendly) │ ○ WhatsApp (QR link) │ ○ Discord (Bot API) ... (众多选项) │ ○ Skip for now- Telegram:非常推荐,对新手友好。你需要先通过 @BotFather 创建一个 Telegram Bot,并获取它的 Token。
- Discord:同样需要先在 Discord 开发者门户创建应用和 Bot,获取 Token。
- 飞书/Lark:适合国内团队协作。
- Skip for now:跳过,后续通过 Web 界面配置。但初期你就只能通过本地 Web 界面(http://127.0.0.1:18789)来交互了。选择一个你常用的渠道。以 Telegram 为例,选择后需要输入 Bot Token。
第五步:配置网络搜索
◆ Search provider │ ● Brave Search (Structured results · country/language/time filters) │ ○ Gemini (Google Search) │ ○ Grok (xAI) ... (其他选项) │ ○ Skip for now这赋予了 AI 助手实时搜索网络信息的能力。例如选择
Brave Search,你需要去 Brave Search 官网申请一个免费的 API Key 并填入。如果暂时不需要,可以选择Skip for now。后续可能还会有一些其他工具(如代码解释器、文件读写)的配置提示,你可以根据向导一步步完成,或者暂时跳过。
- QuickStart(快速开始):推荐新手选择。它会引导你完成最核心的几项配置(模型、渠道),其他高级设置可以后续通过
完成与退出:配置完成后,向导会结束。你可以输入
exit退出容器终端。
3.4 验证与访问
初始化完成后,openclaw 服务应该已经就绪。
- 访问本地 Web 界面:在你的宿主机上,打开浏览器,访问
http://127.0.0.1:18789。你应该能看到 openclaw 的 Web 用户界面。这是一个功能丰富的控制台,你可以在这里直接与 AI 对话、管理配置、查看日志等。 - 测试消息渠道:如果你配置了 Telegram 等渠道,现在可以去对应的 App 里给你的 Bot 发送消息,看看它是否能正常回复。
至此,一个最基本的 openclaw 服务就已经部署并配置完成了。
4. 高级配置、优化与问题排查
基础服务跑通后,我们可能会遇到一些需求或问题,比如如何从外部网络访问、如何修改配置、服务挂了怎么办。这部分就是为你准备的“进阶手册”。
4.1 调整网络访问范围
默认配置下,Web 界面只能在本机访问。如果你想让同一局域网下的其他设备(比如你的手机、另一台电脑)也能访问,有两种方法。
方法一:修改 Docker 端口绑定(简单,但需注意防火墙)这是最直接的方法,修改docker-compose.yml中的ports部分:
ports: # 从 "127.0.0.1:18789:18789" 改为 - "0.0.0.0:18789:18789"0.0.0.0表示绑定到宿主机的所有网络接口。修改后,重启服务:
docker-compose down docker-compose up -d现在,同一局域网内的设备可以通过http://<宿主机IP>:18789来访问了。
警告:这样做意味着你宿主机的 18789 端口对局域网开放了。请确保你的宿主机防火墙(如
ufw、firewalld)允许该端口的入站连接,并且你信任你的局域网环境。在公网服务器上切勿直接这样暴露,务必使用下面的反向代理或 VPN 方式。
方法二:修改 openclaw 内部绑定配置(更灵活)openclaw 服务本身有一个bind配置项,控制其监听范围。默认是loopback(仅容器内)。我们可以进入容器修改它。
# 1. 进入容器 docker exec -it openclaw-bot bash # 2. 进入配置目录 cd /root/.openclaw # 3. 编辑配置文件(如果使用 nano) nano openclaw.json # 如果使用 vim # vim openclaw.json在配置文件中,找到"bind"字段(可能在server或web部分),将其值从"loopback"改为"lan"。
{ // ... 其他配置 "server": { "bind": "lan", // 修改这里 // ... } }"lan"模式会让服务监听在容器内的所有网络接口上,结合 Docker 的端口映射-p 0.0.0.0:18789:18789,就能实现局域网访问。 保存文件并退出编辑器。然后需要重启 openclaw 容器以使配置生效:
# 退出容器 exit # 重启容器 docker-compose restart不同bind模式的区别如下表所示:
| 模式 | 监听范围 | 适用场景 |
|---|---|---|
loopback | 仅容器内部(127.0.0.1) | 仅通过宿主机本地访问,最安全。 |
lan | 容器内所有网络接口(0.0.0.0) | 配合 Docker 端口映射,允许局域网访问。 |
auto | 自动检测 | 通常不推荐,行为可能不明确。 |
tailnet | 仅 Tailscale 网络 | 用于 Tailscale 等虚拟组网环境。 |
custom | 自定义 IP 地址 | 高级用户指定特定 IP。 |
4.2 配置反向代理(生产环境推荐)
如果你希望在公网安全地访问 openclaw,或者想使用域名和 HTTPS,那么配置一个反向代理(如 Nginx、Caddy)是最佳实践。
为什么需要反向代理?
- 安全:Nginx/Caddy 可以处理 SSL/TLS 终止,为你的服务提供 HTTPS 加密。
- 便捷:可以使用域名访问,而非 IP 和端口。
- 负载均衡与缓存:为未来扩展预留可能性。
- 统一入口:如果你有多个服务,可以通过不同路径(如
example.com/openclaw)或子域名(如claw.yourdomain.com)来统一暴露。
使用 Nginx 的基本配置示例:假设你的 openclaw 容器运行在宿主机本地 18789 端口,你想通过https://claw.yourdomain.com访问。
- 在宿主机上安装 Nginx。
- 创建一个新的 Nginx 配置文件,例如
/etc/nginx/sites-available/openclaw:server { listen 80; server_name claw.yourdomain.com; # 替换为你的域名 # 强制重定向到 HTTPS(可选但推荐) return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name claw.yourdomain.com; # 替换为你的域名 # SSL 证书路径(通过 Certbot 或其他方式获取) ssl_certificate /etc/letsencrypt/live/claw.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/claw.yourdomain.com/privkey.pem; # 其他 SSL 优化配置... location / { proxy_pass http://127.0.0.1:18789; # 指向本地 openclaw 服务 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; # 以下两行对于 WebSocket 连接很重要(如果 openclaw Web 界面用到) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } - 创建软链接启用该配置,并测试、重载 Nginx:
sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置语法 sudo systemctl reload nginx # 重载配置 - 确保你的
docker-compose.yml中端口映射仍然是- "127.0.0.1:18789:18789"(只本地监听),这样只有 Nginx 能访问它,更安全。 - 别忘了在域名 DNS 管理中将
claw.yourdomain.com解析到你的服务器公网 IP。
4.3 数据备份与迁移
由于我们将数据卷挂载到了宿主机,备份变得非常简单。你只需要定期备份宿主机上的这两个目录:
~/ai-workspace:工作空间文件。~/.openclaw:核心配置、缓存和凭证。
备份示例:
# 创建一个备份压缩包 tar -czf openclaw-backup-$(date +%Y%m%d).tar.gz ~/ai-workspace ~/.openclaw # 你可以将这个 tar.gz 文件转移到其他安全的地方迁移到新服务器:
- 在新服务器上安装 Docker 和 Docker Compose。
- 将备份的
tar.gz文件传到新服务器,并解压到对应用户的 home 目录下。 - 将修改好的
docker-compose.yml文件也复制过去。 - 在新服务器上运行
docker-compose up -d。 只要挂载的宿主机路径一致,openclaw 就会读取原有的所有数据和配置,实现无缝迁移。
4.4 常见问题与排查实录
即使按照步骤操作,也可能会遇到问题。这里记录了几个我遇到过的典型情况及其解决方法。
问题一:执行docker-compose up时,拉取镜像失败或超时。
- 现象:长时间卡在
Pulling image...或报错net/http: TLS handshake timeout。 - 原因:网络连接
ghcr.io不稳定,尤其是国内网络环境。 - 解决:
- 配置 Docker 镜像加速器,如前文所述。
- 如果加速器对
ghcr.io无效,可以尝试通过第三方工具或换用其他网络环境拉取。 - 检查宿主机的 DNS 设置,可以尝试修改
/etc/docker/daemon.json,增加"dns": ["8.8.8.8", "114.114.114.114"]然后重启 Docker。
问题二:成功启动后,访问http://127.0.0.1:18789无法连接。
- 现象:浏览器显示“无法连接”或“连接被拒绝”。
- 排查步骤:
- 检查容器状态:
docker-compose ps确认openclaw-bot容器的状态是Up。 - 查看容器日志:
docker-compose logs -f openclaw查看是否有启动错误。常见错误包括:配置文件格式错误、依赖的服务连接失败等。 - 检查端口映射:
docker port openclaw-bot 18789查看容器端口 18789 实际映射到了宿主机的哪个地址和端口。确认是否是0.0.0.0:18789或127.0.0.1:18789。 - 进入容器内部测试:
如果容器内能访问,说明服务本身是好的,问题出在 Docker 端口映射或宿主机防火墙。如果容器内也不能访问,说明 openclaw 进程可能没有正常启动,需要仔细查看日志。docker exec -it openclaw-bot bash curl http://localhost:18789
- 检查容器状态:
问题三:Onboarding 过程中,输入 API Key 或 Token 后测试失败。
- 现象:在配置模型或渠道时,提示“Authentication failed”或“Could not connect”。
- 原因:
- Key/Token 错误:复制粘贴时可能多了空格或换行。
- 网络问题:容器无法访问对应的 API 端点(如
api.openai.com)。特别是如果宿主机在特殊网络环境下。 - 账户问题:API Key 余额不足、被禁用,或 Token 未正确配置 Bot 权限。
- 解决:
- 仔细检查并重新输入 Key/Token,可以在文本编辑器里粘贴查看是否有不可见字符。
- 进入容器测试网络连通性:
如果无法连通,可能需要为 Docker 容器配置代理(如果宿主机使用代理),或者检查宿主机的防火墙/安全组规则是否放行了出站连接。docker exec -it openclaw-bot bash # 测试 OpenAI curl -v https://api.openai.com/v1/models # 测试 Telegram Bot API curl -v https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getMe - 登录对应的云服务平台或 Bot 管理后台,确认 Key/Token 有效且具有所需权限。
问题四:AI 助手回复缓慢或经常超时。
- 现象:发送消息后很久才有回复,或直接超时。
- 原因:
- 模型 API 延迟:使用的云端大模型(如 GPT-4)本身响应慢或当前负载高。
- 网络延迟:到 API 服务器的网络不稳定。
- 容器资源不足:如果使用了本地模型(如通过 Ollama),可能是 CPU/内存不够。
- 解决:
- 尝试换用响应更快的模型(如 GPT-3.5-Turbo)。
- 在 openclaw 的 Web 界面或配置中,调整 API 调用的超时时间。
- 如果使用本地模型,确保为 Docker 容器分配了足够的资源。可以在
docker-compose.yml中设置资源限制:
注意:services: openclaw: # ... 其他配置 deploy: resources: limits: cpus: '2.0' memory: 4Gdeploy部分通常用于docker stack,在普通docker-compose中,可以使用cpus和mem_limit等字段,具体取决于版本。
问题五:如何更新 openclaw 到新版本?start-openclaw项目会更新其 Docker 镜像。更新步骤如下:
# 1. 拉取最新的镜像 docker-compose pull # 2. 停止并重新启动容器(使用新镜像) docker-compose down docker-compose up -d # 3. 清理旧的镜像以节省空间 docker image prune由于配置和数据都通过卷挂载在宿主机,更新镜像不会影响你的设置和聊天记录。
部署和运维这样一个 AI 助手服务,就像打理一个数字花园。初期搭建需要一些耐心,但一旦稳定运行,它就能持续为你提供价值。我的体会是,花时间理解 Docker 和数据卷的概念,以及 openclaw 的配置结构,远比死记硬背命令更有用。当遇到问题时,学会查看日志(docker-compose logs)和进入容器排查(docker exec -it),是独立解决问题的关键能力。最后,对于生产环境,安全永远是第一位的,务必通过反向代理和防火墙来保护你的服务。