每日备份 2026-06-10 12:57:13
This commit is contained in:
1 parent
fda2ccb8c2
commit
3d2e638c6a
244 files changed
+58890
-3
No files matched your search
@@ -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号机 (守护者)*
|
||||
Reference in new issue
Block a user