848 lines
21 KiB
Markdown
848 lines
21 KiB
Markdown
# 青龙部署 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号机 (守护者)*
|