imetting/DOCKER_README.md

9.4 KiB
Raw Permalink Blame History

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入口仅HTTPSSL由接入服务器处理
  • 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

域名访问HTTPS

⚙️ 环境变量配置

必须配置项

编辑 .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

交互式菜单提供以下功能:

  1. 查看服务状态
  2. 查看实时日志
  3. 重启所有服务
  4. 重启单个服务
  5. 进入容器终端
  6. 备份数据库
  7. 恢复数据库
  8. 清理Redis缓存
  9. 更新服务
  10. 查看资源使用
  11. 导出日志

常用命令

# 查看服务状态
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

简要步骤

  1. 在接入服务器安装Nginx
  2. 使用Let's Encrypt获取SSL证书
  3. 配置Nginx反向代理到iMeeting服务器IP
  4. 配置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;
        # ... 其他配置
    }
}

详见:GATEWAY_NGINX_CONFIG.md

🔍 故障排查

查看日志

# 服务日志
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

🛡️ 安全提示

生产环境部署前,请务必:

  1. 修改所有默认密码

    • MYSQL_ROOT_PASSWORD
    • MYSQL_PASSWORD
    • REDIS_PASSWORD
  2. 配置真实SSL证书

    • 使用Let's Encrypt或商业证书
    • 不要使用自签名证书
  3. 设置文件权限

    chmod 600 .env backend/.env
    chmod 600 nginx/ssl/server.key
    
  4. 启用防火墙

    ufw allow 80/tcp
    ufw allow 443/tcp
    ufw enable
    
  5. 定期备份数据

    • 设置自动备份脚本
    • 异地备份
  6. 监控日志

    • 定期检查错误日志
    • 设置日志轮转

📚 更多信息

详细的部署说明、配置选项、性能优化等,请查看:

🆘 获取帮助

如遇问题:

  1. 查看日志:docker-compose logs -f
  2. 查看健康状态:docker-compose ps
  3. 查看详细文档:DOCKER_DEPLOYMENT.md
  4. 提交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

祝您使用愉快! 🎉