# 若依项目 Docker 部署指南 ## 概述 本文档说明如何使用 Docker 和 Docker Compose 部署若依项目,并通过子路径 `/ashai-wecom-test` 访问。 ## 前提条件 - Docker 已安装(版本 20.10+) - Docker Compose 已安装(版本 1.29+) - 服务器 80 端口已被占用,需要使用其他端口(如 8081) ## 项目结构 ``` wecom-dashboards/ ├── Dockerfile.backend # 后端 Dockerfile ├── docker-compose.yml # Docker Compose 编排文件 ├── ruoyi-ui/ │ ├── Dockerfile # 前端 Dockerfile │ └── nginx.conf # Nginx 配置文件 ├── ruoyi-admin/ │ └── src/main/resources/ │ ├── application.yml # 后端主配置 │ └── application-prod.yml # 生产环境配置 └── sql/ # 数据库初始化脚本 ``` ## 配置说明 ### 1. 前端配置 前端已配置为使用子路径 `/ashai-wecom-test`: - **vue.config.js**: `publicPath` 设置为 `/ashai-wecom-test` - **.env.production**: `VUE_APP_BASE_API` 设置为 `/prod-api` - **nginx.conf**: 配置了子路径访问和 API 代理 ### 2. 后端配置 后端配置支持环境变量注入: - **数据库连接**: 通过环境变量 `SPRING_DATASOURCE_URL`、`SPRING_DATASOURCE_USERNAME`、`SPRING_DATASOURCE_PASSWORD` - **Redis 连接**: 通过环境变量 `SPRING_REDIS_HOST`、`SPRING_REDIS_PORT` - **上传路径**: 使用 Docker 卷挂载 `/home/ruoyi/uploadPath` ### 3. Docker Compose 配置 包含以下服务: - **mysql**: MySQL 5.7 数据库 - **redis**: Redis 6 缓存 - **backend**: Spring Boot 后端服务 - **frontend**: Nginx 前端服务 ## 部署步骤 ### 步骤 1: 准备数据库脚本 确保 `sql/` 目录下有数据库初始化脚本: ```bash cd Ruoyi-Vue-2/wecom-dashboards ls sql/ # 应该包含: ry_20250522.sql, quartz.sql, schema.sql 等 ``` ### 步骤 2: 修改配置(可选) 如果需要修改数据库密码或其他配置,编辑 `docker-compose.yml`: ```yaml services: mysql: environment: MYSQL_ROOT_PASSWORD: your_password # 修改数据库密码 backend: environment: SPRING_DATASOURCE_PASSWORD: your_password # 同步修改 ``` ### 步骤 3: 构建和启动服务 ```bash # 进入项目目录 cd Ruoyi-Vue-2/wecom-dashboards # 构建并启动所有服务 docker-compose up -d --build # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs -f ``` ### 步骤 4: 等待服务启动 首次启动需要等待: 1. MySQL 初始化数据库(约 1-2 分钟) 2. 后端服务启动(约 30 秒) 3. 前端服务启动(约 10 秒) 查看后端日志确认启动成功: ```bash docker-compose logs -f backend # 看到 "Started RuoYiApplication" 表示启动成功 ``` ### 步骤 5: 访问应用 前端服务运行在 8081 端口,通过以下 URL 访问: ``` http://your-server-ip:8081/ashai-wecom-test ``` 默认登录账号: - 用户名: `admin` - 密码: `admin123` ## 集成到现有 Nginx 如果你的服务器 80 端口已经有 Nginx 在运行,可以通过反向代理将请求转发到容器: ### 方案 1: Nginx 反向代理(推荐) 在你现有的 Nginx 配置中添加: ```nginx # /etc/nginx/conf.d/ruoyi.conf 或在主配置文件中添加 server { listen 80; server_name your-domain.com; # 替换为你的域名 # 其他现有配置... # 若依项目代理 location /ashai-wecom-test { proxy_pass http://localhost:8081/ashai-wecom-test; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 600; proxy_read_timeout 600; } } ``` 重启 Nginx: ```bash nginx -t # 测试配置 nginx -s reload # 重新加载配置 ``` 现在可以通过以下 URL 访问: ``` http://your-domain.com/ashai-wecom-test ``` ### 方案 2: 修改 Docker Compose 端口映射 如果不想使用反向代理,可以修改 `docker-compose.yml` 中的端口映射: ```yaml services: frontend: ports: - "8081:80" # 改为其他未占用的端口 ``` ## 常用命令 ```bash # 启动服务 docker-compose up -d # 停止服务 docker-compose down # 重启服务 docker-compose restart # 查看日志 docker-compose logs -f [service_name] # 进入容器 docker-compose exec backend bash docker-compose exec frontend sh # 重新构建并启动 docker-compose up -d --build # 清理所有数据(包括数据库) docker-compose down -v ``` ## 数据持久化 Docker Compose 配置了以下数据卷: - `mysql-data`: MySQL 数据库文件 - `redis-data`: Redis 持久化数据 - `upload-data`: 文件上传目录 数据会持久化保存,即使容器重启也不会丢失。 ## 备份和恢复 ### 备份数据库 ```bash docker-compose exec mysql mysqldump -uroot -ppassword ruoyi > backup.sql ``` ### 恢复数据库 ```bash docker-compose exec -T mysql mysql -uroot -ppassword ruoyi < backup.sql ``` ### 备份上传文件 ```bash docker cp ruoyi-backend:/home/ruoyi/uploadPath ./uploadPath_backup ``` ## 故障排查 ### 1. 前端无法访问 检查前端容器日志: ```bash docker-compose logs frontend ``` 确认 Nginx 配置正确: ```bash docker-compose exec frontend cat /etc/nginx/conf.d/default.conf ``` ### 2. 后端无法连接数据库 检查后端日志: ```bash docker-compose logs backend ``` 确认 MySQL 已启动: ```bash docker-compose ps mysql ``` 进入 MySQL 容器检查: ```bash docker-compose exec mysql mysql -uroot -ppassword -e "SHOW DATABASES;" ``` ### 3. API 请求失败 检查 Nginx 代理配置: ```bash docker-compose exec frontend cat /etc/nginx/conf.d/default.conf ``` 确认后端服务可访问: ```bash curl http://localhost:8080/ ``` ### 4. 前端静态资源 404 确认前端构建时 `publicPath` 配置正确: ```bash # 检查 vue.config.js cat ruoyi-ui/vue.config.js | grep publicPath ``` 确认 Nginx 中的文件路径: ```bash docker-compose exec frontend ls -la /usr/share/nginx/html/ashai-wecom-test ``` ## 性能优化 ### 1. 调整 JVM 参数 修改 `Dockerfile.backend`,在 `ENTRYPOINT` 中添加 JVM 参数: ```dockerfile ENTRYPOINT ["java", "-Xms512m", "-Xmx1024m", "-jar", "app.jar"] ``` ### 2. 启用 Nginx Gzip 前端 Dockerfile 已配置 gzip 压缩,确保 Nginx 配置中启用: ```nginx gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml; ``` ### 3. 调整数据库连接池 修改 `application-prod.yml` 中的 Druid 配置。 ## 安全建议 1. **修改默认密码**: 修改 MySQL root 密码和应用管理员密码 2. **配置 Redis 密码**: 在生产环境中为 Redis 设置密码 3. **使用 HTTPS**: 配置 SSL 证书,使用 HTTPS 访问 4. **限制端口访问**: 使用防火墙限制数据库和 Redis 端口的外部访问 5. **定期备份**: 设置定时任务定期备份数据库和文件 ## 更新部署 当代码更新后,重新部署: ```bash # 拉取最新代码 git pull # 重新构建并启动 docker-compose up -d --build # 查看日志确认启动成功 docker-compose logs -f ``` ## 联系支持 如有问题,请查看: - 若依官方文档: http://doc.ruoyi.vip - Docker 官方文档: https://docs.docker.com - 项目 README: ./README.md