1. 引言

OpenClaw 是一个开源的多智能体编排框架,用于构建、调度和管理多个 AI Agent 的协作任务。Northflank 是一个现代化的 PaaS 平台,支持容器化应用的一键部署、自动扩缩容和内置 CI/CD。本文将详细介绍如何将 OpenClaw 部署到 Northflank 上,涵盖项目配置、容器镜像构建、环境变量管理、数据库连接以及生产环境的最佳实践。

2. 前置准备

在开始部署之前,需要准备以下环境和工具:

  • 一个 Northflank 账号(支持免费试用额度)
  • 一个 GitHub 或 GitLab 仓库,用于存放 OpenClaw 项目代码
  • 本地安装 Docker 和 Git
  • Node.js 18+ 或 Python 3.10+(取决于 OpenClaw 的运行方式)

3. 创建 OpenClaw 项目

首先,在本地创建一个 OpenClaw 项目。这里以 Node.js 版本为例,演示如何初始化项目结构:

# 创建项目目录
mkdir openclaw-northflank-demo
cd openclaw-northflank-demo
初始化 npm 项目
npm init -y
安装 OpenClaw 核心依赖
npm install @openclaw/core @openclaw/agents
安装 Northflank 部署所需的工具
npm install --save-dev @northflank/cli

接下来,创建一个简单的 OpenClaw 配置文件 openclaw.config.js,用于定义 Agent 的调度策略:

module.exports = {
  name: "demo-cluster",
  version: "1.0.0",
  agents: [
    {
      id: "research-agent",
      model: "gpt-4o",
      systemPrompt: "你是一个研究助手,负责收集和整理技术资料。",
      maxConcurrency: 3,
      timeout: 60000
    },
    {
      id: "writer-agent",
      model: "gpt-4o",
      systemPrompt: "你是一个写作助手,负责将研究结果整理成结构化文档。",
      maxConcurrency: 2,
      timeout: 90000
    }
  ],
  scheduler: {
    mode: "round-robin",
    retryOnFailure: true,
    maxRetries: 3
  }
};

4. 编写应用入口文件

创建 server.js 作为应用的启动入口,它负责初始化 OpenClaw 运行时并暴露健康检查接口:

const express = require("express");
const { OpenClawRuntime } = require("@openclaw/core");
const app = express();
const port = process.env.PORT || 3000;
// 初始化 OpenClaw 运行时
const runtime = new OpenClawRuntime({
configPath: "./openclaw.config.js",
apiKey: process.env.OPENAI_API_KEY,
databaseUrl: process.env.DATABASE_URL
});
// 健康检查端点,供 Northflank 探活使用
app.get("/health", async (req, res) => {
try {
await runtime.ping();
res.status(200).json({ status: "ok" });
} catch (err) {
res.status(500).json({ status: "error", message: err.message });
}
});
// 启动 OpenClaw 运行时
runtime.start().then(() => {
app.listen(port, () => {
console.log(OpenClaw runtime listening on port ${port});
});
});

5. 编写 Dockerfile

Northflank 支持从 Dockerfile 构建镜像。创建一个多阶段构建的 Dockerfile,以减小最终镜像体积:

# 第一阶段:构建依赖
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
第二阶段:运行镜像
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
复制依赖和源码
COPY --from=builder /app/node_modules ./node_modules
COPY . .
创建非 root 用户以提升安全性
RUN addgroup -S openclaw && adduser -S openclaw -G openclaw
USER openclaw
EXPOSE 3000
CMD ["node", "server.js"]

6. 配置 Northflank 项目

将代码推送到 GitHub 仓库后,登录 Northflank 控制台,按照以下步骤创建项目:

  1. 点击 Create Project,输入项目名称(例如 openclaw-demo)。
  2. 在项目内点击 Add Service,选择 Web Service。
  3. 连接你的 GitHub 仓库,选择 openclaw-northflank-demo 分支。
  4. 构建方式选择 Dockerfile,Northflank 会自动检测根目录下的 Dockerfile。
  5. 设置服务端口为 3000,并配置健康检查路径为 /health。

7. 配置环境变量

在 Northflank 的 Environment Variables 面板中,添加以下变量:

变量名说明示例值
OPENAI_API_KEYOpenAI 或兼容 API 的密钥sk-xxxxxxxx
DATABASE_URLPostgreSQL 连接字符串postgres://user:pass@host:5432/db
PORT服务监听端口3000
LOG_LEVEL日志级别info

建议使用 Northflank 的 Secret 功能存储敏感信息,避免明文暴露在仓库中。

8. 配置 PostgreSQL 数据库

OpenClaw 需要持久化存储任务状态和 Agent 运行日志。在 Northflank 中创建一个 PostgreSQL 附加组件:

  1. 在项目页面点击 Add Component,选择 Database。
  2. 选择 PostgreSQL,指定版本(推荐 15+)。
  3. 创建完成后,在服务详情页点击 Link Component,将数据库关联到 OpenClaw 服务。
  4. Northflank 会自动注入 DATABASE_URL 环境变量。

初始化数据库表结构,可以在部署时通过启动命令执行迁移脚本:

# 在 package.json 中添加迁移脚本
"scripts": {
  "migrate": "node scripts/migrate.js",
  "start": "npm run migrate && node server.js"
}

9. 配置自动扩缩容

Northflank 支持基于 CPU 和内存使用率的自动扩缩容。在服务的 Scaling 面板中配置:

# northflank.yaml 示例配置
service:
  scaling:
    minInstances: 1
    maxInstances: 5
    targetCpuUtilization: 70
    targetMemoryUtilization: 80
    cooldownPeriod: 120

对于 OpenClaw 这类异步任务密集型应用,建议将 minInstances 设为 1,避免冷启动延迟;同时设置合理的 maxInstances 上限以控制成本。

10. 配置 CI/CD 流水线

Northflank 内置 CI/CD 功能,每次推送到主分支都会自动触发构建和部署。也可以使用 northflank.yml 文件自定义流水线:

version: "1.0"
stages:
  - name: build
    steps:
      - run: npm ci
      - run: npm run lint
      - run: npm test
  - name: deploy
    steps:
      - run: npx northflank deploy --service openclaw-demo

在仓库根目录创建该文件后,Northflank 会自动识别并执行流水线。

11. 日志与监控

部署完成后,可以通过 Northflank 的日志面板查看 OpenClaw 运行时的输出。建议在代码中接入结构化日志,便于检索:

const logger = require("pino")({
  level: process.env.LOG_LEVEL || "info",
  base: { service: "openclaw" }
});
// 在 OpenClaw 运行时中注入日志
runtime.on("agent:start", (agent) => {
logger.info({ agentId: agent.id }, "agent started");
});
runtime.on("agent:complete", (agent, result) => {
logger.info({ agentId: agent.id, duration: result.duration }, "agent completed");
});

12. 生产环境最佳实践

将 OpenClaw 部署到生产环境时,建议遵循以下实践:

  • 使用托管数据库:避免将数据存储在容器本地磁盘,使用 Northflank 的托管 PostgreSQL 保证数据持久化。
  • 配置资源限制:为服务设置合理的 CPU 和内存上限,防止单个 Agent 任务耗尽资源。
  • 启用 HTTPS:Northflank 默认提供 TLS 证书,确保所有 API 请求通过 HTTPS 传输。
  • 定期备份:在数据库组件中启用自动备份策略,建议每日备份并保留 7 天。
  • 监控告警:配置 CPU、内存和错误率的告警规则,及时发现问题。

13. 常见问题排查

以下是一些部署过程中常见的问题及解决方法:

问题可能原因解决方法
健康检查失败端口配置错误或运行时未启动检查 PORT 环境变量和 /health 路径
数据库连接超时数据库组件未正确关联确认服务已 Link 数据库组件,检查 DATABASE_URL
Agent 任务堆积并发数设置过低调高 maxConcurrency 或增加实例数
构建失败依赖安装失败或 Dockerfile 错误查看构建日志,确认 npm ci 和镜像阶段配置

14. 总结

本文详细介绍了在 Northflank 上部署 OpenClaw 的完整流程,包括项目初始化、Docker 镜像构建、环境变量配置、数据库连接、自动扩缩容和 CI/CD 流水线。通过 Northflank 的托管能力,可以快速将 OpenClaw 多智能体框架部署到生产环境,并享受自动扩缩容、日志监控和持续交付等便利。希望本文能帮助你顺利搭建自己的 AI Agent 编排平台。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐