添加使用docker-compose进行部署ruoyi-vue项目
parent
5c97421c0f
commit
6a80ad9dc5
|
|
@ -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:
|
||||
|
|
@ -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。
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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、部门表
|
||||
-- ----------------------------
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ spring:
|
|||
# 数据库索引
|
||||
database: 0
|
||||
# 密码
|
||||
password:
|
||||
password: 123456
|
||||
# 连接超时时间
|
||||
timeout: 10s
|
||||
lettuce:
|
||||
|
|
|
|||
Loading…
Reference in New Issue