前言

OpenClaw 是一个开源的 AI 助手框架,支持多渠道接入(Telegram、飞书、Discord 等)。本文将介绍如何在 Docker 中部署 OpenClaw,并配置 GitHub 自动备份记忆文件,实现数据的持久化存储。

为什么需要持久化记忆?

AI 助手每次会话都是”无状态”的,重启后会丢失之前的对话上下文。通过 Git 自动备份,可以:

  • ✅ 保存长期记忆(用户偏好、项目上下文、重要决策)
  • ✅ 跨会话恢复上下文
  • ✅ 版本控制,可追溯历史变更
  • ✅ 多设备/多实例共享记忆

环境准备

前置条件

  • Docker 和 Docker Compose
  • GitHub 账号
  • SSH 密钥(用于 Git 推送)

创建 GitHub 仓库

1
2
3
# 在 GitHub 创建一个私有仓库,例如:openClawRemember
# 克隆到本地
git clone git@github.com:your-username/openClawRemember.git

Docker 部署 OpenClaw

1. 目录结构

1
2
3
4
openclaw-docker/
├── docker-compose.yml
├── .env
└── workspace/ # 挂载到容器的数据目录

2. docker-compose.yml 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '3.8'

services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: unless-stopped
volumes:
# 挂载工作目录(包含记忆文件)
- ./workspace:/home/node/.openclaw/workspace
# 挂载 SSH 密钥(用于 Git 推送)
- ~/.ssh:/home/node/.ssh:ro
environment:
- OPENCLAW_CONFIG=/home/node/.openclaw/workspace/config.json
- TZ=Asia/Shanghai
network_mode: host

3. 配置 SSH 密钥

1
2
3
4
5
6
7
8
9
# 生成 SSH 密钥(如果已有可跳过)
ssh-keygen -t ed25519 -C "openclaw-backup"

# 将公钥添加到 GitHub
cat ~/.ssh/id_ed25519.pub
# 复制输出,在 GitHub Settings → SSH Keys 中添加

# 测试连接
ssh -T git@github.com

配置自动备份

1. 初始化 Git 仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cd /path/to/workspace

# 初始化 Git
git init
git remote add origin git@github.com:your-username/openClawRemember.git

# 创建 .gitignore
cat > .gitignore << EOF
# 敏感信息
*.key
*.secret
config.json

# 临时文件
*.log
tmp/
EOF

# 首次提交
git add .
git commit -m "Initial commit: OpenClaw workspace"
git push -u origin master

2. 自动备份脚本

创建 backup.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
# OpenClaw Workspace 自动备份脚本

WORKSPACE_DIR="/home/node/.openclaw/workspace"
LOG_FILE="/tmp/openclaw-backup.log"

cd "$WORKSPACE_DIR" || exit 1

# 检查是否有变化
if git diff --quiet && git diff --cached --quiet; then
echo "$(date): No changes to backup" >> "$LOG_FILE"
exit 0
fi

# 添加所有变化
git add -A

# 提交
git commit -m "Auto-backup: $(date '+%Y-%m-%d %H:%M')"

# 推送到 GitHub
if git push origin master 2>/dev/null; then
echo "$(date): Backup completed and pushed" >> "$LOG_FILE"
else
echo "$(date): Backup committed, push failed (auth issue?)" >> "$LOG_FILE"
fi
1
2
# 添加执行权限
chmod +x backup.sh

3. 配置定时任务

在宿主机上配置 cron:

1
2
3
4
crontab -e

# 每 2 小时执行一次备份
0 */2 * * * /path/to/workspace/backup.sh

或者在 Docker 内配置(需要安装 cron):

1
2
3
4
5
6
7
8
9
10
11
# 进入容器
docker exec -it openclaw bash

# 安装 cron
apk add --no-cache cronie

# 配置定时任务
echo "0 */2 * * * /home/node/.openclaw/workspace/backup.sh" | crontab -

# 启动 cron
crond -f &

记忆文件说明

OpenClaw 的记忆文件位于 workspace/ 目录:

1
2
3
4
5
6
7
8
9
10
workspace/
├── MEMORY.md # 长期记忆(用户信息、重要决策)
├── USER.md # 用户偏好和上下文
├── SOUL.md # AI 人设和行为规范
├── AGENTS.md # 工作区使用指南
├── TOOLS.md # 本地工具配置
├── HEARTBEAT.md # 心跳任务配置
└── memory/
├── 2026-03-13.md # 每日记忆(按日期归档)
└── ...

MEMORY.md 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# MEMORY.md - Long-term Memory

_Last updated: 2026-03-13_

## 👤 About the User

- **职业**:程序员
- **所在地**:深圳
- **偏好**:时间自由、SaaS 模式

## 📅 Key Decisions

### 2026-03-13
- ✅ 配置了 Docker 部署
- ✅ 配置了 GitHub 自动备份
- ✅ 设置了每 2 小时同步一次

## 📝 Todo

- [ ] 测试自动备份是否正常工作
- [ ] 配置多渠道接入

验证备份

手动触发备份

1
2
3
4
5
6
7
8
# 进入容器
docker exec -it openclaw bash

# 手动运行备份脚本
/home/node/.openclaw/workspace/backup.sh

# 查看日志
cat /tmp/openclaw-backup.log

检查 GitHub 仓库

1
2
3
4
5
# 查看提交历史
git log --oneline

# 查看远程状态
git status

故障排查

1. Git 推送失败

1
2
3
4
5
6
7
8
9
10
# 检查 SSH 连接
ssh -T git@github.com

# 检查密钥权限
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

# 检查 Git 配置
git config --global user.email "your-email@example.com"
git config --global user.name "Your Name"

2. 容器重启后记忆丢失

确保 volume 挂载正确:

1
2
3
4
5
# 检查挂载
docker inspect openclaw | grep -A 10 Mounts

# 确认文件存在
ls -la /path/to/workspace/

3. 备份脚本不执行

1
2
3
4
5
6
7
8
# 检查 cron 状态
service cron status

# 查看 cron 日志
grep CRON /var/log/syslog

# 手动测试脚本
bash /path/to/workspace/backup.sh

最佳实践

1. 敏感信息管理

  • ❌ 不要将 config.json、API 密钥提交到 Git
  • ✅ 使用环境变量或本地配置文件
  • ✅ 在 .gitignore 中排除敏感文件

2. 备份频率

  • 高频变更:每小时备份
  • 一般使用:每 2-4 小时备份
  • 低频使用:每天备份一次

3. 记忆维护

  • 定期清理过期的每日记忆文件
  • 将重要信息从 memory/YYYY-MM-DD.md 迁移到 MEMORY.md
  • 保持 MEMORY.md 简洁,只保留关键上下文

总结

通过 Docker 部署 + GitHub 自动备份,我们实现了:

  1. ✅ OpenClaw 的容器化部署,易于管理和迁移
  2. ✅ 记忆文件自动同步到 GitHub,防止数据丢失
  3. ✅ 版本控制,可追溯历史变更
  4. ✅ 支持多实例共享同一份记忆

接下来你可以:

  • 配置多渠道接入(Telegram、飞书等)
  • 自定义 AI 助手的人设和行为
  • 扩展自动备份功能(如备份到多个仓库)

参考链接