From 2ea8964b7c5fbd7d0cab445fc54e6f107d524a64 Mon Sep 17 00:00:00 2001 From: hermes-bot Date: Sun, 31 May 2026 03:35:49 +0000 Subject: [PATCH] mem0: add alembic migration Job, PVC, update APP_DB_NAME to mem0 --- AI/mem0/deploy.md | 167 +++++++++++++++++----------------------------- 1 file changed, 60 insertions(+), 107 deletions(-) diff --git a/AI/mem0/deploy.md b/AI/mem0/deploy.md index cf4de86..390f3af 100644 --- a/AI/mem0/deploy.md +++ b/AI/mem0/deploy.md @@ -32,6 +32,7 @@ ccr.ccs.tencentyun.com/tei_agent/mem0:latest | AUTH_DISABLED | false | 启用认证 | | MEM0_TELEMETRY | false | 关闭遥测 | | REQUEST_LOG_RETENTION_DAYS | 30 | 日志保留天数 | +| HISTORY_DB_PATH | /app/data/mem0_history.db | SQLite 历史数据库路径 | ### Secret (mem0-secrets) @@ -41,103 +42,67 @@ ccr.ccs.tencentyun.com/tei_agent/mem0:latest | ADMIN_API_KEY | 管理后台 API key | | POSTGRES_PASSWORD | PostgreSQL 密码 | -## 部署清单 +## 数据库迁移 (Alembic) + +mem0 server 使用 Alembic 管理 PostgreSQL schema。**首次部署前必须先执行迁移**,创建 `request_logs` 等表。 + +### 迁移 Job ```yaml -apiVersion: v1 -kind: ConfigMap +apiVersion: batch/v1 +kind: Job metadata: - name: mem0-env - namespace: tei -data: -| APP_DB_NAME | mem0 | 数据库名 | - QDRANT_HOST: "qdrant" - QDRANT_PORT: "6333" - QDRANT_COLLECTION_NAME: "mem0" - EMBEDDER_PROVIDER: "tei" - TEI_ENDPOINT: "http://tei:8080" - LLM_PROVIDER: "openai" - OPENAI_API_KEY: "YOUR_MINIMAX_KEY" - OPENAI_BASE_URL: "https://api.minimax.chat/v1" - AUTH_DISABLED: "false" - MEM0_TELEMETRY: "false" - REQUEST_LOG_RETENTION_DAYS: "30" ---- -apiVersion: v1 -kind: Secret -metadata: - name: mem0-secrets - namespace: tei -type: Opaque -stringData: - JWT_SECRET: "your-jwt-secret-change-me" - ADMIN_API_KEY: "your-admin-key-change-me" - POSTGRES_PASSWORD: "gitlab" ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: mem0 + name: mem0-migrate namespace: tei spec: - replicas: 1 - selector: - matchLabels: - app: mem0 + ttlSecondsAfterFinished: 300 # 完成后5分钟自动清理 template: - metadata: - labels: - app: mem0 spec: + restartPolicy: OnFailure containers: - - name: mem0 + - name: alembic image: ccr.ccs.tencentyun.com/tei_agent/mem0:latest - ports: - - containerPort: 8000 - name: http + command: ["alembic", "upgrade", "head"] envFrom: - configMapRef: name: mem0-env - secretRef: name: mem0-secrets - livenessProbe: - httpGet: - path: /health - port: 8000 - initialDelaySeconds: 30 - periodSeconds: 10 - readinessProbe: - httpGet: - path: /health - port: 8000 - initialDelaySeconds: 10 - periodSeconds: 5 resources: limits: - cpu: "2" - memory: "4Gi" - requests: + memory: "512Mi" cpu: "500m" - memory: "1Gi" ---- -apiVersion: v1 -kind: Service -metadata: - name: mem0 - namespace: tei -spec: - ports: - - port: 8000 - name: http - selector: - app: mem0 ``` -## History PVC(SQLite 持久化) +### 迁移部署步骤 -mem0 的对话历史(history)默认存在 SQLite,**必须用 PVC 持久化**(emptyDir 重启丢失)。 +```bash +# 1. 先跑迁移(只执行一次) +kubectl apply -f mem0-migrate-job.yaml -### 前置:创建 PVC +# 2. 确认迁移完成 +kubectl get job mem0-migrate -n tei -w + +# 3. 确认成功后再部署 mem0 +kubectl apply -f mem0-deployment.yaml + +# 4. 如果迁移失败,查看原因 +kubectl logs job/mem0-migrate -n tei +``` + +**重要**:迁移 Job 只跑一次。Pod 重启时不需要重新迁移,PostgreSQL schema 不会天天变。 + +## 前置要求 + +1. **pgvector 扩展** — PostgreSQL 需要安装 pgvector +2. **mem0 数据库** — 需要提前创建 +3. **mem0-migrate Job** — 首次部署前必须先执行迁移 +4. **mem0-history PVC** — 必须提前创建 +5. **Qdrant collection** — mem0 启动时自动创建(首次调用时) + +## 部署清单 + +### PVC + ConfigMap + Secret + Deployment + Service ```yaml apiVersion: v1 @@ -152,29 +117,6 @@ spec: requests: storage: 1Gi storageClassName: standard # 根据你的 StorageClass 调整 -``` - -### 环境变量追加 - -| 变量 | 值 | 说明 | -|---|---|---| -| HISTORY_DB_PATH | /app/data/mem0_history.db | SQLite 数据库路径 | - -### PVC + 完整 Deployment - -```yaml -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: mem0-history - namespace: tei -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 1Gi - storageClassName: standard --- apiVersion: v1 kind: ConfigMap @@ -182,7 +124,7 @@ metadata: name: mem0-env namespace: tei data: -| APP_DB_NAME | mem0 | 数据库名 | + APP_DB_NAME: "mem0" QDRANT_HOST: "qdrant" QDRANT_PORT: "6333" QDRANT_COLLECTION_NAME: "mem0" @@ -273,20 +215,31 @@ spec: app: mem0 ``` -## 前置要求 - -1. **pgvector 扩展** — PostgreSQL 需要安装 pgvector -2. **mem0 数据库** — 需要提前创建 -3. **Qdrant collection** — mem0 启动时自动创建(首次调用时) -4. **mem0-history PVC** — 必须提前创建 - ## 验证 ```bash +# 检查 PVC kubectl get pvc -n tei mem0-history + +# 检查 Pod kubectl get pods -n tei -l app=mem0 + +# 查看日志 kubectl logs -n tei -l app=mem0 --tail=50 # 健康检查 curl http://mem0:8000/health +``` + +## History SQLite 说明 + +mem0 的对话历史存储在 SQLite,位于 `/app/data/mem0_history.db`。**必须用 PVC 持久化**,emptyDir 挂载重启后数据丢失。 + +如果 PVC 空间不足或不需要历史功能,可以改用空目录(数据丢失但不影响核心记忆功能): + +```yaml +# 测试/轻量级环境用 emptyDir +volumes: + - name: mem0-history + emptyDir: {} ``` \ No newline at end of file