This commit is contained in:
2026-03-06 20:52:16 +08:00
commit 763372851e
10 changed files with 1249 additions and 0 deletions

493
OLLAMA_DOCKER.md Normal file
View File

@@ -0,0 +1,493 @@
# Ollama Docker Compose 部署指南
## 📋 概述
现在 Mem0 Server 的 docker-compose.yaml 已经包含了 Ollama 服务,所有组件都可以通过 Docker Compose 统一管理。
---
## 🏗️ 新架构
### 技术架构
```
┌─────────────┐
│ Mem0 App │ (FastAPI, port: 8888)
└──────┬──────┘
├──→ ┌─────────────┐
│ │ Ollama │ (port: 11434)
│ │ LLM+AI │
│ └─────────────┘
├──→ ┌─────────────┐
│ │ ChromaDB │ (Embedded)
│ └─────────────┘
└──→ ┌─────────────┐
│ SQLite │ (Embedded)
└─────────────┘
```
### 服务列表
- `mem0` - FastAPI 应用(端口 8888
- `ollama` - Ollama AI 服务(端口 11434
---
## 🚀 快速开始
### 方式 1使用 GPU推荐
如果您的机器有 NVIDIA GPU
```bash
# 启动所有服务
docker-compose --profile gpu up -d
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs -f ollama
```
### 方式 2仅使用 CPU
如果没有 GPU
```bash
# 启动所有服务(不使用 GPU profile
docker-compose up -d
# 注意Ollama 在 CPU 模式下可能较慢
```
---
## 📊 docker-compose.yaml 配置说明
### Ollama 服务配置
```yaml
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: on-failure
networks:
- mem0_network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
interval: 5s
timeout: 5s
retries: 10
start_period: 60s # 给 Ollama 60 秒启动时间
volumes:
- ollama_data:/root/.ollama # 持久化模型数据
ports:
- "11434:11434" # 暴露 Ollama API
profiles: ["gpu"] # GPU 配置
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
```
### Mem0 服务配置更新
```yaml
mem0:
environment:
- OLLAMA_HOST=http://ollama:11434 # 使用 Docker 网络访问 Ollama
- OLLAMA_LLM_MODEL=llama3.2
- OLLAMA_EMBEDDER_MODEL=nomic-embed-text
depends_on:
ollama:
condition: service_healthy # 等待 Ollama 健康检查通过
```
---
## 🔧 使用步骤
### 1. 首次启动
```bash
# 启动服务
docker-compose --profile gpu up -d
# 等待 Ollama 启动完成(约 60 秒)
docker-compose logs -f ollama
# 查看已加载的模型
docker exec ollama ollama list
```
### 2. 下载模型
首次使用需要下载模型:
```bash
# 进入 Ollama 容器
docker exec -it ollama bash
# 下载 LLM 模型
ollama pull llama3.2
# 下载嵌入模型
ollama pull nomic-embed-text
# 退出
exit
```
或者一次性下载:
```bash
docker exec ollama ollama pull llama3.2
docker exec ollama ollama pull nomic-embed-text
```
### 3. 测试 Ollama
```bash
# 测试 Ollama API
curl http://localhost:11434/api/tags
# 测试生成
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Hello, how are you?"
}'
```
### 4. 测试 Mem0 API
```bash
# 访问 API 文档
http://localhost:8888/docs
# 创建记忆
curl -X POST http://localhost:8888/memories \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好!有什么可以帮助你的?"}
],
"user_id": "test_user"
}'
```
---
## 💾 数据持久化
### Ollama 数据卷
- **名称**: `ollama_data`
- **路径**: `/root/.ollama`
- **内容**: 下载的模型文件、配置等
### 查看数据卷
```bash
# 查看数据卷信息
docker volume inspect ollama_data
# 查看数据卷位置
docker volume ls | grep ollama_data
```
---
## ⚙️ 配置选项
### 使用不同的模型
编辑 `.env` 文件:
```bash
OLLAMA_LLM_MODEL=mistral
OLLAMA_EMBEDDER_MODEL=mxbai-embed-large
```
重启服务:
```bash
docker-compose --profile gpu up -d
```
### 调整 Ollama 资源
如果需要更多 GPU 资源:
```yaml
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0', '1'] # 使用特定 GPU
capabilities: [gpu]
```
---
## 🔍 故障排查
### Ollama 启动失败
```bash
# 查看详细日志
docker-compose logs ollama
# 检查健康状态
docker-compose ps ollama
# 进入容器调试
docker exec -it ollama bash
```
### 模型下载慢
```bash
# 设置国内镜像(如果可用)
export OLLAMA_MODELS=https://mirror.ghproxy.com/https://github.com/ollama/ollama/releases/download
# 或者手动下载模型文件后挂载
```
### GPU 不可用
```bash
# 检查 NVIDIA Docker 是否安装
nvidia-smi
# 检查容器是否识别 GPU
docker exec ollama nvidia-smi
# 如果没有 GPU使用 CPU 模式
docker-compose up -d
```
### Mem0 无法连接 Ollama
```bash
# 检查网络连通性
docker exec mem0 ping ollama
# 检查 Ollama 是否运行
docker exec mem0 curl http://ollama:11434/api/tags
# 查看依赖关系
docker-compose ps
```
---
## 🎯 优势特点
### 统一管理
- ✅ 所有服务通过 docker-compose 管理
- ✅ 一键启动/停止
- ✅ 自动处理依赖关系
### 数据隔离
- ✅ Ollama 数据独立存储
- ✅ 不会污染宿主机环境
- ✅ 易于备份和迁移
### 网络自动化
- ✅ Docker 网络自动配置
- ✅ 服务间通过服务名通信
- ✅ 无需手动配置 IP
### 健康检查
- ✅ 自动检测 Ollama 状态
- ✅ Mem0 等待 Ollama 就绪
- ✅ 提高系统可靠性
---
## 📈 性能优化
### GPU 加速
```yaml
# 启用 GPU 支持
profiles: ["gpu"]
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
```
### 内存优化
```yaml
# 限制最大内存使用
deploy:
resources:
limits:
memory: 8G
reservations:
memory: 4G
```
### 并发优化
```bash
# 设置 Ollama 并发数
docker exec ollama sh -c 'echo "OLLAMA_NUM_PARALLEL=4" >> /root/.ollama/config.json'
```
---
## 🔄 常用命令
### 启动服务
```bash
# 带 GPU 支持
docker-compose --profile gpu up -d
# 仅 CPU
docker-compose up -d
```
### 停止服务
```bash
docker-compose --profile gpu down
```
### 查看状态
```bash
# 查看所有服务
docker-compose ps
# 查看 Ollama 日志
docker-compose logs -f ollama
# 查看 Mem0 日志
docker-compose logs -f mem0
```
### 重启服务
```bash
# 重启 Ollama
docker-compose restart ollama
# 重启 Mem0
docker-compose restart mem0
# 重启所有
docker-compose restart
```
### 进入容器
```bash
# 进入 Ollama 容器
docker exec -it ollama bash
# 进入 Mem0 容器
docker exec -it mem0 bash
```
### 管理模型
```bash
# 列出已安装的模型
docker exec ollama ollama list
# 下载新模型
docker exec ollama ollama pull mistral
# 删除模型
docker exec ollama ollama rm llama3.2
# 查看模型信息
docker exec ollama ollama show llama3.2
```
---
## 💡 最佳实践
### 1. 首次部署
```bash
# 1. 启动服务
docker-compose --profile gpu up -d
# 2. 等待 Ollama 就绪
sleep 60
# 3. 下载所需模型
docker exec ollama ollama pull llama3.2
docker exec ollama ollama pull nomic-embed-text
# 4. 测试 API
curl http://localhost:8888/docs
```
### 2. 日常使用
```bash
# 启动
docker-compose --profile gpu up -d
# 停止
docker-compose --profile gpu down
# 重启
docker-compose --profile gpu restart
```
### 3. 数据备份
```bash
# 备份 Ollama 数据
docker run --rm \
-v ollama_data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/ollama_backup.tar.gz /data
```
### 4. 恢复数据
```bash
# 恢复 Ollama 数据
docker run --rm \
-v ollama_data:/data \
-v $(pwd):/backup \
alpine tar xzf /backup/ollama_backup.tar.gz -C /
```
---
## 🆘 常见问题
### Q1: Ollama 启动很慢?
**A:** Ollama 首次启动需要加载模型,可能需要 60 秒。健康检查配置了 `start_period: 60s` 来等待。
### Q2: 如何切换模型?
**A:** 修改 `.env` 中的 `OLLAMA_LLM_MODEL`,然后重启服务,并确保新模型已下载。
### Q3: GPU 内存不足?
**A:** 使用更小的模型(如 `phi3`),或限制并发数。
### Q4: 如何完全清理?
**A:**
```bash
docker-compose --profile gpu down -v # 删除所有数据卷
```
### Q5: 可以在没有 GPU 的情况下运行吗?
**A:** 可以,但速度较慢。使用 `docker-compose up -d`(不带 gpu profile
---
## 📚 相关文档
- [README.md](./README.md) - 项目主文档
- [TECH_STACK.md](./TECH_STACK.md) - 技术架构说明
- [QUICK_START.md](./QUICK_START.md) - 快速入门
- [DEPLOYMENT.md](./DEPLOYMENT.md) - 详细部署指南
---
现在所有服务都集成在 docker-compose.yaml 中,管理更加简单统一!🎉