当前位置: 首页 > news >正文

vue3-springboot-mysql的docker部署

Docker配置原理与部署文档

概述

本文档详细说明RuoYi-Vue与BladeX集成项目的Docker部署原理,包括配置文件的作用、相互关系及数据流动。通过三个核心配置文件(docker-compose.yml、Dockerfile和docker-entrypoint.sh),实现了应用的容器化部署和灵活配置。

配置文件职责

1. docker-compose.yml

主要职责: 定义完整的应用栈,编排多容器服务

  • 指定服务组件:应用程序(ruoyi-app)、数据库(mysql)、缓存(redis)
  • 配置镜像构建参数,传递给Dockerfile
  • 设置容器运行环境变量
  • 定义端口映射、卷挂载和服务依赖
  • 支持从.env文件或环境变量加载参数值

2. Dockerfile

主要职责: 定义应用镜像的构建过程

  • 采用多阶段构建策略,减小最终镜像体积
  • 第一阶段(frontend-build):编译Vue前端应用
  • 第二阶段(backend-build):编译Spring Boot后端应用
  • 最终阶段:整合前后端资源,配置运行环境
  • 接收构建参数(ARG),动态生成前端环境配置
  • 设置容器启动入口点(docker-entrypoint.sh)

3. docker-entrypoint.sh

主要职责: 容器启动初始化和应用配置生成

  • 处理环境变量,设置默认值
  • 动态生成后端应用配置文件(application-docker.yml)
  • 使用正确的配置启动Java应用
  • 确保容器优雅启动和退出

数据流与执行顺序

构建阶段流程

  1. 执行docker-compose up命令启动部署
  2. Docker Compose解析docker-compose.yml配置
  3. 检查ruoyi-app镜像是否存在,不存在则构建
  4. 基于Dockerfile开始构建镜像:
    • 前端构建:Node.js环境下编译Vue应用
    • 后端构建:Maven环境下编译Spring Boot应用
    • 整合资源:将编译结果合并到最终镜像
  5. 构建参数流动:
    • docker-compose.yml的args部分 → Dockerfile的ARG变量
    • ARG变量 → 前端环境配置文件(.env.production)

运行阶段流程

  1. 创建并启动数据库和Redis容器
  2. 创建并启动应用容器,传入环境变量
  3. 容器启动执行docker-entrypoint.sh脚本
  4. 脚本处理环境变量并生成配置文件
  5. 启动Java应用并加载生成的配置
  6. 环境变量流动:
    • .env文件/环境变量 → docker-compose.yml的environment部分
    • environment值 → 容器环境变量
    • 容器环境变量 → docker-entrypoint.sh变量
    • 脚本变量 → 生成的application-docker.yml
    • 配置文件 → Spring应用配置

配置机制详解

环境变量替换语法

docker-compose.yml使用${VARIABLE:-default}语法,实现灵活配置:

  • 尝试读取名为VARIABLE的环境变量值
  • 如环境变量不存在或为空,使用冒号后的默认值
  • 例:${DB_PASSWORD:-password},若未设置DB_PASSWORD则使用"password"

多阶段构建优化

Dockerfile采用多阶段构建,优化镜像大小和构建效率:

  • 依赖安装与代码编译分离,利用Docker缓存机制
  • 只复制必要的编译结果到最终镜像
  • 使用轻量级基础镜像运行应用,减小体积

配置文件动态生成

entrypoint脚本通过Here Document语法生成配置:

cat > /app/config/application-docker.yml << EOF
spring:datasource:url: jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}
EOF
  • 将环境变量值插入模板中
  • 支持复杂的多行配置生成
  • 生成的配置文件由Spring Boot应用加载

部署配置说明

必要配置项

最小化配置需要设置以下环境变量:

  • 数据库连接:DB_HOST, DB_PASSWORD
  • 应用地址:API_URL, BLADE_REDIRECT_URI
  • BladeX连接:BLADE_AUTH_URL, BLADE_CLIENT_ID, BLADE_CLIENT_SECRET

数据持久化

通过卷挂载实现数据持久化:

  • 数据库数据:mysql-data卷
  • Redis数据:redis-data卷
  • 用户上传文件:./uploadPath目录
  • 应用日志:./logs目录

部署步骤

  1. 准备环境:安装Docker和Docker Compose
  2. 创建配置:编写.env文件设置环境特定参数
  3. 构建镜像:运行docker-compose build
  4. 启动服务:运行docker-compose up -d
  5. 验证部署:访问应用地址确认服务可用
  6. 查看日志:运行docker-compose logs监控运行状态

常见问题与解决方案

  1. 数据库连接失败

    • 检查DB_HOST和DB_PASSWORD配置
    • 确认数据库容器健康状态
  2. Redis连接问题

    • 如不需密码,设置REDIS_PASSWORD为空值
    • 检查Redis容器运行状态
  3. BladeX认证失败

    • 验证BladeX相关URL和凭据配置
    • 确保BLADE_REDIRECT_URI能被公网访问
  4. 镜像构建失败

    • 检查构建日志定位具体错误
    • 确保网络连接良好能下载依赖

这套Docker配置实现了开发与运行环境分离,使同一套代码能在不同环境中无缝部署,只需通过环境变量调整具体参数,无需修改代码。

相关文章:

  • 怎么实现RAG检索相似文档排序:similarities
  • 云蝠智能大模型呼叫:AI驱动的通信服务革新与实践
  • 操作系统---进程同步与互斥
  • 【频谱分析仪与信号分析仪】异同比较
  • Unity后处理全解析:从入门到优化
  • 《Linux程序设计》实验8 线程程序设计
  • vulkanscenegraph显示倾斜模型(6)-帧循环
  • RTS 如何使用流控方式自动实现收发
  • 【每天一个知识点】熵(Entropy)
  • SpringBoot入门实战(项目搭建、配置、功能接口实现等一篇通关)
  • 【KWDB 创作者计划】_上位机知识篇---Github
  • 什么是公链?公链项目有哪些?公链项目开发
  • 【OSG学习笔记】Day 8: 纹理贴图——赋予模型细节
  • vue2项目,为什么开发环境打包出来的js文件名是1.js 2.js,而生产环境打包出来的是chunk-3adddd.djncjdhcbhdc.js
  • 头歌之动手学人工智能-机器学习 --- PCA
  • SIGGRAPH投稿相关官方指导
  • Python 读取 txt 文件详解 with ... open()
  • Python torchvision.datasets 下常用数据集配置和使用方法
  • 如何根据需求选择合适的氢气监测分析仪?
  • C++ Lambda 表达式
  • 获公示拟任省辖市委副书记的胡军,已赴南阳履新
  • 《不眠之夜》上演8年推出特别版,多业态联动形成戏剧经济带
  • 中国田协通报苏州马拉松“方便门”处理情况:涉事10人禁赛3年
  • 央行上海总部:上海个人住房贷款需求回升,增速连续半年回升
  • 173.9亿人次!一季度我国交通出行火热
  • 对话地铁读书人|中学教师董女士:借来的书更好看