# 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 ``` --- **祝您使用愉快!** 🎉