docker compose打包ruoyi项目

news/2025/10/28 13:43:09/文章来源:https://www.cnblogs.com/ch-1105/p/19171582

docker打包ruoyi项目

创建好docker相关文件夹

  1. mysql
  2. backend
  3. fronted

准备数据库文件

存放位置为源码根目录/docker/mysql/init下

这里使用dbeaver进行数据库表以及数据导出

注意重点:在导出的sql文件第一行添加

/*!40101 SET NAMES utf8 */;

这一步解决后续问题 Docker初始化MySQL脚本的时候乱码,这里是因为容器自身的编码格式不是utf8,这就导致初始化之后的数据中文乱码。

创建用户脚本,与之前sql放在同一个位置

/*!40101 SET NAMES utf8 */;
-- docker/mysql/init/01-create-user.sql
-- 1. 若用户已存在(镜像自动创建),无需重复创建,直接授权即可
-- 2. 授予 ruoyi_user 对 ry_vue 数据库的所有操作权限(最小权限原则)
GRANT ALL PRIVILEGES ON ry_vue.* TO 'ruoyi_user'@'%';
-- 刷新权限,立即生效
FLUSH PRIVILEGES;

编写后端Dockerfile /docker/backend

# docker/backend/Dockerfile# Stage 1: Build the application using Maven
# 选择一个包含 Maven 和 JDK 的基础镜像 (根据 RuoYi 要求选择 JDK 版本, 如 8 或 11)
FROM maven:3.8.5-openjdk-17 AS build# 设置工作目录为 /app
WORKDIR /app# 复制 Maven 包装器和项目定义文件 (利用缓存)
# 注意:这里的 pom.xml 和模块路径是相对于 Dockerfile 的位置调整的
# 我们将在 Docker Compose 中设置 build context 为 RuoYi-Vue 根目录
COPY pom.xml .
COPY ruoyi-common ruoyi-common
COPY ruoyi-framework ruoyi-framework
COPY ruoyi-system ruoyi-system
COPY ruoyi-quartz ruoyi-quartz
COPY ruoyi-generator ruoyi-generator
COPY ruoyi-admin ruoyi-admin# 3. 新增:先安装基础模块 ruoyi-common 到本地仓库
# 进入 ruoyi-common 目录,执行 mvn install(-DskipTests 跳过测试,加速)
WORKDIR /app/ruoyi-common
RUN mvn clean install -DskipTests# 下载依赖 (如果 pom.xml 或模块定义未改变,此层会被缓存)
# 如果只需要构建 ruoyi-admin,可以优化此步骤,但完整构建更简单
# 4. 回到根目录,构建目标模块 ruoyi-admin(原有命令不变)
WORKDIR /app
#RUN mvn dependency:go-offline -B# 执行 Maven 打包命令,跳过测试
# -pl ruoyi-admin 指定只打包 ruoyi-admin 模块
# -am 同时构建依赖的模块
RUN mvn clean package -pl ruoyi-admin -am -DskipTests# 使用一个精简的 JRE 镜像
FROM openjdk:17-jdk-alpineWORKDIR /app# 从构建阶段复制构建好的 Jar 包
# Jar 包通常在模块的 target 目录下
COPY --from=build /app/ruoyi-admin/target/ruoyi-admin.jar ./app.jar# 暴露后端服务端口 (默认 8080)
EXPOSE 8080# 设置容器启动时执行的命令
# 使用 exec 格式,允许传递信号
# 通过环境变量传递数据库和 Redis 配置 (将在 docker-compose 中设置)
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=true&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true", \"--spring.datasource.username=${RUOYI_MYSQL_USER:root}", \"--spring.datasource.password=${RUOYI_MYSQL_PASS:password}", \"--spring.redis.host=${RUOYI_REDIS_HOST:redis}", \"--spring.redis.port=${RUOYI_REDIS_PORT:6379}", \"--spring.redis.password=${RUOYI_REDIS_PASS:}" \]
# 注意: 上述配置覆盖了 application.yml 中的值。确保环境变量名与 Docker Compose 中一致。
# useSSL=false 在开发或内部网络通常可以接受,生产环境建议根据情况配置 SSL。

编写前端Dockerfile /docker/frontend

# docker/frontend/Dockerfile# Stage 1: Build the Vue application
# 选择一个 Node.js 镜像 (版本需与 ruoyi-ui 兼容, 查看 package.json 或咨询项目)
FROM node:18 AS builderWORKDIR /app# 切换淘宝镜像源加速 (可选)RUN npm config set registry https://registry.npmmirror.com# 复制 package.json 和 lock 文件 (利用缓存)
# 假设 build context 是 RuoYi-Vue 根目录
COPY ruoyi-ui/package.json ruoyi-ui/package-lock.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
# 查看 ruoyi-ui/package.json 中的 build 命令, 通常是 build:prod
RUN npm run build:prod
# 如果使用 npm: RUN npm run build:prod# Stage 2: Serve the built files using Nginx
# 使用轻量级 Nginx 镜像
FROM nginx:1.23-alpine# 移除 Nginx 默认配置
RUN rm /etc/nginx/conf.d/default.conf# 复制自定义的 Nginx 配置文件 (下一步创建)
COPY docker/frontend/nginx.conf /etc/nginx/conf.d/ruoyi.conf
# 注意: 这个路径是相对于 Dockerfile 的位置,所以 nginx.conf 要放在 docker/frontend/ 下# 从构建阶段复制构建好的前端静态文件到 Nginx 的 web 根目录
# 构建产物通常在 ruoyi-ui/dist 目录下
COPY --from=builder /app/ruoyi-ui/dist /usr/share/nginx/html# 暴露 Nginx 端口
EXPOSE 80# Nginx 默认会以前台模式运行,不需要显式 CMD 或 ENTRYPOINT

准备nginx.conf 位于前端文件夹下

# docker/frontend/nginx.confserver {listen       80;server_name  localhost; # 或者你的域名charset utf-8;  # 关键:强制静态文件编码为 UTF-8#charset koi8-r;#access_log  /var/log/nginx/host.access.log  main;error_log /var/log/nginx/error.log warn;location / {root   /usr/share/nginx/html;index  index.html index.htm;# 解决 Vue Router History 模式下刷新 404 的问题try_files $uri $uri/ /index.html;}# 配置 API 代理,将前端的 /prod-api 请求转发给后端服务# /prod-api 这个前缀需要与 ruoyi-ui/.env.production 中的 VUE_APP_BASE_API 一致location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 转发到后端服务的地址和端口 (ruoyi-backend 是 docker-compose 中的服务名)proxy_pass http://ruoyi-backend:8080/;# 可选: 移除 /prod-api 前缀转发给后端# rewrite ^/prod-api/(.*)$ /$1 break;# RuoYi 后端通常不需要移除前缀,可以直接接收 /prod-api/ 开头的请求}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

编写docker-compose.yml 文件 存放在源码根目录

# docker-compose.yml
version: '3.8'services:mysql:image: mysql:8.0 # 或 8.0, 确保与 RuoYi 兼容container_name: ruoyi-mysqlenvironment:MYSQL_ROOT_PASSWORD: ${RUOYI_MYSQL_ROOT_PASS:-password} # 设置 root 密码 (默认 password)MYSQL_DATABASE: ${RUOYI_MYSQL_DB:-ry_vue}            # 创建的数据库名 (默认 ry-vue)MYSQL_USER: ${RUOYI_MYSQL_USER:-ruoyi_user}                 # 使用的用户 (这里为了简单用 root,生产环境建议创建独立用户)MYSQL_PASSWORD: ${RUOYI_MYSQL_PASS:-ruoyi_user}         # 用户的密码ports:- "${RUOYI_MYSQL_EXPOSE_PORT:-3306}:3306" # 映射到宿主机端口 (可选)volumes:- mysql_data:/var/lib/mysql                 # 数据持久化- ./docker/mysql/init:/docker-entrypoint-initdb.d # 挂载初始化脚本目录networks:- ruoyi-netrestart: unless-stoppedcommand: # 设置 MySQL 字符集等--character-set-server=utf8mb4--collation-server=utf8mb4_unicode_ciredis:image: redis:6.2 # 选择合适的 Redis 版本container_name: ruoyi-redis# environment:# 如果 Redis 需要密码# REDIS_PASSWORD: ${RUOYI_REDIS_PASS:-} # 默认无密码command: ["redis-server", "--requirepass", "${RUOYI_REDIS_PASS:-}"] # 启动时设置密码 (如果环境变量为空则无密码)ports:- "${RUOYI_REDIS_EXPOSE_PORT:-6379}:6379" # 映射到宿主机端口 (可选)volumes:- redis_data:/data # 数据持久化networks:- ruoyi-netrestart: unless-stoppedruoyi-backend:container_name: ruoyi-backendbuild:context: . # 构建上下文是当前目录 (ruoyi-Vue 根目录)dockerfile: docker/backend/Dockerfile # 指定 Dockerfile 路径environment:# 这些环境变量会传递给后端 Dockerfile 的 ENTRYPOINTRUOYI_MYSQL_HOST: mysql # 使用服务名作为 HostRUOYI_MYSQL_PORT: 3306RUOYI_MYSQL_DB: ${RUOYI_MYSQL_DB:-ry_vue}RUOYI_MYSQL_USER: ${RUOYI_MYSQL_USER:-ruoyi_user}RUOYI_MYSQL_PASS: ${RUOYI_MYSQL_PASS:-ruoyi_user}RUOYI_REDIS_HOST: redis # 使用服务名作为 HostRUOYI_REDIS_PORT: 6379RUOYI_REDIS_PASS: ${RUOYI_REDIS_PASS:-}SERVER_PORT: 8080# 可以添加其他 Spring Boot 配置覆盖, 如 SERVER_PORT# SERVER_PORT: 8080ports:- "${RUOYI_BACKEND_EXPOSE_PORT:-8080}:8080" # 映射后端端口depends_on: # 确保数据库和 Redis 先启动 (但不保证完全可用)- mysql- redisnetworks:- ruoyi-netrestart: unless-stoppedruoyi-frontend:container_name: ruoyi-frontendbuild:context: . # 构建上下文是当前目录dockerfile: docker/frontend/Dockerfile # 指定 Dockerfile 路径ports:- "${RUOYI_FRONTEND_EXPOSE_PORT:-80}:80" # 映射前端 Nginx 端口到宿主机 80depends_on:- ruoyi-backend # 依赖后端服务 (确保后端服务名在 Nginx 配置中正确)networks:- ruoyi-netrestart: unless-stoppednetworks:ruoyi-net: # 定义网络driver: bridgevolumes: # 定义数据卷mysql_data:redis_data:

注意事项

  1. 这里的话mysql不能以root用户来进行设置,需要自定义用户,这里的话在配置文件中编写好账号密码会自动创建,后续根据脚本文件夹下的sql文件来对数据库表赋予用户权限
  2. 注意文件相关的一致性,可能会出现一些地方不一致的问题,这里注意检查,特别是端口等
  3. 在使用wsl环境下 注意端口偏移,不然可能会有win环境下已有的服务冲突

常用命令

#将源码文件上传到服务器后,跳转到源码根目录# 首次构建并后台启动所有服务
docker compose up -d --build# 如果后续代码或 Dockerfile 有更新,需要重新构建
docker compose build
docker compose up -d# 删除 Docker Compose 项目的所有资源(包括存储卷)
# 在你的 docker-compose.yml 所在目录执行以下命令,一次性删除容器、网络、存储卷(注意:此操作会永久删除卷中的数据,如数据库数据,请先备份必要数据):
docker compose down --volumes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/948725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu挂载磁盘记录

ubuntu挂载磁盘记录 完整步骤 sudo fdisk -l ## 查看待使用的磁盘 ls -l /dev/sd* ## 查看装着的额外的磁盘 lsblk -f ## 查看磁盘格式,确认是ext4** 我这里有两个数据磁盘,都没分区,刚好有一个是ext4的,就使用…

金凯德是几线品牌?以全产业链与智慧创新,铸就门业一线品牌地位

金凯德是门业市场中公认的一线品牌。它不仅是行业内的领导品牌之一,还凭借其综合实力,在2024年跻身房建供应链企业综合实力TOP500-首选土建材料类(钢制入户门类)10强之列。 下面这个表格能让你对金凯德的综合实力有…

完整教程:《时序数据监控平台优化指南:从查询超时到秒级响应,指标下的存储与检索重构实践》

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

价值AI构建之路:从价值原子到文明共识的完整架构

价值AI构建之路:从价值原子到文明共识的完整架构 当人工智能开始参与重大决策时,我们面临的不仅是技术挑战,更是文明级的问题:如何让机器理解人类的价值观?本文提出了一套完整的价值AI架构,从哲学基础到工程实现…

2025西安楼房地产口碑排行榜单

摘要 随着西安楼市持续升温,2025年口碑榜单正式发布,基于市场调研、用户评价和行业数据,为您呈现最具权威的房地产公司排名。本文旨在帮助购房者了解行业发展趋势,提供参考表单,助您做出明智选择。榜单综合考量公…

HtmlRAG

第一次尝试英文原文精读,很好的体验,以后都不要依赖翻译插件了!HtmlRAG阅读笔记 HTML is Better Than Plain Text for Modeling Retrieved Knowledge in RAG Systems 把论文完整标题放在正文而不是标题能不能降低检…

Luogu P14309 【MX-S8-T2】配对 题解 [ 蓝 ] [ 树形 DP ] [ 贡献转化 ] [ 分类讨论 ]

配对 巨大困难题,赛时只会了启发式合并的部分分。 观察匹配的路径,显然有一个结论:所有匹配的路径不会经过同一条边。 所以可以先考虑不带修、\(n\) 为偶数的做法:对整棵树进行遍历,遍历到 \(u\) 的子树时如果遇到…

团队项目1-团队展示选题-校园二手书交易平台

📘 校园二手书交易平台项目报告项目 内容这个作业属于哪个课程 [软件工程](首页 - 计科23级12班 - 广东工业大学 - 班级博客 - 博客园)这个作业要求在哪里 [作业要求](结对项目 - 作业 - 计科23级12班 - 班级博客 - …

2025年10月精益降本咨询公司推荐:实力榜横向对比

2025年10月,制造业利润被原材料波动、订单碎片化、能耗红线三面夹击,企业主搜索“精益降本咨询公司”时,往往带着同一串焦虑:方案能否真正落地、效益能否覆盖咨询费、团队能否听懂现场语言。工信部2024年度报告显示…

ROS2下利用遥控手柄控制瑞尔曼RM65-B机器人 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Debian使用记录

目前,我使用的是pop_os! 1.检查是否需要换国内源 sudo vi /etc/apt/sources.list 2.更新 sudo apt update sudo apt upgrade -y 3.安装vim sudo apt install vim 4.安装cuda nvidia-smi #查看版本 wget https://de…

2025年10月生产现场管理咨询公司推荐:五家对比评价指南

把工厂交给自己人还是交给外部顾问,是制造业老板每晚都在算的账。订单碎片化、原材料波动、熟练工流失,让“现场”成为利润流失的最大黑洞。工信部2024年抽查显示,60%以上中小企业现场OEE低于65%,库存周转天数比行…

2025年10月生产现场管理咨询公司推荐:五家口碑排行对比

把工厂交给自己人管,却还是被“交货拖、浪费多、现场乱”反复折磨,是不少制造业老板在2025年的真实写照。工信部抽样显示,六成以上中小企业现场5S停留在“墙上标语”,产线OEE低于65%,库存周转天数比行业均值多出1…

2025年10月生产现场管理咨询公司评测:五强榜单与选型要点

生产现场管理是制造企业降本、提效、稳质的“最后一公里”。2025年,工信部《制造业质量管理提升行动报告》指出,约62%的中小工厂仍被“5S不彻底、标准作业缺失、换型时间长”等现场问题拖累,产能利用率平均不足75%。…

2025年10月精益降本咨询公司排行:五家实战机构全评测

“订单利润被成本吃掉、库存周转慢、现场浪费看不见”——这是2025年制造业高管在季度经营分析会上出现频率最高的三类痛点。工信部《中小企业经营质量报告》显示,1-8月规模以上工业企业每百元营收成本仍处84.3元高位…

2025年10月采购管理咨询公司推荐:口碑榜对比指南

在供应链波动、原材料价格高企、合规要求趋严的2025年,企业采购负责人普遍面临“降本空间有限、交付风险陡增、数字化工具不会选”的三重夹击。工信部《制造业采购管理白皮书》显示,超过62%的中小制造企业尚未建立标…

2025年10月采购管理咨询公司推荐:排行榜与选择指南

把“采购降本”做成可量化的硬指标,是多数制造企业与成长型公司2025年最紧迫的议题。调研显示,原材料成本每降低1%,净利润可提升5%—8%,但超过六成企业仍靠经验砍价,缺少系统方法,导致议价空间逐年收窄、交付风险…

2025年10月研发管理咨询公司推荐:五强对比榜助力精准选型

2025年10月,当企业把“产品领先”写进战略,却苦于研发周期过长、成果转化率低、跨部门协同卡顿,寻找一家真正懂制造、懂数字化、懂中国团队特点的研发管理咨询公司,就成了研发总监和总经理的共性痛点。工信部2024年…

CSP2025考前恶补Ⅰ:DP

题单:AtCoder 的 Educational DP Contest:https://atcoder.jp/contests/dp A - Frog 1有 \(N\) 个台阶。每个台阶编号为 \(1, 2, \ldots, N\)。对于每个 \(i\)(\(1 \leq i \leq N\)),第 \(i\) 个台阶的高度为 \(h…