432 lines
9.4 KiB
Markdown
432 lines
9.4 KiB
Markdown
# Docker部署快速开始
|
||
|
||
本目录包含完整的Docker Compose部署配置,支持一键部署iMeeting应用。
|
||
|
||
## 📋 文件说明
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `docker-compose.yml` | Docker Compose配置文件 |
|
||
| `.env.example` | 环境变量模板 |
|
||
| `.dockerignore` | Docker构建忽略文件 |
|
||
| `start.sh` ⭐ | 一键启动脚本(推荐) |
|
||
| `stop.sh` | 停止服务脚本 |
|
||
| `manage.sh` | 服务管理脚本 |
|
||
| `generate-ssl-cert.sh` | SSL证书生成脚本 |
|
||
| `DOCKER_DEPLOYMENT.md` | 详细部署文档 |
|
||
| `DOCKER_README.md` | 本文档 |
|
||
|
||
## 🏗️ 系统架构
|
||
|
||
```
|
||
方式一:直接访问
|
||
用户 → http://服务器IP → iMeeting Nginx (80) → Frontend/Backend
|
||
|
||
方式二:域名访问(HTTPS)
|
||
用户 → https://domain → 接入服务器Nginx (SSL) → iMeeting服务器 (80) → Frontend/Backend
|
||
```
|
||
|
||
**5个服务容器**:
|
||
- **Nginx**: HTTP入口(仅HTTP,SSL由接入服务器处理)
|
||
- **Frontend**: React前端应用
|
||
- **Backend**: FastAPI后端服务
|
||
- **MySQL**: 数据库
|
||
- **Redis**: 缓存
|
||
|
||
**数据持久化**:
|
||
- `./data/` - 所有数据存储在此目录
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 方式一:使用启动脚本(推荐)
|
||
|
||
```bash
|
||
# 1. 复制并配置环境变量
|
||
cp .env.example .env
|
||
vim .env # 配置七牛云、LLM密钥等
|
||
|
||
# 2. 一键启动
|
||
./start.sh
|
||
```
|
||
|
||
脚本会自动完成:
|
||
- ✅ 检查Docker依赖
|
||
- ✅ 创建必要目录
|
||
- ✅ 生成SSL证书
|
||
- ✅ 配置后端环境变量
|
||
- ✅ 构建前端
|
||
- ✅ 启动所有服务
|
||
- ✅ 等待健康检查
|
||
|
||
### 方式二:手动启动
|
||
|
||
```bash
|
||
# 1. 配置环境变量
|
||
cp .env.example .env
|
||
cp backend/.env.example backend/.env
|
||
vim .env # 配置主环境变量
|
||
vim backend/.env # 配置后端环境变量
|
||
|
||
# 2. 生成SSL证书
|
||
./generate-ssl-cert.sh
|
||
|
||
# 3. 构建前端
|
||
cd frontend
|
||
npm install
|
||
npm run build
|
||
cd ..
|
||
|
||
# 4. 启动所有服务
|
||
docker-compose up -d
|
||
|
||
# 5. 查看服务状态
|
||
docker-compose ps
|
||
```
|
||
|
||
## 🌐 访问地址
|
||
|
||
启动成功后:
|
||
|
||
**直接访问(HTTP)**:
|
||
- **HTTP访问**: http://localhost 或 http://服务器IP
|
||
- **API文档**: http://localhost/docs 或 http://服务器IP/docs
|
||
- **API路径**: http://localhost/api/ 或 http://服务器IP/api/
|
||
|
||
**域名访问(HTTPS)**:
|
||
- 需要在接入服务器配置Nginx反向代理
|
||
- 参考文档:[GATEWAY_NGINX_CONFIG.md](GATEWAY_NGINX_CONFIG.md)
|
||
- 访问示例:https://imeeting.yourdomain.com
|
||
|
||
## ⚙️ 环境变量配置
|
||
|
||
### 必须配置项
|
||
|
||
编辑 `.env` 文件,修改以下配置:
|
||
|
||
```bash
|
||
# 七牛云存储(必填,否则无法上传文件)
|
||
QINIU_ACCESS_KEY=your_actual_access_key
|
||
QINIU_SECRET_KEY=your_actual_secret_key
|
||
QINIU_BUCKET=your_bucket_name
|
||
QINIU_DOMAIN=your_domain.clouddn.com
|
||
|
||
# LLM API(必填,否则无法使用AI功能)
|
||
QWEN_API_KEY=your_actual_qwen_api_key
|
||
|
||
# 生产环境必改密码
|
||
MYSQL_ROOT_PASSWORD=change_this_password
|
||
MYSQL_PASSWORD=change_this_password
|
||
REDIS_PASSWORD=change_this_password
|
||
```
|
||
|
||
### 可选配置项
|
||
|
||
```bash
|
||
# 应用访问地址(用于生成二维码等)
|
||
BASE_URL=http://localhost # 生产环境改为: https://your-domain.com
|
||
|
||
# Nginx端口(默认80/443)
|
||
HTTP_PORT=80
|
||
HTTPS_PORT=443
|
||
|
||
# 如需直接访问后端/前端(开发调试用)
|
||
# BACKEND_PORT=8001
|
||
# FRONTEND_PORT=3001
|
||
```
|
||
|
||
## 📦 数据目录
|
||
|
||
所有数据存储在 `./data/` 目录:
|
||
|
||
```
|
||
data/
|
||
├── mysql/ # MySQL数据库文件
|
||
├── redis/ # Redis持久化文件
|
||
├── uploads/ # 用户上传的文件(音频、图片等)
|
||
└── logs/ # 日志文件
|
||
├── backend/
|
||
├── frontend/
|
||
└── nginx/
|
||
```
|
||
|
||
**重要提示**:
|
||
- 定期备份 `data/` 目录
|
||
- 生产环境建议挂载独立数据盘到 `./data/`
|
||
|
||
## 🔧 日常管理
|
||
|
||
### 使用管理脚本(推荐)
|
||
|
||
```bash
|
||
./manage.sh
|
||
```
|
||
|
||
交互式菜单提供以下功能:
|
||
1. 查看服务状态
|
||
2. 查看实时日志
|
||
3. 重启所有服务
|
||
4. 重启单个服务
|
||
5. 进入容器终端
|
||
6. **备份数据库**
|
||
7. 恢复数据库
|
||
8. 清理Redis缓存
|
||
9. 更新服务
|
||
10. 查看资源使用
|
||
11. 导出日志
|
||
|
||
### 常用命令
|
||
|
||
```bash
|
||
# 查看服务状态
|
||
docker-compose ps
|
||
|
||
# 查看日志
|
||
docker-compose logs -f # 所有服务
|
||
docker-compose logs -f nginx # Nginx日志
|
||
docker-compose logs -f backend # 后端日志
|
||
tail -f data/logs/nginx/imeeting_access.log # 访问日志
|
||
|
||
# 重启服务
|
||
docker-compose restart # 重启所有
|
||
docker-compose restart nginx # 重启Nginx
|
||
|
||
# 停止服务
|
||
./stop.sh # 交互式停止
|
||
docker-compose down # 停止并删除容器
|
||
```
|
||
|
||
## 🔐 域名和HTTPS配置
|
||
|
||
iMeeting服务器本身仅提供HTTP服务。如需通过域名访问(HTTPS),需要在接入服务器配置Nginx反向代理。
|
||
|
||
### 配置接入服务器
|
||
|
||
完整配置步骤请参考:[GATEWAY_NGINX_CONFIG.md](GATEWAY_NGINX_CONFIG.md)
|
||
|
||
**简要步骤**:
|
||
1. 在接入服务器安装Nginx
|
||
2. 使用Let's Encrypt获取SSL证书
|
||
3. 配置Nginx反向代理到iMeeting服务器IP
|
||
4. 配置DNS A记录指向接入服务器
|
||
|
||
**配置示例**:
|
||
```nginx
|
||
server {
|
||
listen 443 ssl http2;
|
||
server_name imeeting.yourdomain.com;
|
||
|
||
ssl_certificate /etc/letsencrypt/live/imeeting.yourdomain.com/fullchain.pem;
|
||
ssl_certificate_key /etc/letsencrypt/live/imeeting.yourdomain.com/privkey.pem;
|
||
|
||
location / {
|
||
proxy_pass http://iMeeting服务器IP:80;
|
||
# ... 其他配置
|
||
}
|
||
}
|
||
```
|
||
|
||
详见:[GATEWAY_NGINX_CONFIG.md](GATEWAY_NGINX_CONFIG.md)
|
||
|
||
## 🔍 故障排查
|
||
|
||
### 查看日志
|
||
|
||
```bash
|
||
# 服务日志
|
||
docker-compose logs -f
|
||
|
||
# 文件日志
|
||
tail -f data/logs/nginx/imeeting_error.log
|
||
tail -f data/logs/backend/*.log
|
||
```
|
||
|
||
### 检查服务状态
|
||
|
||
```bash
|
||
docker-compose ps
|
||
```
|
||
|
||
所有服务应显示 `healthy` 状态。
|
||
|
||
### 测试连接
|
||
|
||
```bash
|
||
# 测试Nginx
|
||
curl http://localhost/health
|
||
|
||
# 测试HTTPS
|
||
curl -k https://localhost/health
|
||
|
||
# 测试API文档
|
||
curl http://localhost/docs
|
||
```
|
||
|
||
### 常见问题
|
||
|
||
| 问题 | 解决方法 |
|
||
|------|----------|
|
||
| 端口被占用 | 修改.env中的HTTP_PORT |
|
||
| 502错误 | 检查backend和frontend是否健康 |
|
||
| 数据库连接失败 | 检查backend/.env配置 |
|
||
| 前端无法访问API | 检查VITE_API_BASE_URL配置 |
|
||
| 如何配置HTTPS | 参考GATEWAY_NGINX_CONFIG.md配置接入服务器 |
|
||
|
||
详见:`DOCKER_DEPLOYMENT.md` 故障排查章节
|
||
|
||
## 📊 服务组件
|
||
|
||
| 服务 | 容器名 | 内部端口 | 外部端口 | 健康检查 |
|
||
|------|--------|----------|----------|----------|
|
||
| Nginx | imeeting-nginx | 80 | 80 | ✅ |
|
||
| Frontend | imeeting-frontend | 3001 | - | ✅ |
|
||
| Backend | imeeting-backend | 8001 | - | ✅ |
|
||
| MySQL | imeeting-mysql | 3306 | - | ✅ |
|
||
| Redis | imeeting-redis | 6379 | - | ✅ |
|
||
|
||
外部仅暴露Nginx的80端口(HTTP),其他服务通过内部网络通信。
|
||
如需HTTPS,请在接入服务器配置SSL。
|
||
|
||
## 🔄 更新部署
|
||
|
||
### 更新代码
|
||
|
||
```bash
|
||
# 拉取最新代码
|
||
git pull
|
||
|
||
# 重新构建
|
||
docker-compose build
|
||
|
||
# 重启服务
|
||
docker-compose up -d
|
||
```
|
||
|
||
### 仅更新前端
|
||
|
||
```bash
|
||
cd frontend
|
||
npm run build
|
||
cd ..
|
||
docker-compose build frontend
|
||
docker-compose up -d frontend
|
||
docker-compose restart nginx
|
||
```
|
||
|
||
### 仅更新后端
|
||
|
||
```bash
|
||
docker-compose build backend
|
||
docker-compose up -d backend
|
||
```
|
||
|
||
## 💾 备份与恢复
|
||
|
||
### 备份数据库
|
||
|
||
```bash
|
||
# 使用管理脚本
|
||
./manage.sh # 选择"6) 备份数据库"
|
||
|
||
# 或手动执行
|
||
docker-compose exec mysql mysqldump -uroot -p imeeting > backup.sql
|
||
```
|
||
|
||
### 备份所有数据
|
||
|
||
```bash
|
||
# 备份data目录
|
||
tar czf imeeting_backup_$(date +%Y%m%d).tar.gz data/
|
||
|
||
# 备份配置
|
||
tar czf imeeting_config_$(date +%Y%m%d).tar.gz .env backend/.env nginx/
|
||
```
|
||
|
||
### 恢复数据
|
||
|
||
```bash
|
||
# 恢复数据库
|
||
docker-compose exec -T mysql mysql -uroot -p imeeting < backup.sql
|
||
|
||
# 恢复data目录
|
||
tar xzf imeeting_backup_20240101.tar.gz
|
||
```
|
||
|
||
## 🛡️ 安全提示
|
||
|
||
生产环境部署前,请务必:
|
||
|
||
1. ✅ **修改所有默认密码**
|
||
- MYSQL_ROOT_PASSWORD
|
||
- MYSQL_PASSWORD
|
||
- REDIS_PASSWORD
|
||
|
||
2. ✅ **配置真实SSL证书**
|
||
- 使用Let's Encrypt或商业证书
|
||
- 不要使用自签名证书
|
||
|
||
3. ✅ **设置文件权限**
|
||
```bash
|
||
chmod 600 .env backend/.env
|
||
chmod 600 nginx/ssl/server.key
|
||
```
|
||
|
||
4. ✅ **启用防火墙**
|
||
```bash
|
||
ufw allow 80/tcp
|
||
ufw allow 443/tcp
|
||
ufw enable
|
||
```
|
||
|
||
5. ✅ **定期备份数据**
|
||
- 设置自动备份脚本
|
||
- 异地备份
|
||
|
||
6. ✅ **监控日志**
|
||
- 定期检查错误日志
|
||
- 设置日志轮转
|
||
|
||
## 📚 更多信息
|
||
|
||
详细的部署说明、配置选项、性能优化等,请查看:
|
||
|
||
- **详细部署文档**: [DOCKER_DEPLOYMENT.md](DOCKER_DEPLOYMENT.md)
|
||
- **Nginx配置说明**: [nginx/README.md](nginx/README.md)
|
||
|
||
## 🆘 获取帮助
|
||
|
||
如遇问题:
|
||
|
||
1. 查看日志:`docker-compose logs -f`
|
||
2. 查看健康状态:`docker-compose ps`
|
||
3. 查看详细文档:`DOCKER_DEPLOYMENT.md`
|
||
4. 提交Issue到项目仓库
|
||
|
||
## 📞 快速命令参考
|
||
|
||
```bash
|
||
# 启动
|
||
./start.sh # 一键启动(推荐)
|
||
docker-compose up -d # 启动所有服务
|
||
|
||
# 管理
|
||
./manage.sh # 管理菜单(推荐)
|
||
docker-compose ps # 查看状态
|
||
docker-compose logs -f # 查看日志
|
||
docker-compose restart # 重启服务
|
||
|
||
# 停止
|
||
./stop.sh # 停止服务(推荐)
|
||
docker-compose down # 停止并删除容器
|
||
|
||
# 备份
|
||
./manage.sh # 选择备份功能
|
||
tar czf backup.tar.gz data/ # 备份所有数据
|
||
|
||
# 更新
|
||
git pull && docker-compose build && docker-compose up -d
|
||
```
|
||
|
||
---
|
||
|
||
**祝您使用愉快!** 🎉
|