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