OpenClaw 从 0 部署到 Agent 自动化的实战笔记

7次阅读
没有评论

共计 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 网页信息采集

适合流程:

  1. Agent 接收目标网址
  2. OpenClaw 打开页面
  3. 抽取标题、正文、链接
  4. 返回结构化数据
  5. Agent 汇总摘要并输出

示例输入:

{"goal": "抓取 https://example.com 首页标题与前 5 个链接"}

13.2 表单自动填写

适合流程:

  1. Agent 判断表单字段
  2. OpenClaw 执行页面交互
  3. 返回每一步执行状态
  4. 失败时自动重试或回滚

13.3 批量任务执行

适合流程:

  1. Agent 生成任务列表
  2. OpenClaw 并发执行
  3. 汇总结果写入数据库或文件
  4. 输出最终报告

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/.env
  • data/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. 推荐的上线顺序

建议按这个顺序推进,而不是一开始就追求全功能:

  1. 先把 OpenClaw 服务单独跑通
  2. 再完成数据库、缓存、日志配置
  3. 再做单任务执行验证
  4. 再接入 Agent
  5. 再增加重试、监控、告警
  6. 最后做并发、权限、隔离与成本优化

这个顺序能有效避免“所有模块都看起来有问题”的混乱状态。


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. 建议

如果你准备把这份笔记真正用于项目,请至少做两件事:

  1. 把仓库地址、接口路径、环境变量名替换成你当前 OpenClaw 版本的真实值
  2. 把 Agent 的调用层单独封装成模块,避免以后难以维护

正文完
 0
一诺
版权声明:本站原创文章,由 一诺 于2026-03-05发表,共计8486字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码