wecom-dashboards/DOCKER_DEPLOY.md

354 lines
7.3 KiB
Markdown
Raw Permalink Normal View History

2026-02-08 08:22:43 +00:00
# 若依项目 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