每日备份 2026-06-10 12:57:13

This commit is contained in:
root-backup committed 2026-06-10 12:57:14 +08:00
1 parent fda2ccb8c2
commit 3d2e638c6a
244 files changed
+58890 -3

No files matched your search

+847
View File
@@ -0,0 +1,847 @@
# 青龙部署 MemOS 自托管版方案
> 版本: v1.0
> 创建日期: 2026-02-07
> 适用节点: 青龙 (1号机, 192.168.0.31)
> 目标: 为 OpenClaw 集成 MemOS 记忆系统
---
## 📋 目录
1. [概述](#概述)
2. [环境准备](#环境准备)
3. [数据库部署](#数据库部署)
4. [MemOS 安装](#memos-安装)
5. [配置集成](#配置集成)
6. [OpenClaw 插件](#openclaw-插件)
7. [验证测试](#验证测试)
8. [故障排查](#故障排查)
---
## 一、概述
### 1.1 目标
在青龙 (192.168.0.31) 上部署 MemOS 自托管版,为 OpenClaw 提供记忆能力。
### 1.2 架构
```
┌─────────────────────────────────────────────────────────────┐
│ 青龙 (192.168.0.31) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MemOS Server │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ │
│ │ │ Neo4j │ │ Qdrant │ │ FastAPI │ │ │
│ │ │ (图数据库)│ │(向量数据库)│ │ API 服务 │ │ │
│ │ └─────────┘ └─────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ OpenClaw Gateway │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ MemOS Cloud OpenClaw Plugin │ │ │
│ │ │ - 启动前召回上下文 │ │ │
│ │ │ - 结束后保存记忆 │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 现有服务 │ │
│ │ - MiniMax/DeepSeek (LLM) │ │
│ │ - nomic-embed-text (Embedding) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 1.3 资源需求
| 组件 | CPU | 内存 | 存储 | 说明 |
|------|-----|------|------|------|
| Neo4j | 1 核 | 2GB | 10GB | 图数据库 |
| Qdrant | 1 核 | 1GB | 5GB | 向量数据库 |
| MemOS | 1 核 | 1GB | 1GB | API 服务 |
| **总计** | **2 核** | **4GB** | **16GB** | 青龙可满足 |
---
## 二、环境准备
### 2.1 SSH 连接
```bash
# 从 2号机 连接青龙
sshpass -p '3efvVGY&' ssh root@192.168.0.31
# 或直接登录
ssh root@192.168.0.31
```
### 2.2 系统检查
```bash
# 1. 检查系统版本
cat /etc/os-release
# 2. 检查 Docker
docker --version
docker-compose --version
# 3. 检查内存
free -h
# 4. 检查磁盘
df -h
# 5. 检查 CPU
lscpu | grep "CPU(s)"
```
### 2.3 安装 Docker (如未安装)
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 添加当前用户到 docker 组 (免 sudo)
sudo usermod -aG docker $USER
```
### 2.4 创建目录结构
```bash
# 创建部署目录
sudo mkdir -p /opt/memos
sudo chown -R $USER:$USER /opt/memos
cd /opt/memos
# 创建数据目录
mkdir -p data/neo4j
mkdir -p data/qdrant
mkdir -p logs
# 创建配置目录
mkdir -p config
```
---
## 三、数据库部署
### 3.1 使用 Docker 部署
#### 3.1.1 创建 Docker Compose 配置
```bash
# 创建 docker-compose.yml
cat > /opt/memos/docker-compose.yml << 'EOF'
version: '3.8'
services:
# Neo4j 图数据库
neo4j:
image: neo4j:5.12
container_name: memos-neo4j
restart: unless-stopped
ports:
- "7474:7474"
- "7687:7687"
environment:
NEO4J_AUTH: neo4j/memos_password
NEO4J_PLUGINS: ["apoc", "graph-data-science"]
NEO4J_dbms_memory_heap_initial__size: 512m
NEO4J_dbms_memory_heap_max__size: 2g
NEO4J_dbms_tx__log__rotation_rotation__keep__number: 10
volumes:
- ./data/neo4j/data:/data
- ./data/neo4j/logs:/logs
- ./data/neo4j/import:/var/lib/neo4j/import
networks:
- memos-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:7474"]
interval: 30s
timeout: 10s
retries: 5
# Qdrant 向量数据库
qdrant:
image: qdrant/qdrant:v1.7.0
container_name: memos-qdrant
restart: unless-stopped
ports:
- "6333:6333"
- "6334:6334"
environment:
QDRANT__SERVICE__API_PORT: 6333
QDRANT__STORAGE__STORAGE_PATH: /qdrant/storage
volumes:
- ./data/qdrant:/qdrant/storage
networks:
- memos-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6333/dashboard"]
interval: 30s
timeout: 10s
retries: 5
networks:
memos-network:
driver: bridge
EOF
```
#### 3.1.2 启动数据库
```bash
cd /opt/memos
# 启动服务
docker compose up -d
# 查看启动状态
docker compose ps
# 查看日志
docker compose logs -f
```
#### 3.1.3 验证数据库
```bash
# 1. 检查 Neo4j
curl -u neo4j:memos_password http://localhost:7474
# 2. 检查 Qdrant
curl http://localhost:6333/dashboard
# 3. 检查健康状态
docker compose exec neo4j cypher-query "RETURN 1"
```
### 3.2 数据库连接信息
| 数据库 | 地址 | 端口 | 用户名 | 密码 |
|--------|------|------|--------|------|
| Neo4j | localhost | 7474/7687 | neo4j | memos_password |
| Qdrant | localhost | 6333 | - | - |
---
## 四、MemOS 安装
### 4.1 安装依赖
```bash
# 安装 Python 3.11+
sudo apt install -y python3.11 python3.11-venv python3-pip
# 创建虚拟环境
python3.11 -m venv /opt/memos/venv
source /opt/memos/venv/bin/activate
# 升级 pip
pip install --upgrade pip
# 安装 MemOS
cd /opt/memos
git clone https://github.com/MemTensor/MemOS.git
cd MemOS
pip install -e .
# 安装额外依赖
pip install pymemgraph # Neo4j driver
pip install fastapi uvicorn
```
### 4.2 环境变量配置
```bash
# 创建 .env 文件
cat > /opt/memos/.env << 'EOF'
# MemOS 配置
MEMOS_MODE=self_hosted
# Neo4j 配置
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=memos_password
# Qdrant 配置
QDRANT_URL=http://localhost:6333
# LLM 配置 (使用现有资源)
# 方案1: 使用 OpenAI
OPENAI_API_KEY=your_openai_api_key
# 方案2: 使用阿里百炼 (推荐)
DASHSCOPE_API_KEY=your_dashscope_api_key
# Embedding 配置 (使用现有资源)
# 方案1: 使用 OpenAI
OPENAI_EMBEDDING_API_KEY=your_openai_embedding_api_key
# 方案2: 使用 Voyage AI
VOYAGE_API_KEY=your_voyage_api_key
# 方案3: 使用本地 embedding (nomic-embed-text)
EMBEDDING_PROVIDER=ollama
EMBEDDING_BASE_URL=http://localhost:11434/v1
EMBEDDING_MODEL=nomic-embed-text:latest
# 日志配置
LOG_LEVEL=INFO
EOF
# 应用环境变量
source /opt/memos/.env
```
### 4.3 创建启动脚本
```bash
# 创建启动脚本
cat > /opt/memos/start.sh << 'EOF'
#!/bin/bash
# 激活虚拟环境
source /opt/memos/venv/bin/activate
source /opt/memos/.env
# 设置工作目录
cd /opt/memos/MemOS/src
# 启动 MemOS API 服务
echo "Starting MemOS API Server..."
uvicorn memos.api.server_api:app \
--host 0.0.0.0 \
--port 8001 \
--workers 4 \
--reload \
>> /opt/memos/logs/memos.log 2>&1 &
echo "MemOS started on http://localhost:8001"
echo "Dashboard: http://localhost:8001/docs"
EOF
chmod +x /opt/memos/start.sh
```
### 4.4 创建 systemd 服务
```bash
# 创建 systemd 服务文件
sudo cat > /etc/systemd/system/memos.service << 'EOF'
[Unit]
Description=MemOS Memory Operating System
After=network.target docker.service
Requires=docker.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/memos
ExecStart=/opt/memos/start.sh
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10
Environment="PATH=/opt/memos/venv/bin"
EnvironmentFile=/opt/memos/.env
# 日志
StandardOutput=append:/opt/memos/logs/memos-system.log
StandardError=append:/opt/memos/logs/memos-error.log
[Install]
WantedBy=multi-user.target
EOF
# 重新加载 systemd
sudo systemctl daemon-reload
# 启用服务
sudo systemctl enable memos
# 启动服务
sudo systemctl start memos
# 检查状态
sudo systemctl status memos
```
---
## 五、配置集成
### 5.1 配置本地 Embedding
如果使用本地 nomic-embed-text:
```bash
# 1. 确保 Ollama 运行
curl http://localhost:11434/api/version
# 2. 拉取 embedding 模型
ollama pull nomic-embed-text:latest
# 3. 验证模型
ollama list
```
### 5.2 配置 LLM
#### 方案1: 使用阿里百炼 (推荐)
```bash
# 在 .env 中配置
DASHSCOPE_API_KEY=your_api_key
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
# 可用模型:
# - qwen3-max
# - qwen3-plus
# - qwen-turbo
```
#### 方案2: 使用 OpenAI
```bash
# 在 .env 中配置
OPENAI_API_KEY=your_api_key
OPENAI_BASE_URL=https://api.openai.com/v1
# 可用模型:
# - gpt-4
# - gpt-4-turbo
# - gpt-3.5-turbo
```
---
## 六、OpenClaw 插件
### 6.1 安装 MemOS Cloud OpenClaw 插件
MemOS 官方提供 OpenClaw 插件,可以自动管理记忆:
```bash
# 1. 克隆插件仓库
cd /opt/memos
git clone https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin.git
cd MemOS-Cloud-OpenClaw-Plugin
# 2. 安装依赖
pip install -r requirements.txt
```
### 6.2 插件配置
```bash
# 创建配置
cat > /opt/memos/openclaw-plugin/config.yaml << 'EOF'
# MemOS OpenClaw Plugin 配置
# MemOS 连接配置
memos:
api_url: http://localhost:8001 # MemOS API 地址
api_key: "" # 自托管不需要 key,空字符串
# 用户配置
user:
default_id: "yh6788" # 默认用户 ID
mem_cube_id: "default" # 默认记忆立方体
# 行为配置
behavior:
# 启动时召回多少条记忆
recall_limit: 20
# 保存记忆的触发条件
save_triggers:
- "对话结束"
- "关键信息提取"
- "用户明确要求保存"
# 自动提取的主题
auto_extract_topics:
- "用户偏好"
- "工作内容"
- "学习进度"
- "项目状态"
# 日志配置
logging:
level: INFO
file: /opt/memos/logs/openclaw-plugin.log
EOF
```
### 6.3 插件工作流程
```
┌─────────────────────────────────────────────────────────────┐
│ MemOS OpenClaw Plugin │
├─────────────────────────────────────────────────────────────┤
│ │
│ OpenClaw 启动 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────┐ │
│ │ 1. ON_LAUNCH │ │
│ │ - 从 MemOS 召回上下文 │ │
│ │ - 加载用户偏好 │ │
│ │ - 加载会话历史 │ │
│ └─────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────┐ │
│ │ 2. ON_MESSAGE │ │
│ │ - 监控对话内容 │ │
│ │ - 提取关键信息 │ │
│ │ - 更新记忆 │ │
│ └─────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────┐ │
│ │ 3. ON_TERMINATE │ │
│ │ - 保存完整对话 │ │
│ │ - 更新用户画像 │ │
│ │ - 生成摘要 │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## 七、验证测试
### 7.1 检查服务状态
```bash
# 1. 检查 Docker 服务
docker compose ps
# 2. 检查 MemOS 进程
ps aux | grep uvicorn
# 3. 检查端口监听
netstat -tlnp | grep -E "7474|7687|6333|8001"
# 4. 检查 systemd 服务
systemctl status memos
```
### 7.2 API 测试
```bash
# 1. 测试 MemOS 健康检查
curl http://localhost:8001/health
# 2. 测试 API 文档
curl http://localhost:8001/docs
# 3. 添加测试记忆
curl -X POST http://localhost:8001/product/add \
-H "Content-Type: application/json" \
-d '{
"user_id": "test_user",
"mem_cube_id": "default",
"messages": [{"role": "user", "content": "I like programming with Python"}],
"async_mode": "sync"
}'
# 4. 搜索测试记忆
curl -X POST http://localhost:8001/product/search \
-H "Content-Type: application/json" \
-d '{
"query": "What do I like",
"user_id": "test_user",
"mem_cube_id": "default"
}'
```
### 7.3 OpenClaw 集成测试
```bash
# 1. 检查插件是否加载
cat /opt/memos/logs/openclaw-plugin.log
# 2. 测试插件与 MemOS 连接
python -c "
import requests
import json
# 测试连接
resp = requests.get('http://localhost:8001/health')
print(f'MemOS Status: {resp.status_code}')
# 测试添加记忆
data = {
'user_id': 'yh6788',
'mem_cube_id': 'default',
'messages': [{'role': 'user', 'content': 'Test memory from OpenClaw'}],
'async_mode': 'sync'
}
resp = requests.post('http://localhost:8001/product/add', json=data)
print(f'Add Memory: {resp.status_code}')
print(json.dumps(resp.json(), indent=2))
"
```
---
## 八、故障排查
### 8.1 常见问题
#### Q1: Neo4j 连接失败
```bash
# 检查 Neo4j 日志
docker logs memos-neo4j --tail 100
# 检查 Neo4j 是否就绪
curl -u neo4j:memos_password http://localhost:7474
# 重启 Neo4j
docker restart memos-neo4j
```
#### Q2: Qdrant 连接失败
```bash
# 检查 Qdrant 日志
docker logs memos-qdrant --tail 100
# 检查 Qdrant 健康
curl http://localhost:6333/dashboard
# 重启 Qdrant
docker restart memos-qdrant
```
#### Q3: MemOS 启动失败
```bash
# 查看 MemOS 日志
tail -f /opt/memos/logs/memos.log
# 检查虚拟环境
source /opt/memos/venv/bin/activate
which python
python --version
# 检查依赖
pip list | grep memos
```
#### Q4: API 返回错误
```bash
# 检查 API 响应
curl -v http://localhost:8001/health
# 检查配置
cat /opt/memos/.env | grep -E "NEO4J|QDRANT|API"
```
### 8.2 日志位置
| 组件 | 日志位置 |
|------|----------|
| MemOS 主日志 | `/opt/memos/logs/memos.log` |
| MemOS 系统日志 | `/opt/memos/logs/memos-system.log` |
| MemOS 错误日志 | `/opt/memos/logs/memos-error.log` |
| Neo4j 日志 | `docker logs memos-neo4j` |
| Qdrant 日志 | `docker logs memos-qdrant` |
| OpenClaw 插件 | `/opt/memos/logs/openclaw-plugin.log` |
### 8.3 常用命令
```bash
# 重启所有服务
cd /opt/memos
docker compose restart
systemctl restart memos
# 查看所有日志
tail -f /opt/memos/logs/memos.log
# 停止所有服务
cd /opt/memos
docker compose down
systemctl stop memos
# 完全重置 (危险!)
cd /opt/memos
docker compose down -v
rm -rf data/
docker compose up -d
```
---
## 九、性能优化
### 9.1 Neo4j 优化
```bash
# 在 docker-compose.yml 中调整
neo4j:
environment:
NEO4J_dbms_memory_heap_initial__size: 1g
NEO4J_dbms_memory_heap_max__size: 4g
NEO4J_dbms_transaction_log_rotation_rotation__keep__number: 50
```
### 9.2 Qdrant 优化
```bash
# 在 docker-compose.yml 中配置
qdrant:
environment:
QDRANT__SERVICE__HTTP_PORT: 6333
QDRANT__SERVICE__GRPC_PORT: 6334
QDRANT__STORAGE__PERFORMANCE__MAX_SCORING_THREADS: 4
```
### 9.3 MemOS 优化
```bash
# 调整 uvicorn workers
# 单机部署建议: CPU核心数 - 1
workers = 3 # 4核CPU
```
---
## 十、备份与恢复
### 10.1 备份策略
```bash
# 创建备份脚本
cat > /opt/memos/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR=/opt/memos/backups
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# 1. 备份 Neo4j
echo "Backing up Neo4j..."
docker exec memos-neo4j neo4j-admin dump --database=neo4j --to=/backups/neo4j_$DATE.dump
# 2. 备份 Qdrant
echo "Backing up Qdrant..."
docker exec memos-qdrant tar czf /backups/qdrant_$DATE.tar.gz -C /qdrant/storage .
# 3. 备份 MemOS 配置
echo "Backing up MemOS config..."
tar czf $BACKUP_DIR/memos_config_$DATE.tar.gz /opt/memos/.env /opt/memos/config/
echo "Backup completed: $DATE"
EOF
chmod +x /opt/memos/backup.sh
# 添加定时任务 (每天凌晨 3 点执行)
(crontab -l 2>/dev/null || echo "") | grep -v "backup.sh" > /tmp/crontab.tmp
echo "0 3 * * * /opt/memos/backup.sh" >> /tmp/crontab.tmp
crontab /tmp/crontab.tmp
rm /tmp/crontab.tmp
```
### 10.2 恢复脚本
```bash
# 创建恢复脚本
cat > /opt/memos/restore.sh << 'EOF'
#!/bin/bash
BACKUP_FILE=$1
if [ -z "$BACKUP_FILE" ]; then
echo "Usage: $0 <backup_file.tar.gz>"
exit 1
fi
# 停止服务
cd /opt/memos
docker compose down
systemctl stop memos
# 恢复 Neo4j
docker exec -i memos-neo4j neo4j-admin load --from=- --database=neo4j --force
# 恢复 Qdrant
docker exec -i memos-qdrant tar xzf /backups/qdrant_latest.tar.gz -C /qdrant/storage
# 重启服务
docker compose up -d
systemctl start memos
echo "Restore completed"
EOF
```
---
## 十一、总结
### 11.1 部署清单
| 步骤 | 操作 | 状态 |
|------|------|------|
| 1 | SSH 连接青龙 | ☐ |
| 2 | 安装 Docker | ☐ |
| 3 | 部署 Neo4j + Qdrant | ☐ |
| 4 | 安装 MemOS | ☐ |
| 5 | 配置 LLM + Embedding | ☐ |
| 6 | 配置 OpenClaw 插件 | ☐ |
| 7 | 验证测试 | ☐ |
| 8 | 配置备份 | ☐ |
### 11.2 下一步
1. **测试阶段** (1-2天)
- 测试云端版 MemOS (快速验证)
- 评估功能和性能
2. **部署阶段** (1周)
- 按本文档在青龙部署
- 集成 OpenClaw 插件
3. **优化阶段** (持续)
- 性能调优
- 备份策略
- 监控告警
---
*文档版本: v1.0 (2026-02-07)*
*作者: 2号机 (守护者)*