9.4 KiB
9.4 KiB
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/- 所有数据存储在此目录
🚀 快速开始
方式一:使用启动脚本(推荐)
# 1. 复制并配置环境变量
cp .env.example .env
vim .env # 配置七牛云、LLM密钥等
# 2. 一键启动
./start.sh
脚本会自动完成:
- ✅ 检查Docker依赖
- ✅ 创建必要目录
- ✅ 生成SSL证书
- ✅ 配置后端环境变量
- ✅ 构建前端
- ✅ 启动所有服务
- ✅ 等待健康检查
方式二:手动启动
# 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
- 访问示例:https://imeeting.yourdomain.com
⚙️ 环境变量配置
必须配置项
编辑 .env 文件,修改以下配置:
# 七牛云存储(必填,否则无法上传文件)
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
可选配置项
# 应用访问地址(用于生成二维码等)
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/
🔧 日常管理
使用管理脚本(推荐)
./manage.sh
交互式菜单提供以下功能:
- 查看服务状态
- 查看实时日志
- 重启所有服务
- 重启单个服务
- 进入容器终端
- 备份数据库
- 恢复数据库
- 清理Redis缓存
- 更新服务
- 查看资源使用
- 导出日志
常用命令
# 查看服务状态
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
简要步骤:
- 在接入服务器安装Nginx
- 使用Let's Encrypt获取SSL证书
- 配置Nginx反向代理到iMeeting服务器IP
- 配置DNS A记录指向接入服务器
配置示例:
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;
# ... 其他配置
}
}
🔍 故障排查
查看日志
# 服务日志
docker-compose logs -f
# 文件日志
tail -f data/logs/nginx/imeeting_error.log
tail -f data/logs/backend/*.log
检查服务状态
docker-compose ps
所有服务应显示 healthy 状态。
测试连接
# 测试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。
🔄 更新部署
更新代码
# 拉取最新代码
git pull
# 重新构建
docker-compose build
# 重启服务
docker-compose up -d
仅更新前端
cd frontend
npm run build
cd ..
docker-compose build frontend
docker-compose up -d frontend
docker-compose restart nginx
仅更新后端
docker-compose build backend
docker-compose up -d backend
💾 备份与恢复
备份数据库
# 使用管理脚本
./manage.sh # 选择"6) 备份数据库"
# 或手动执行
docker-compose exec mysql mysqldump -uroot -p imeeting > backup.sql
备份所有数据
# 备份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/
恢复数据
# 恢复数据库
docker-compose exec -T mysql mysql -uroot -p imeeting < backup.sql
# 恢复data目录
tar xzf imeeting_backup_20240101.tar.gz
🛡️ 安全提示
生产环境部署前,请务必:
-
✅ 修改所有默认密码
- MYSQL_ROOT_PASSWORD
- MYSQL_PASSWORD
- REDIS_PASSWORD
-
✅ 配置真实SSL证书
- 使用Let's Encrypt或商业证书
- 不要使用自签名证书
-
✅ 设置文件权限
chmod 600 .env backend/.env chmod 600 nginx/ssl/server.key -
✅ 启用防火墙
ufw allow 80/tcp ufw allow 443/tcp ufw enable -
✅ 定期备份数据
- 设置自动备份脚本
- 异地备份
-
✅ 监控日志
- 定期检查错误日志
- 设置日志轮转
📚 更多信息
详细的部署说明、配置选项、性能优化等,请查看:
- 详细部署文档: DOCKER_DEPLOYMENT.md
- Nginx配置说明: nginx/README.md
🆘 获取帮助
如遇问题:
- 查看日志:
docker-compose logs -f - 查看健康状态:
docker-compose ps - 查看详细文档:
DOCKER_DEPLOYMENT.md - 提交Issue到项目仓库
📞 快速命令参考
# 启动
./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
祝您使用愉快! 🎉