共计 8486 个字符,预计需要花费 22 分钟才能阅读完成。
1. 目标
- 从零搭建 OpenClaw 环境
- 把 OpenClaw 接入到自动化 Agent 工作流中的工程
- 一份可复制、可改造、可落地的部署模板
2. 整体架构速览
┌────────────────────┐
│ User / Operator │
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ Agent Layer │ ← LangChain / AutoGen / 自研 Agent
└─────────┬──────────┘
│ API / Tool Call
▼
┌────────────────────┐
│ OpenClaw │ ← 任务执行 / 工具调度 / 自动化编排
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ Runtime / Services │ ← Docker / Python / DB / Queue / Browser
└────────────────────┘
核心理解很简单:
- OpenClaw 负责执行能力
- Agent 负责理解目标、规划步骤、发起调用
- 基础设施负责稳定运行与可观测性
3. 环境准备
3.1 推荐配置
| 项目 | 最低建议 | 推荐 |
|---|---|---|
| CPU | 2 Core | 4 Core+ |
| 内存 | 4 GB | 8 GB+ |
| 磁盘 | 10 GB | 30 GB+ |
| Python | 3.10+ | 3.11 |
| Docker | 24+ | 最新稳定版 |
3.2 系统依赖
建议准备以下工具:
python3 --version
git --version
docker --version
docker compose version
curl --version
如未安装,可先完成基础依赖:
# Ubuntu / Debian
sudo apt update
sudo apt install -y git curl build-essential python3 python3-pip python3-venv
安装 Docker:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
4. 项目目录规划
建议从一开始就把目录整理好,后面排障和迁移会轻松很多。
openclaw-workspace/
├── app/
│ └── openclaw/
├── config/
│ ├── .env
│ ├── agent.yaml
│ └── logging.yaml
├── data/
│ ├── db/
│ ├── cache/
│ └── runs/
├── scripts/
│ ├── init.sh
│ ├── healthcheck.sh
│ └── backup.sh
├── docker-compose.yml
└── README.md
初始化目录:
mkdir -p openclaw-workspace/{app,config,data/{db,cache,runs},scripts}
cd openclaw-workspace
5. 获取 OpenClaw 代码
如果你已有官方仓库地址,可直接替换下面的示例仓库链接。
cd app
git clone <YOUR_OPENCLOW_REPO_URL> openclaw
cd openclaw
切换到稳定分支:
git checkout main
git pull origin main
如果需要 Python 虚拟环境:
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip setuptools wheel
pip install -r requirements.txt
6. 配置环境变量
在 config/.env 中维护环境变量,不要把敏感信息直接写入代码。
# 基础配置
APP_ENV=production
APP_PORT=8080
LOG_LEVEL=INFO
# 数据库
DB_HOST=postgres
DB_PORT=5432
DB_NAME=openclaw
DB_USER=openclaw
DB_PASSWORD=change_me
# 缓存 / 队列
REDIS_HOST=redis
REDIS_PORT=6379
# LLM / Agent
OPENAI_API_KEY=your_api_key_here
MODEL_NAME=gpt-4.1
AGENT_MAX_STEPS=20
AGENT_TIMEOUT=300
# Browser / Sandbox
BROWSER_HEADLESS=true
WORKSPACE_DIR=/workspace/data/runs
加载变量:
set -a
source config/.env
set +a
7. 使用 Docker Compose 部署
一个简洁实用的 docker-compose.yml 示例:
version: "3.9"
services:
openclaw:
build: ./app/openclaw
container_name: openclaw-app
env_file:
- ./config/.env
ports:
- "8080:8080"
volumes:
- ./data:/workspace/data
depends_on:
- postgres
- redis
restart: unless-stopped
postgres:
image: postgres:15
container_name: openclaw-postgres
environment:
POSTGRES_DB: openclaw
POSTGRES_USER: openclaw
POSTGRES_PASSWORD: change_me
volumes:
- ./data/db:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: unless-stopped
redis:
image: redis:7
container_name: openclaw-redis
ports:
- "6379:6379"
restart: unless-stopped
启动服务:
docker compose up -d --build
查看状态:
docker compose ps
查看日志:
docker compose logs -f openclaw
8. 首次启动检查清单
确认以下项目全部正常:
- 容器均为
Up - OpenClaw 端口可访问
- 数据库连接成功
- Redis 连接成功
- 环境变量正确注入
- 日志中无连续报错
健康检查脚本 scripts/healthcheck.sh:
#!/usr/bin/env bash
set -e
echo "[1/3] Check containers"
docker compose ps
echo "[2/3] Check app health"
curl -f http://127.0.0.1:8080/health || exit 1
echo "[3/3] Check logs"
docker compose logs --tail=50 openclaw
echo "All checks passed."
添加执行权限:
chmod +x scripts/healthcheck.sh
./scripts/healthcheck.sh
9. 本地开发模式运行
如果你不想直接用 Docker 调试,也可以本地跑应用。
cd app/openclaw
source .venv/bin/activate
export $(grep -v '^#' ../../config/.env | xargs)
python main.py
若项目使用 FastAPI / Uvicorn:
uvicorn main:app --host 0.0.0.0 --port 8080 --reload
10. OpenClaw 基础接口验证
10.1 健康检查
curl http://127.0.0.1:8080/health
示例返回:
{
"status": "ok",
"service": "openclaw"
}
10.2 执行测试任务
curl -X POST http://127.0.0.1:8080/api/tasks \
-H "Content-Type: application/json" \
-d '{"name":"demo-task","input": {"action":"ping"}
}'
10.3 查询任务结果
curl http://127.0.0.1:8080/api/tasks/demo-task
11. 接入 Agent 自动化
这一部分是实战重点。
Agent 的职责通常包括:
- 接收自然语言目标
- 拆解为步骤
- 调用 OpenClaw 提供的执行接口
- 读取执行结果
- 根据结果继续迭代或结束任务
11.1 最小可用流程
用户需求
↓
Agent 解析任务
↓
构造 OpenClaw 请求
↓
OpenClaw 执行任务
↓
返回状态 / 结果 / 错误
↓
Agent 判断下一步
11.2 Python 示例:Agent 调 OpenClaw
import os
import time
import requests
BASE_URL = os.getenv("OPENCLOW_BASE_URL", "http://127.0.0.1:8080")
def submit_task(goal: str) -> dict:
payload = {
"name": "agent-demo",
"input": {"goal": goal}
}
resp = requests.post(f"{BASE_URL}/api/tasks", json=payload, timeout=30)
resp.raise_for_status()
return resp.json()
def get_task(task_id: str) -> dict:
resp = requests.get(f"{BASE_URL}/api/tasks/{task_id}", timeout=30)
resp.raise_for_status()
return resp.json()
def run_agent_flow(goal: str):
task = submit_task(goal)
task_id = task.get("id") or task.get("name")
print(f"Task submitted: {task_id}")
for _ in range(30):
result = get_task(task_id)
status = result.get("status")
print("status:", status)
if status in {"success", "failed", "done"}:
return result
time.sleep(2)
raise TimeoutError("Task polling timeout")
if __name__ == "__main__":
final_result = run_agent_flow("读取指定网页标题并返回摘要")
print(final_result)
11.3 Agent 工具封装建议
把 OpenClaw 抽象成一个 Tool,而不是把 HTTP 请求散落到业务代码里。
from dataclasses import dataclass
import requests
@dataclass
class OpenClawTool:
base_url: str
timeout: int = 30
def create_task(self, name: str, input_data: dict) -> dict:
r = requests.post(f"{self.base_url}/api/tasks",
json={"name": name, "input": input_data},
timeout=self.timeout,
)
r.raise_for_status()
return r.json()
def get_task(self, task_id: str) -> dict:
r = requests.get(f"{self.base_url}/api/tasks/{task_id}",
timeout=self.timeout,
)
r.raise_for_status()
return r.json()
这样做的好处:
- 便于复用
- 便于测试
- 便于统一鉴权、重试、日志记录
- 便于后续替换成 SDK
12. 与 LangChain 集成示例
from langchain.tools import StructuredTool
from pydantic import BaseModel, Field
import requests
class OpenClawInput(BaseModel):
goal: str = Field(description="需要交给 OpenClaw 执行的任务目标")
def call_openclaw(goal: str) -> str:
resp = requests.post(
"http://127.0.0.1:8080/api/tasks",
json={
"name": "langchain-task",
"input": {"goal": goal}
},
timeout=30,
)
resp.raise_for_status()
return resp.text
openclaw_tool = StructuredTool.from_function(
func=call_openclaw,
name="openclaw_executor",
description="调用 OpenClaw 执行自动化任务",
args_schema=OpenClawInput,
)
在 Agent 配置中,把它作为可调用工具注册即可。
13. 自动化场景模板
13.1 网页信息采集
适合流程:
- Agent 接收目标网址
- OpenClaw 打开页面
- 抽取标题、正文、链接
- 返回结构化数据
- Agent 汇总摘要并输出
示例输入:
{"goal": "抓取 https://example.com 首页标题与前 5 个链接"}
13.2 表单自动填写
适合流程:
- Agent 判断表单字段
- OpenClaw 执行页面交互
- 返回每一步执行状态
- 失败时自动重试或回滚
13.3 批量任务执行
适合流程:
- Agent 生成任务列表
- OpenClaw 并发执行
- 汇总结果写入数据库或文件
- 输出最终报告
14. 日志、监控与排障
14.1 日志分层建议
app.log:应用运行日志task.log:任务执行日志agent.log:Agent 决策日志error.log:异常汇总日志
14.2 Python 日志配置示例
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s | %(levelname)s | %(name)s | %(message)s"
)
logger = logging.getLogger("openclaw")
logger.info("service started")
14.3 Docker 日志查看
docker compose logs -f --tail=100 openclaw
14.4 常见问题排查表
| 问题 | 常见原因 | 处理方式 |
|---|---|---|
| 服务起不来 | .env 配置缺失 |
补全环境变量并重启 |
| 接口 500 | 数据库或 Redis 连接失败 | 检查容器状态与连接串 |
| Agent 超时 | 任务轮询太短 / 执行过慢 | 增大超时时间与重试次数 |
| 浏览器任务失败 | 缺少依赖或无头模式异常 | 检查容器镜像与 browser 配置 |
| 数据丢失 | 未挂载持久化目录 | 配置 volume 持久化 |
15. 生产部署建议
15.1 反向代理
建议在 OpenClaw 前面加 Nginx 或 Traefik。
Nginx 示例:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
15.2 systemd 守护(非 Docker 模式)
[Unit]
Description=OpenClaw Service
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/opt/openclaw
ExecStart=/opt/openclaw/.venv/bin/python main.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
15.3 备份建议
至少备份这些内容:
config/.envdata/db/data/runs/- 自定义 Agent 配置文件
备份脚本示例:
#!/usr/bin/env bash
set -e
BACKUP_DIR="./backup/$(date +%F_%H-%M-%S)"
mkdir -p "$BACKUP_DIR"
cp -r config "$BACKUP_DIR/"
cp -r data "$BACKUP_DIR/"
echo "Backup completed: $BACKUP_DIR"
16. 推荐的上线顺序
建议按这个顺序推进,而不是一开始就追求全功能:
- 先把 OpenClaw 服务单独跑通
- 再完成数据库、缓存、日志配置
- 再做单任务执行验证
- 再接入 Agent
- 再增加重试、监控、告警
- 最后做并发、权限、隔离与成本优化
这个顺序能有效避免“所有模块都看起来有问题”的混乱状态。
17. 一套可直接照抄的部署流程
# 1. 创建工作目录
mkdir -p openclaw-workspace/{app,config,data/{db,cache,runs},scripts}
cd openclaw-workspace
# 2. 拉代码
cd app
git clone <YOUR_OPENCLOW_REPO_URL> openclaw
cd ..
# 3. 写环境变量
cat > config/.env <<'EOF'
APP_ENV=production
APP_PORT=8080
LOG_LEVEL=INFO
DB_HOST=postgres
DB_PORT=5432
DB_NAME=openclaw
DB_USER=openclaw
DB_PASSWORD=change_me
REDIS_HOST=redis
REDIS_PORT=6379
OPENAI_API_KEY=your_api_key_here
MODEL_NAME=gpt-4.1
AGENT_MAX_STEPS=20
AGENT_TIMEOUT=300
EOF
# 4. 写 compose 文件
cat > docker-compose.yml <<'EOF'
version: "3.9"
services:
openclaw:
build: ./app/openclaw
env_file:
- ./config/.env
ports:
- "8080:8080"
volumes:
- ./data:/workspace/data
depends_on:
- postgres
- redis
postgres:
image: postgres:15
environment:
POSTGRES_DB: openclaw
POSTGRES_USER: openclaw
POSTGRES_PASSWORD: change_me
volumes:
- ./data/db:/var/lib/postgresql/data
redis:
image: redis:7
EOF
# 5. 启动
docker compose up -d --build
# 6. 验证
curl http://127.0.0.1:8080/health
18. 实战经验总结
真正落地时,最常见的问题通常不是“代码不会写”,而是这几类:
- 配置散乱,改一次坏一片
- 日志不足,出错后看不到根因
- Agent 与执行层职责混乱
- 没做持久化,重启后状态丢失
- 没有健康检查与超时控制
因此最实用的原则是:
先让系统稳定可见,再让功能逐步变强。
也就是:
- 先跑通
- 再稳定
- 再自动化
- 最后优化体验和成本
19. 后续优化方向
你可以继续扩展这些能力:
- 接入消息队列实现异步任务消费
- 增加 Web 管理面板
- 增加任务审计与权限控制
- 接入 Prometheus + Grafana
- 增加任务模板中心
- 支持多 Agent 协作
- 支持沙箱隔离执行
20. 附录:常用命令速查
容器相关
docker compose up -d --build
docker compose down
docker compose restart
docker compose ps
docker compose logs -f openclaw
Python 环境
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
服务验证
curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/api/tasks/demo-task
21. 建议
如果你准备把这份笔记真正用于项目,请至少做两件事:
- 把仓库地址、接口路径、环境变量名替换成你当前 OpenClaw 版本的真实值
- 把 Agent 的调用层单独封装成模块,避免以后难以维护

