From 6a80ad9dc59675e6f0387f3a2cb57961e6eb0c3b Mon Sep 17 00:00:00 2001 From: cpc-lib Date: Sat, 10 Jan 2026 23:52:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BD=BF=E7=94=A8docker-comp?= =?UTF-8?q?ose=E8=BF=9B=E8=A1=8C=E9=83=A8=E7=BD=B2ruoyi-vue=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 58 +++++++++++-------- docker/backend/Dockerfile | 15 +++-- docker/frontend/Dockerfile | 21 +++++-- docker/mysql/init/quartz.sql | 10 ++++ docker/mysql/init/ry_20250522.sql | 11 ++++ .../src/main/resources/application.yml | 2 +- 6 files changed, 78 insertions(+), 39 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8db96e640..e3a56ef02 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,41 +1,51 @@ -# docker-compose.yml -version: '3.8' +networks: + ruoyi-env: # 定义网络 + driver: bridge services: mysql: image: registry.cn-hangzhou.aliyuncs.com/snow-io/mysql:5.7.44 # 或 8.0, 确保与 RuoYi 兼容 container_name: ruoyi-mysql environment: - MYSQL_ROOT_PASSWORD: ${RUOYI_MYSQL_ROOT_PASS:-password} # 设置 root 密码 (默认 password) - MYSQL_DATABASE: ${RUOYI_MYSQL_DB:-ry-vue} # 创建的数据库名 (默认 ry-vue) - MYSQL_USER: ${RUOYI_MYSQL_USER:-root} # 使用的用户 (这里为了简单用 root,生产环境建议创建独立用户) - MYSQL_PASSWORD: ${RUOYI_MYSQL_PASS:-password} # 用户的密码 + MYSQL_ROOT_PASSWORD: ${RUOYI_MYSQL_ROOT_PASS:-cpc!23#@xyz} # 设置 root 密码 (默认 password) ports: - "${RUOYI_MYSQL_EXPOSE_PORT:-3306}:3306" # 映射到宿主机端口 (可选) volumes: - mysql_data:/var/lib/mysql # 数据持久化 - ./docker/mysql/init:/docker-entrypoint-initdb.d # 挂载初始化脚本目录 networks: - - ruoyi-net + - ruoyi-env restart: unless-stopped command: # 设置 MySQL 字符集等 - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_general_ci + healthcheck: + test: [ "CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-p${RUOYI_MYSQL_ROOT_PASS:-cpc!23#@xyz}" ] + interval: 5s + timeout: 3s + retries: 30 redis: image: registry.cn-hangzhou.aliyuncs.com/snow-io/redis:7.2 # 选择合适的 Redis 版本 container_name: ruoyi-redis environment: - # 如果 Redis 需要密码 - # REDIS_PASSWORD: ${RUOYI_REDIS_PASS:-} # 默认无密码 - command: [ "redis-server", "--requirepass", "${RUOYI_REDIS_PASS:-}" ] # 启动时设置密码 (如果环境变量为空则无密码) + # 如果 Redis 需要密码 + REDIS_PASSWORD: ${RUOYI_REDIS_PASS:-123456} # 默认无密码 + command: [ "redis-server", "--requirepass", "${RUOYI_REDIS_PASS:-123456}" ] # 启动时设置密码 (如果环境变量为空则无密码) ports: - "${RUOYI_REDIS_EXPOSE_PORT:-6379}:6379" # 映射到宿主机端口 (可选) volumes: - redis_data:/data # 数据持久化 networks: - - ruoyi-net + - ruoyi-env restart: unless-stopped + healthcheck: + test: [ "CMD", "redis-cli", "-a", "${RUOYI_REDIS_PASS:-123456}", "ping" ] + interval: 5s + timeout: 3s + retries: 30 + + ruoyi-backend: container_name: ruoyi-backend @@ -48,19 +58,21 @@ services: RUOYI_MYSQL_PORT: 3306 RUOYI_MYSQL_DB: ${RUOYI_MYSQL_DB:-ry-vue} RUOYI_MYSQL_USER: ${RUOYI_MYSQL_USER:-root} - RUOYI_MYSQL_PASS: ${RUOYI_MYSQL_PASS:-password} + RUOYI_MYSQL_PASS: ${RUOYI_MYSQL_PASS:-cpc!23#@xyz} RUOYI_REDIS_HOST: redis # 使用服务名作为 Host RUOYI_REDIS_PORT: 6379 - RUOYI_REDIS_PASS: ${RUOYI_REDIS_PASS:-} + RUOYI_REDIS_PASS: ${RUOYI_REDIS_PASS:-123456} # 可以添加其他 Spring Boot 配置覆盖, 如 SERVER_PORT # SERVER_PORT: 8080 ports: - "${RUOYI_BACKEND_EXPOSE_PORT:-8080}:8080" # 映射后端端口 - depends_on: # 确保数据库和 Redis 先启动 (但不保证完全可用) - - mysql - - redis + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_healthy networks: - - ruoyi-net + - ruoyi-env restart: unless-stopped ruoyi-frontend: @@ -73,13 +85,9 @@ services: depends_on: - ruoyi-backend # 依赖后端服务 (确保后端服务名在 Nginx 配置中正确) networks: - - ruoyi-net + - ruoyi-env restart: unless-stopped -networks: - ruoyi-net: # 定义网络 - driver: bridge - volumes: # 定义数据卷 mysql_data: - redis_data: + redis_data: \ No newline at end of file diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 0459146e0..7587cf0df 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -2,7 +2,7 @@ # Stage 1: Build the application using Maven # 选择一个包含 Maven 和 JDK 的基础镜像 (根据 RuoYi 要求选择 JDK 版本, 如 8 或 11) -FROM maven:3.8-openjdk-11 AS builder +FROM registry.cn-hangzhou.aliyuncs.com/snow-io/maven:3.8-openjdk-11 AS builder # 设置工作目录为 /app WORKDIR /app @@ -21,7 +21,6 @@ COPY ruoyi-admin ruoyi-admin # 下载依赖 (如果 pom.xml 或模块定义未改变,此层会被缓存) # 如果只需要构建 ruoyi-admin,可以优化此步骤,但完整构建更简单 -RUN mvn dependency:go-offline -B # 复制所有源代码 (如果源代码改变,从这里开始的层会重新构建) # (上面已经复制了,这一步是为了确保所有文件都在) @@ -30,11 +29,11 @@ RUN mvn dependency:go-offline -B # 执行 Maven 打包命令,跳过测试 # -pl ruoyi-admin 指定只打包 ruoyi-admin 模块 # -am 同时构建依赖的模块 -RUN mvn clean package -pl ruoyi-admin -am -DskipTests +RUN mvn clean package -DskipTests # Stage 2: Create the runtime image # 使用一个精简的 JRE 镜像 -FROM openjdk:11-jre-slim +FROM registry.cn-hangzhou.aliyuncs.com/snow-io/eclipse-temurin:11-jre WORKDIR /app @@ -52,12 +51,12 @@ ENTRYPOINT ["java", \ "-Djava.security.egd=file:/dev/./urandom", \ "-jar", \ "app.jar", \ - "--spring.datasource.url=jdbc:mysql://${RUOYI_MYSQL_HOST:mysql}:${RUOYI_MYSQL_PORT:3306}/${RUOYI_MYSQL_DB:ry-vue}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai", \ - "--spring.datasource.username=${RUOYI_MYSQL_USER:root}", \ - "--spring.datasource.password=${RUOYI_MYSQL_PASS:password}", \ + "--spring.datasource.druid.master.url=jdbc:mysql://${RUOYI_MYSQL_HOST:mysql}:${RUOYI_MYSQL_PORT:3306}/${RUOYI_MYSQL_DB:ry-vue}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai", \ + "--spring.datasource.druid.master.username=${RUOYI_MYSQL_USER:root}", \ + "--spring.datasource.druid.master.password=${RUOYI_MYSQL_PASS:cpc!23#@xyz}", \ "--spring.redis.host=${RUOYI_REDIS_HOST:redis}", \ "--spring.redis.port=${RUOYI_REDIS_PORT:6379}", \ - "--spring.redis.password=${RUOYI_REDIS_PASS:}" \ + "--spring.redis.password=${RUOYI_REDIS_PASS:123456}" \ ] # 注意: 上述配置覆盖了 application.yml 中的值。确保环境变量名与 Docker Compose 中一致。 # useSSL=false 在开发或内部网络通常可以接受,生产环境建议根据情况配置 SSL。 \ No newline at end of file diff --git a/docker/frontend/Dockerfile b/docker/frontend/Dockerfile index aa1569e0c..4d97460b8 100644 --- a/docker/frontend/Dockerfile +++ b/docker/frontend/Dockerfile @@ -2,26 +2,37 @@ # Stage 1: Build the Vue application # 选择一个 Node.js 镜像 (版本需与 ruoyi-ui 兼容, 查看 package.json 或咨询项目) -FROM node:16 AS builder +FROM registry.cn-hangzhou.aliyuncs.com/snow-io/node:16 AS builder WORKDIR /app # 切换淘宝镜像源加速 (可选) RUN npm config set registry https://registry.npmmirror.com +# 复制 package.json 和 lock 文件 (利用缓存) +# 假设 build context 是 RuoYi-Vue 根目录 +# ruoyi-ui/yarn.lock +COPY ruoyi-ui/package.json ./ruoyi-ui/ +# 如果使用 npm,复制 package-lock.json + +# 进入 UI 目录安装依赖 +WORKDIR /app/ruoyi-ui +RUN npm install +# 如果使用 npm: RUN npm install + # 复制 UI 源代码 +WORKDIR /app COPY ruoyi-ui ./ruoyi-ui # 进入 UI 目录执行构建 WORKDIR /app/ruoyi-ui -#安装依赖 -RUN yarn install # 查看 ruoyi-ui/package.json 中的 build 命令, 通常是 build:prod -RUN yarn run build:prod +RUN npm run build:prod # 如果使用 npm: RUN npm run build:prod # Stage 2: Serve the built files using Nginx -FROM nginx:1.23-alpine # 使用轻量级 Nginx 镜像 +# 使用轻量级 Nginx 镜像 +FROM registry.cn-hangzhou.aliyuncs.com/snow-io/nginx:1.23-alpine # 移除 Nginx 默认配置 RUN rm /etc/nginx/conf.d/default.conf diff --git a/docker/mysql/init/quartz.sql b/docker/mysql/init/quartz.sql index cee613b7b..54903fea3 100644 --- a/docker/mysql/init/quartz.sql +++ b/docker/mysql/init/quartz.sql @@ -1,3 +1,13 @@ +CREATE DATABASE IF NOT EXISTS `ry-vue` + DEFAULT CHARACTER SET utf8mb4 + DEFAULT COLLATE utf8mb4_general_ci; -- MySQL 8.0 推荐 + +-- 如果你是 MySQL 5.7,更通用的排序规则用这个: +-- DEFAULT COLLATE utf8mb4_general_ci; + +-- 2) 进入数据库 +USE `ry-vue`; + DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; diff --git a/docker/mysql/init/ry_20250522.sql b/docker/mysql/init/ry_20250522.sql index 20e382756..96c23381e 100644 --- a/docker/mysql/init/ry_20250522.sql +++ b/docker/mysql/init/ry_20250522.sql @@ -1,3 +1,14 @@ +CREATE DATABASE IF NOT EXISTS `ry-vue` + DEFAULT CHARACTER SET utf8mb4 + DEFAULT COLLATE utf8mb4_general_ci; -- MySQL 8.0 推荐 + +-- 如果你是 MySQL 5.7,更通用的排序规则用这个: +-- DEFAULT COLLATE utf8mb4_general_ci; + +-- 2) 进入数据库 +USE `ry-vue`; + + -- ---------------------------- -- 1、部门表 -- ---------------------------- diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index ff21fe0d4..fdb1bc198 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -74,7 +74,7 @@ spring: # 数据库索引 database: 0 # 密码 - password: + password: 123456 # 连接超时时间 timeout: 10s lettuce: