354 lines
7.3 KiB
Markdown
354 lines
7.3 KiB
Markdown
|
|
# 若依项目 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
|