wecom-dashboards/DOCKER_DEPLOY.md

7.3 KiB
Raw Blame History

若依项目 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_URLSPRING_DATASOURCE_USERNAMESPRING_DATASOURCE_PASSWORD
  • Redis 连接: 通过环境变量 SPRING_REDIS_HOSTSPRING_REDIS_PORT
  • 上传路径: 使用 Docker 卷挂载 /home/ruoyi/uploadPath

3. Docker Compose 配置

包含以下服务:

  • mysql: MySQL 5.7 数据库
  • redis: Redis 6 缓存
  • backend: Spring Boot 后端服务
  • frontend: Nginx 前端服务

部署步骤

步骤 1: 准备数据库脚本

确保 sql/ 目录下有数据库初始化脚本:

cd Ruoyi-Vue-2/wecom-dashboards
ls sql/
# 应该包含: ry_20250522.sql, quartz.sql, schema.sql 等

步骤 2: 修改配置(可选)

如果需要修改数据库密码或其他配置,编辑 docker-compose.yml

services:
  mysql:
    environment:
      MYSQL_ROOT_PASSWORD: your_password  # 修改数据库密码

  backend:
    environment:
      SPRING_DATASOURCE_PASSWORD: your_password  # 同步修改

步骤 3: 构建和启动服务

# 进入项目目录
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 秒)

查看后端日志确认启动成功:

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 配置中添加:

# /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

nginx -t  # 测试配置
nginx -s reload  # 重新加载配置

现在可以通过以下 URL 访问:

http://your-domain.com/ashai-wecom-test

方案 2: 修改 Docker Compose 端口映射

如果不想使用反向代理,可以修改 docker-compose.yml 中的端口映射:

services:
  frontend:
    ports:
      - "8081:80"  # 改为其他未占用的端口

常用命令

# 启动服务
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: 文件上传目录

数据会持久化保存,即使容器重启也不会丢失。

备份和恢复

备份数据库

docker-compose exec mysql mysqldump -uroot -ppassword ruoyi > backup.sql

恢复数据库

docker-compose exec -T mysql mysql -uroot -ppassword ruoyi < backup.sql

备份上传文件

docker cp ruoyi-backend:/home/ruoyi/uploadPath ./uploadPath_backup

故障排查

1. 前端无法访问

检查前端容器日志:

docker-compose logs frontend

确认 Nginx 配置正确:

docker-compose exec frontend cat /etc/nginx/conf.d/default.conf

2. 后端无法连接数据库

检查后端日志:

docker-compose logs backend

确认 MySQL 已启动:

docker-compose ps mysql

进入 MySQL 容器检查:

docker-compose exec mysql mysql -uroot -ppassword -e "SHOW DATABASES;"

3. API 请求失败

检查 Nginx 代理配置:

docker-compose exec frontend cat /etc/nginx/conf.d/default.conf

确认后端服务可访问:

curl http://localhost:8080/

4. 前端静态资源 404

确认前端构建时 publicPath 配置正确:

# 检查 vue.config.js
cat ruoyi-ui/vue.config.js | grep publicPath

确认 Nginx 中的文件路径:

docker-compose exec frontend ls -la /usr/share/nginx/html/ashai-wecom-test

性能优化

1. 调整 JVM 参数

修改 Dockerfile.backend,在 ENTRYPOINT 中添加 JVM 参数:

ENTRYPOINT ["java", "-Xms512m", "-Xmx1024m", "-jar", "app.jar"]

2. 启用 Nginx Gzip

前端 Dockerfile 已配置 gzip 压缩,确保 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. 定期备份: 设置定时任务定期备份数据库和文件

更新部署

当代码更新后,重新部署:

# 拉取最新代码
git pull

# 重新构建并启动
docker-compose up -d --build

# 查看日志确认启动成功
docker-compose logs -f

联系支持

如有问题,请查看: