Files
knowledge-base/AI/mem0/deploy.md
2026-05-31 03:16:32 +00:00

292 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# mem0 自托管部署
## 镜像
```
ccr.ccs.tencentyun.com/tei_agent/mem0:latest
```
## 依赖服务tei namespace
| 服务 | 地址 | 用途 |
|---|---|---|
| PostgreSQL | 192.168.3.49:5432 | 关系数据存储 |
| Qdrant | qdrant:6333 | 向量存储 |
| TEI (BGE-M3) | tei:8080 | Embedder文本→向量 |
## 环境变量
### ConfigMap (mem0-env)
| 变量 | 值 | 说明 |
|---|---|---|
| APP_DB_NAME | mem0 | 数据库名 |
| QDRANT_HOST | qdrant | Qdrant 服务地址 |
| QDRANT_PORT | 6333 | Qdrant 端口 |
| QDRANT_COLLECTION_NAME | mem0 | 集合名 |
| EMBEDDER_PROVIDER | tei | Embedder 使用 TEI |
| TEI_ENDPOINT | http://tei:8080 | TEI endpoint |
| LLM_PROVIDER | openai | LLM providerMiniMax 兼容 OpenAI 格式) |
| OPENAI_API_KEY | YOUR_MINIMAX_KEY | MiniMax API key |
| OPENAI_BASE_URL | https://api.minimax.chat/v1 | MiniMax API 地址 |
| AUTH_DISABLED | false | 启用认证 |
| MEM0_TELEMETRY | false | 关闭遥测 |
| REQUEST_LOG_RETENTION_DAYS | 30 | 日志保留天数 |
### Secret (mem0-secrets)
| 变量 | 说明 |
|---|---|
| JWT_SECRET | JWT 签名密钥 |
| ADMIN_API_KEY | 管理后台 API key |
| POSTGRES_PASSWORD | PostgreSQL 密码 |
## 部署清单
```yaml
apiVersion: v1
kind: ConfigMap
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
namespace: tei
spec:
replicas: 1
selector:
matchLabels:
app: mem0
template:
metadata:
labels:
app: mem0
spec:
containers:
- name: mem0
image: ccr.ccs.tencentyun.com/tei_agent/mem0:latest
ports:
- containerPort: 8000
name: http
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:
cpu: "500m"
memory: "1Gi"
---
apiVersion: v1
kind: Service
metadata:
name: mem0
namespace: tei
spec:
ports:
- port: 8000
name: http
selector:
app: mem0
```
## History PVCSQLite 持久化)
mem0 的对话历史history默认存在 SQLite**必须用 PVC 持久化**emptyDir 重启丢失)。
### 前置:创建 PVC
```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mem0-history
namespace: tei
spec:
accessModes:
- ReadWriteOnce
resources:
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
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"
HISTORY_DB_PATH: "/app/data/mem0_history.db"
---
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
namespace: tei
spec:
replicas: 1
selector:
matchLabels:
app: mem0
template:
metadata:
labels:
app: mem0
spec:
containers:
- name: mem0
image: ccr.ccs.tencentyun.com/tei_agent/mem0:latest
ports:
- containerPort: 8000
name: http
envFrom:
- configMapRef:
name: mem0-env
- secretRef:
name: mem0-secrets
volumeMounts:
- name: mem0-history
mountPath: /app/data
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:
cpu: "500m"
memory: "1Gi"
volumes:
- name: mem0-history
persistentVolumeClaim:
claimName: mem0-history
---
apiVersion: v1
kind: Service
metadata:
name: mem0
namespace: tei
spec:
ports:
- port: 8000
name: http
selector:
app: mem0
```
## 前置要求
1. **pgvector 扩展** — PostgreSQL 需要安装 pgvector
2. **mem0 数据库** — 需要提前创建
3. **Qdrant collection** — mem0 启动时自动创建(首次调用时)
4. **mem0-history PVC** — 必须提前创建
## 验证
```bash
kubectl get pvc -n tei mem0-history
kubectl get pods -n tei -l app=mem0
kubectl logs -n tei -l app=mem0 --tail=50
# 健康检查
curl http://mem0:8000/health
```