2026-01-19 09:52:53 +00:00
|
|
|
|
# Docker部署快速开始
|
|
|
|
|
|
|
|
|
|
|
|
本目录包含完整的Docker Compose部署配置,支持一键部署iMeeting应用。
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 文件说明
|
|
|
|
|
|
|
|
|
|
|
|
| 文件 | 说明 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| `docker-compose.yml` | Docker Compose配置文件 |
|
|
|
|
|
|
| `.env.example` | 环境变量模板 |
|
|
|
|
|
|
| `.dockerignore` | Docker构建忽略文件 |
|
|
|
|
|
|
| `start.sh` ⭐ | 一键启动脚本(推荐) |
|
|
|
|
|
|
| `stop.sh` | 停止服务脚本 |
|
|
|
|
|
|
| `manage.sh` | 服务管理脚本 |
|
|
|
|
|
|
| `DOCKER_README.md` | 本文档 |
|
|
|
|
|
|
|
|
|
|
|
|
## 🏗️ 系统架构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
方式一:直接访问
|
2026-04-08 05:29:54 +00:00
|
|
|
|
用户 → http://服务器IP → iMeeting Frontend(Web) (80) → Frontend/Backend
|
2026-01-19 09:52:53 +00:00
|
|
|
|
|
|
|
|
|
|
方式二:域名访问(HTTPS)
|
|
|
|
|
|
用户 → https://domain → 接入服务器Nginx (SSL) → iMeeting服务器 (80) → Frontend/Backend
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
**4个服务容器**:
|
2026-01-19 09:52:53 +00:00
|
|
|
|
- **Frontend**: React前端应用
|
|
|
|
|
|
- **Backend**: FastAPI后端服务
|
|
|
|
|
|
- **MySQL**: 数据库
|
|
|
|
|
|
- **Redis**: 缓存
|
|
|
|
|
|
|
|
|
|
|
|
**数据持久化**:
|
|
|
|
|
|
- `./data/` - 所有数据存储在此目录
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 方式一:使用启动脚本(推荐)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 1. 复制并配置环境变量
|
|
|
|
|
|
cp .env.example .env
|
|
|
|
|
|
vim .env # 配置七牛云、LLM密钥等
|
|
|
|
|
|
|
|
|
|
|
|
# 2. 一键启动
|
|
|
|
|
|
./start.sh
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
脚本会自动完成:
|
|
|
|
|
|
- ✅ 检查Docker依赖
|
|
|
|
|
|
- ✅ 创建必要目录
|
|
|
|
|
|
- ✅ 启动所有服务
|
|
|
|
|
|
- ✅ 等待健康检查
|
|
|
|
|
|
|
|
|
|
|
|
### 方式二:手动启动
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 1. 配置环境变量
|
|
|
|
|
|
cp .env.example .env
|
|
|
|
|
|
cp backend/.env.example backend/.env
|
|
|
|
|
|
vim .env # 配置主环境变量
|
|
|
|
|
|
vim backend/.env # 配置后端环境变量
|
|
|
|
|
|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
# 2. 启动所有服务
|
2026-01-19 09:52:53 +00:00
|
|
|
|
docker-compose up -d
|
|
|
|
|
|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
# 3. 查看服务状态
|
2026-01-19 09:52:53 +00:00
|
|
|
|
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反向代理
|
2026-04-08 05:29:54 +00:00
|
|
|
|
- 参考本文“域名和 HTTPS 配置”章节
|
2026-01-19 09:52:53 +00:00
|
|
|
|
- 访问示例: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
|
|
|
|
|
|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
# 如需调整容器对外端口
|
|
|
|
|
|
# BACKEND_PORT=8000
|
|
|
|
|
|
# HTTP_PORT=80
|
2026-01-19 09:52:53 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📦 数据目录
|
|
|
|
|
|
|
|
|
|
|
|
所有数据存储在 `./data/` 目录:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
data/
|
|
|
|
|
|
├── mysql/ # MySQL数据库文件
|
|
|
|
|
|
├── redis/ # Redis持久化文件
|
|
|
|
|
|
├── uploads/ # 用户上传的文件(音频、图片等)
|
|
|
|
|
|
└── logs/ # 日志文件
|
|
|
|
|
|
├── backend/
|
|
|
|
|
|
├── frontend/
|
2026-04-08 05:29:54 +00:00
|
|
|
|
└── frontend/
|
2026-01-19 09:52:53 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**重要提示**:
|
|
|
|
|
|
- 定期备份 `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 # 所有服务
|
2026-04-08 05:29:54 +00:00
|
|
|
|
docker-compose logs -f frontend # 前端Web日志
|
2026-01-19 09:52:53 +00:00
|
|
|
|
docker-compose logs -f backend # 后端日志
|
2026-04-08 05:29:54 +00:00
|
|
|
|
tail -f data/logs/frontend/*.log # 前端容器日志目录
|
2026-01-19 09:52:53 +00:00
|
|
|
|
|
|
|
|
|
|
# 重启服务
|
|
|
|
|
|
docker-compose restart # 重启所有
|
2026-04-08 05:29:54 +00:00
|
|
|
|
docker-compose restart frontend # 重启前端
|
2026-01-19 09:52:53 +00:00
|
|
|
|
|
|
|
|
|
|
# 停止服务
|
|
|
|
|
|
./stop.sh # 交互式停止
|
|
|
|
|
|
docker-compose down # 停止并删除容器
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔐 域名和HTTPS配置
|
|
|
|
|
|
|
|
|
|
|
|
iMeeting服务器本身仅提供HTTP服务。如需通过域名访问(HTTPS),需要在接入服务器配置Nginx反向代理。
|
|
|
|
|
|
|
|
|
|
|
|
### 配置接入服务器
|
|
|
|
|
|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
完整配置步骤请参考本文档中的反向代理章节
|
2026-01-19 09:52:53 +00:00
|
|
|
|
|
|
|
|
|
|
**简要步骤**:
|
|
|
|
|
|
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;
|
|
|
|
|
|
# ... 其他配置
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
详见:本文档中的反向代理章节
|
2026-01-19 09:52:53 +00:00
|
|
|
|
|
|
|
|
|
|
## 🔍 故障排查
|
|
|
|
|
|
|
|
|
|
|
|
### 查看日志
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 服务日志
|
|
|
|
|
|
docker-compose logs -f
|
|
|
|
|
|
|
|
|
|
|
|
# 文件日志
|
2026-04-08 05:29:54 +00:00
|
|
|
|
tail -f data/logs/frontend/*.log
|
2026-01-19 09:52:53 +00:00
|
|
|
|
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配置 |
|
2026-04-08 05:29:54 +00:00
|
|
|
|
| 如何配置HTTPS | 参考本文档中的反向代理章节 |
|
2026-01-19 09:52:53 +00:00
|
|
|
|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
详见:`DOCKER_README.md` 故障排查章节
|
2026-01-19 09:52:53 +00:00
|
|
|
|
|
|
|
|
|
|
## 📊 服务组件
|
|
|
|
|
|
|
|
|
|
|
|
| 服务 | 容器名 | 内部端口 | 外部端口 | 健康检查 |
|
|
|
|
|
|
|------|--------|----------|----------|----------|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
| Frontend(Web) | imeeting-frontend | 80 | 80 | ✅ |
|
|
|
|
|
|
| Backend | imeeting-backend | 8000 | 8000 | ✅ |
|
2026-01-19 09:52:53 +00:00
|
|
|
|
| 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
|
2026-04-08 05:29:54 +00:00
|
|
|
|
docker-compose restart frontend
|
2026-01-19 09:52:53 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 仅更新后端
|
|
|
|
|
|
|
|
|
|
|
|
```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/
|
|
|
|
|
|
|
|
|
|
|
|
# 备份配置
|
2026-04-08 05:29:54 +00:00
|
|
|
|
tar czf imeeting_config_$(date +%Y%m%d).tar.gz .env backend/.env frontend/nginx.conf
|
2026-01-19 09:52:53 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 恢复数据
|
|
|
|
|
|
|
|
|
|
|
|
```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
|
2026-04-08 05:29:54 +00:00
|
|
|
|
确保接入层反向代理证书文件权限正确
|
2026-01-19 09:52:53 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
4. ✅ **启用防火墙**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
ufw allow 80/tcp
|
|
|
|
|
|
ufw allow 443/tcp
|
|
|
|
|
|
ufw enable
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
5. ✅ **定期备份数据**
|
|
|
|
|
|
- 设置自动备份脚本
|
|
|
|
|
|
- 异地备份
|
|
|
|
|
|
|
|
|
|
|
|
6. ✅ **监控日志**
|
|
|
|
|
|
- 定期检查错误日志
|
|
|
|
|
|
- 设置日志轮转
|
|
|
|
|
|
|
|
|
|
|
|
## 📚 更多信息
|
|
|
|
|
|
|
|
|
|
|
|
详细的部署说明、配置选项、性能优化等,请查看:
|
|
|
|
|
|
|
2026-04-08 05:29:54 +00:00
|
|
|
|
- **部署说明**: [DOCKER_README.md](DOCKER_README.md)
|
|
|
|
|
|
- **前端代理配置**: [frontend/nginx.conf](frontend/nginx.conf)
|
2026-01-19 09:52:53 +00:00
|
|
|
|
|
|
|
|
|
|
## 🆘 获取帮助
|
|
|
|
|
|
|
|
|
|
|
|
如遇问题:
|
|
|
|
|
|
|
|
|
|
|
|
1. 查看日志:`docker-compose logs -f`
|
|
|
|
|
|
2. 查看健康状态:`docker-compose ps`
|
2026-04-08 05:29:54 +00:00
|
|
|
|
3. 查看详细文档:`DOCKER_README.md`
|
2026-01-19 09:52:53 +00:00
|
|
|
|
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
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**祝您使用愉快!** 🎉
|