OpenClaw 部署在 VPS 上之后,如果只是 `node index.js` 跑着,终端一关进程就没了,这显然不是生产环境该有的样子。systemd、PM2 和 Docker Compose 是三种常见方案,怎么选?直接说结论:追求系统级稳定用 systemd,Node.js 项目习惯用 PM2,多服务编排或需要隔离环境用 Docker Compose。下面分别拆开讲,附带实战配置和避坑点。

OpenClaw 常驻运行教程:三种方案实战对比
systemd 管理 OpenClaw:最稳的方案,适合单机部署
systemd 是 Linux 系统自带的服务管理工具,OpenClaw 用它托管后,开机自启、崩溃重启、日志管理全包了。适合那些只需要跑一个 OpenClaw 实例、不想额外装依赖的场景。
创建 systemd 服务文件
sudo vim /etc/systemd/system/openclaw.service
写入以下内容(路径根据实际情况改):
ini
[Unit]
Description=OpenClaw AI Agent Service
After=network.target
[Service]
Type=simple
User=youruser # 非 root 用户,安全第一
WorkingDirectory=/home/youruser/openclaw
ExecStart=/usr/bin/node /home/youruser/openclaw/index.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
启用并启动
sudo systemctl daemon-reload
sudo systemctl enable openclaw
sudo systemctl start openclaw
sudo systemctl status openclaw
日志查看
journalctl -u openclaw -f –no-pager
老鸟叮嘱:`Restart=always` 配合 `RestartSec=10` 能避免频繁重启导致的资源打满。OpenClaw 如果依赖外部 API(比如 OpenAI、Claude),记得在 `Environment` 里写全变量,或者用 `.env` 文件加载。
PM2 进程守护:Node.js 生态的标配,适合多实例或频繁更新
PM2 是 Node.js 进程管理利器,自带负载均衡、内存监控、一键重启。如果 OpenClaw 是 Node.js 写的,PM2 能省掉很多手动操作。
安装 PM2
npm install -g pm2
yarn global add pm2
启动 OpenClaw
cd /home/youruser/openclaw
pm2 start index.js –name openclaw
pm2 startup
pm2 save
常用命令
pm2 status # 查看所有进程状态
pm2 logs openclaw # 查看日志
pm2 restart openclaw # 重启
pm2 stop openclaw # 停止
配置文件方式(推荐)
在项目目录下创建 `ecosystem.config.js`:
javascript
module.exports = {
apps: [{
name: 'openclaw',
script: 'index.js',
instances: 1, # 单实例,多实例需确认 OpenClaw 是否支持集群
exec_mode: 'fork',
env: {
NODE_ENV: 'production',
},
max_memory_restart: '500M', # 内存超限自动重启
error_file: './logs/err.log',
out_file: './logs/out.log',
}]
};
然后 `pm2 start ecosystem.config.js`。
老鸟叮嘱:PM2 的 `max_memory_restart` 很重要,OpenClaw 如果处理大量 Agent 任务,内存可能飙升,设个上限能避免 OOM 把 VPS 搞死。另外 PM2 本身也是进程,如果系统重启后 PM2 没起来,检查 `pm2 startup` 生成的 systemd 单元是否正常。
Docker Compose 部署 OpenClaw:隔离性好,适合多服务编排
如果 OpenClaw 需要配合 n8n、Ollama、Open WebUI 等一起跑,Docker Compose 是最干净的方式。环境隔离、版本控制、一键启停,尤其适合 AI Agent 多组件协同的场景。
准备 docker-compose.yml
yaml
version: '3.8'
services:
openclaw:
image: your-openclaw-image:latest # 以官方仓库或当前版本为准,没有现成镜像就自己构建
container_name: openclaw
restart: unless-stopped
ports:
– "3000:3000" # 根据 OpenClaw 实际端口调整
environment:
– NODE_ENV=production
– OPENAI_API_KEY=${OPENAI_API_KEY} # 敏感信息用 .env
– CLAUDE_API_KEY=${CLAUDE_API_KEY}
volumes:
– ./config:/app/config
– ./logs:/app/logs
networks:
– ai_network
networks:
ai_network:
driver: bridge
创建 .env 文件
OPENAI_API_KEY=sk-xxxxxx
CLAUDE_API_KEY=sk-ant-xxxxxx
启动
docker-compose up -d
docker-compose logs -f openclaw
自己构建镜像(如果没有现成镜像)
写一个 `Dockerfile`:
dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install –production
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
然后 `docker-compose build` 再 `up -d`。
老鸟叮嘱:Docker 部署时端口映射别搞错,OpenClaw 默认端口是 3000 还是其他,看文档或 `config.js`。网络模式建议用 `bridge`,方便和同一 Compose 里的 Ollama、n8n 通信。API Key 一定写在 `.env` 里,别硬编码到 yml。
三种方案怎么选?直接对照表
| 场景 | 推荐方案 | 原因 |
|——|———-|——|
| 单机跑一个 OpenClaw,不想折腾 | systemd | 系统自带,零依赖,稳定 |
| 频繁更新代码,需要一键重启 | PM2 | 支持热重载,日志管理方便 |
| 同时跑 n8n、Ollama、Open WebUI 等 | Docker Compose | 环境隔离,编排简单 |
| 团队协作,需要版本控制环境 | Docker Compose | Dockerfile + yml 可 git 管理 |
| 对内存有严格限制的低配 VPS | systemd 或 PM2 | Docker 有额外开销,原生进程更省 |
老鸟叮嘱:OpenClaw 常驻运行常见坑
1.端口被占:启动前 `lsof -i :3000` 检查端口,别和 Nginx、其他 Agent 冲突。
2.日志不会看:先 `journalctl -u openclaw –since "5 min ago"` 或 `pm2 logs openclaw –lines 50`,别盲目重启。
3.环境变量没生效:systemd 用 `EnvironmentFile` 加载 `.env`,PM2 用 `env_file`,Docker Compose 用 `env_file` 或 `environment` 直接写。
4.内存不足:OpenClaw 如果调用大模型推理,内存会涨。systemd 加 `MemoryMax=500M`,PM2 设 `max_memory_restart: '400M'`,Docker 加 `mem_limit: 512m`。
5.API Key 泄露:日志里可能打印环境变量,检查代码里有没有 `console.log(process.env)`,生产环境关掉调试输出。
FAQ
Q:OpenClaw 能跑在 1 核 1G 的 VPS 上吗?
A:如果只是调用外部 API(如 OpenAI),不跑本地模型,1G 内存够用。但如果同时开多个 Agent 或跑 Ollama,建议 2G 以上。
Q:systemd 和 PM2 哪个更稳定?
A:systemd 更稳定,因为它不依赖 Node.js 生态,系统级管理。PM2 方便但本身也是 Node 进程,偶尔会挂。
Q:Docker 部署后 OpenClaw 访问不了怎么办?
A:先 `docker ps` 看容器是否运行,再 `docker logs openclaw` 看日志。常见原因:端口映射写错、防火墙没放行、OpenClaw 绑定了 127.0.0.1 没监听 0.0.0.0。
Q:PM2 开机自启失效怎么办?
A:`pm2 startup` 会生成一个 systemd 单元,检查 `systemctl status pm2-root` 或 `pm2-username`。如果没启动,手动 `systemctl enable pm2-username`。
Q:OpenClaw 日志太大怎么处理?
A:systemd 用 `journalctl –vacuum-size=100M` 限制日志大小。PM2 用 `pm2 install pm2-logrotate`。Docker 用 `–log-opt max-size=10m –log-opt max-file=3`。
Q:三种方案能混用吗?
A:不推荐。比如 systemd 管理 PM2,PM2 再跑 OpenClaw,多一层嵌套出问题难排查。选一种到底。
总结
OpenClaw 常驻运行的核心就三点:进程保活、日志管理、资源限制。systemd 适合原生 Linux 用户,PM2 适合 Node.js 开发者,Docker Compose 适合多服务场景。没有绝对的好坏,根据你 VPS 的配置、技术栈、其他服务来决定。配置完记得 `curl http://localhost:3000/health` 或类似接口确认服务正常,别光看进程状态。
—
**相关阅读:**
– [VPS 部署 AI 工具需要哪些基础?Linux、Docker、Nginx 和域名配置入门](https://www.zhujixuan.com/jishujiaocheng/9747.html)
– [Hermes Agent VPS 部署教程:Docker Compose 安装和初始化配置](https://www.zhujixuan.com/jishujiaocheng/9872.html)
– [Open WebUI VPS 部署教程:给 Ollama 配一个网页聊天界面](https://www.zhujixuan.com/jishujiaocheng/9855.html)
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9780.html 商家投稿邮箱:zhujixuanblog@qq.com
