Files
mem0-server/OLLAMA_DOCKER.md
2026-03-06 20:52:16 +08:00

494 lines
8.8 KiB
Markdown
Raw Permalink 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.
# 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 中,管理更加简单统一!🎉