news 2026/5/9 14:49:32

Docker 构建前后端项目Ruo-Yi

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 构建前后端项目Ruo-Yi

文章目录

  • 一、总体架构与运维关注点
    • 1.1 架构特点
    • 1.2 各端说明
  • 二、后端技术栈与运维部署
    • 2.1 核心框架:Spring Boot
    • 2.2 安全框架:Spring Security
    • 2.3 数据持久层:MyBatis
    • 2.4 缓存:Redis
  • 三、系统架构图与数据流
    • 3.1 简化架构图
    • 3.2 工作流程与运维关联
  • 四、运维部署与实践
    • 4.1 部署模式
    • 4.2 关键配置
    • 4.3 监控与日志
    • 4.4 高可用与备份
  • 五、docker-compose 编排ruoyi实践
    • 5.1 服务器环境
    • 5.2 环境准备
    • 5.3 拉取代码
    • 5.4 修改配置文件
    • 5.5 前端容器环境准备
    • 5.6 后端jar包构建
    • 5.7 定义后端运行环境(Dockerfile)
      • 开始构建
    • 5.8 编写配置文件
    • 5.9 启动项目

一、总体架构与运维关注点

1.1 架构特点

  • 采用前后端分离架构,支持独立开发、部署和扩展,运维需关注部署组件与网络配置复杂性

1.2 各端说明

  • 1.2.1 前端:静态Web应用(如Vue.js构建),需Nginx等Web服务器托管
  • 1.2.2 后端:动态Java应用程序,运行在Tomcat等Servlet容器中
  • 1.2.3 通信:通过HTTP RESTful API交互,需关注API网关、CORS配置及网络稳定性

二、后端技术栈与运维部署

2.1 核心框架:Spring Boot

  • 2.1.1 运维价值:“约定大于配置”,打包为内嵌Tomcat的可执行JAR包,简化部署
  • 2.1.2 关注点:确保目标服务器安装正确版本JRE

2.2 安全框架:Spring Security

  • 2.2.1 运维价值:提供开箱即用的认证、授权能力
  • 2.2.2 关注点:理解会话管理机制(Session/JWT),集群部署时配置会话保持或令牌服务

2.3 数据持久层:MyBatis

  • 2.3.1 运维关注点:维护MySQL数据库,包括安装、权限管理、备份恢复、慢查询监控优化

2.4 缓存:Redis

  • 2.4.1 运维关键组件:存储会话、验证码和系统缓存
  • 2.4.2 关注点
    • 高可用:部署主从复制、哨兵或集群
    • 持久化:配置RDB或AOF策略
    • 监控:监控内存使用率、连接数、命中率等指标

三、系统架构图与数据流

3.1 简化架构图

用户请求 → [浏览器] ↔ [Nginx(反向代理/静态资源服务器)] → [Spring Boot应用集群] → [MySQL数据库] / [Redis集群]

3.2 工作流程与运维关联

  1. 用户通过浏览器访问前端URL(指向Nginx)
  2. Nginx返回静态HTML、CSS、JS文件
  3. 前端JS发起API请求至Nginx
  4. Nginx反向代理API请求到后端Spring Boot应用(可能为集群)
  5. Spring Boot应用通过MyBatis访问MySQL或Redis客户端访问缓存处理业务逻辑
  6. 后端返回结果,前端渲染展示

四、运维部署与实践

4.1 部署模式

  • 4.1.1 单机部署:所有组件(Nginx、Jar包、MySQL、Redis)部署在一台服务器,适用于测试或小型环境
  • 4.1.2 分布式部署:各组件部署在不同服务器,实现解耦和水平扩展,为生产环境常见做法
  • 4.1.3 集群部署:多实例部署Spring Boot应用,Nginx负载均衡,提升可用性和处理能力

4.2 关键配置

  • 4.2.1 Nginx配置:配置proxy_pass转发API请求,设置超时时间、负载均衡算法(轮询、IP哈希等)
  • 4.2.2 应用配置:application.yml中配置数据库连接池、Redis连接信息、文件上传路径等,生产环境常用application-prod.yml

4.3 监控与日志

  • 4.3.1 应用监控:内置Druid监控,可集成Spring Boot Actuator+Prometheus+Grafana实现可视化监控
  • 4.3.2 系统监控:使用Zabbix、Prometheus监控服务器CPU、内存、磁盘IO、网络流量
  • 4.3.3 日志收集:配置Logback/Log4j2输出日志,通过ELK/EFK栈收集、存储和检索

4.4 高可用与备份

  • 4.4.1 应用高可用:多实例部署无状态Spring Boot应用,结合Nginx负载均衡
  • 4.4.2 数据高可用:MySQL配置主从复制/MHA,Redis配置哨兵/集群
  • 4.4.3 备份策略:定期MySQL全量与增量备份、Redis RDB快照备份、应用服务器文件备份

五、docker-compose 编排ruoyi实践

5.1 服务器环境

  • Docker 20.10.18环境,7G内存,30G以上磁盘空间
docker安装:1、关闭防火墙 systemctl stop firewalld.service setenforce02、安装依赖包 yuminstall-y yum-utils device-mapper-persistent-data lvm23、设置阿里云镜像 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo4、安装 Docker-CE 并设置为开机自动启动 yuminstall-y docker-ce docker-ce-cli containerd.io5、使用华为加速器:mkdir-p /etc/dockertee/etc/docker/daemon.json<<-'EOF' { "registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ] } EOF

5.2 环境准备

  1. 上传docker-compose编排工具到/usr/local/bin并赋予执行权限
  2. 创建工作目录:mkdir /opt/ruoyi
  3. 准备镜像:nginx:1.25.3、mysql:5.7、redis:latest
  4. 下载git工具

5.3 拉取代码

  • cd /opt/ruoyi → git clone https://gitee.com/y_project/RuoYi-Vue.git

5.4 修改配置文件

  • 5.4.1 vim /opt/ruoyi/RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml:root密码修改为123456

  • 5.4.2 vim /opt/ruoyi/RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml:Redis host改为redis.server,端口保持6379

5.5 前端容器环境准备

  • 5.5.1 拉取镜像:docker pull node:12

  • 5.5.2 进入目录:cd /opt/ruoyi/RuoYi-Vue

  • 5.5.3 启动镜像:docker run -it --rm -v/opt/ruoyi/RuoYi-Vue/ruoyi-ui:/opt node:12 /bin/bash

  • 5.5.4 打包代码:cd /opt → npm install → npm run build:prod(生成dist目录)


5.6 后端jar包构建

  • 5.6.1 拉取镜像:docker pull maven:3.6.3-openjdk-11

  • 5.6.2 启动镜像:docker run -it --rm -v /opt/ruoyi/RuoYi-Vue:/vue -w /vue maven:3.6.3-openjdk-11-slim /bin/bash

  • 5.6.3 打jar包:cd /vue → mvn package

  • 5.6.4 移动jar包:mv ruoyi-admin/target/ruoyi-admin.jar /opt/ruoyi/

5.7 定义后端运行环境(Dockerfile)

  • 5.7.1 创建目录:mkdir /opt/java → cd /opt/java
  • 5.7.2 复制文件:将epel-aliyun.repo、CentOS-aliyun-lhr.repo、ruoyi-admin.jar复制到当前目录
curl-o /opt/java/epel-aliyun.repo https://mirrors.aliyun.com/repo/epel-7.repocurl-o /opt/java/CentOS-aliyun-lhr.repo https://mirrors.aliyun.com/repo/Centos-7.repo

  • 5.7.3 编写Dockerfile:
    vim Dockerfile
    FROM centos:7
    RUN rm -rf /etc/yum.repos.d/*
    COPY epel-aliyun.repo /etc/yum.repos.d
    COPY CentOS-aliyun-lhr.repo /etc/yum.repos.d
    RUN yum clean all && yum makecache
    RUN yum -y install java-1.8.0
    WORKDIR /opt
    COPY ./ruoyi-admin.jar /opt
    CMD [ “java”,“-jar”,“ruoyi-admin.jar” ]

开始构建

1、docker build -t ruoyi.admin:1.0 .
(如果显示报错 则该目录下没有 执行以下操作)
:直接全局搜索找到 jar 包在哪
find / -name “ruoyi-admin.jar” 2>/dev/null

使用绝对路径去构建或者把 jar 包复制到当前的java目录
cp /opt/ruoyi/ruoyi-admin.jar ./

最后执行:
docker build -t ruoyi.admin:1.0 .

5.8 编写配置文件

  • 5.8.1 编写nginx.conf(/opt/java目录下):配置监听端口、静态资源路径、反向代理规则等
# For more information on configuration, see:#* Official English Documentation: http://nginx.org/en/docs/#* Official Russian Documentation: http://nginx.org/ru/docs/ user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events{worker_connections1024;}http{log_format main'$remote_addr - $remote_user [$time_local] "$request" '在/opt/ruoyi目录下写docker-compose.yml文件'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout65;types_hash_max_size4096;include /etc/nginx/mime.types;default_type application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.#include /etc/nginx/conf.d/*.conf;server{listen80;server_name localhost;location /{root /usr/share/nginx/html;index index.html;}location /prod-api/{proxy_pass http://java.com:8080/;}}# Settings for a TLS enabled server.## server {# listen 443 ssl http2;# listen [::]:443 ssl http2;# server_name _;# root /usr/share/nginx/html;## ssl_certificate "/etc/pki/nginx/server.crt";# ssl_certificate_key "/etc/pki/nginx/private/server.key";# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 10m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;## # Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;## error_page 404 /404.html;# location = /40x.html {# }## error_page 500 502 503 504 /50x.html;# location = /50x.html {# }# }}
  • 5.8.2 编写docker-compose.yml(/opt/ruoyi目录下):定义ruoyi-web、java、db、redis服务的镜像、容器名、端口、挂载、依赖等配置
version:'3'services: 使用docker-compose 启动ruoyi项目 ruoyi-web: image: nginx:1.25.3 container_name: ruoyi-web hostname: ruoyi-web environment: -LANG=C.UTF-8 -LC_ALL=C.UTF-8 ports: -8888:80 volumes: - ./RuoYi-Vue/ruoyi-ui/dist/:/usr/share/nginx/html/ - ./java/nginx.conf:/etc/nginx/nginx.conf:ro links: - java:java.com depends_on: - java java: build: ./java container_name: java.server hostname: java environment: -LANG=C.UTF-8 -LC_ALL=C.UTF-8 links: - db:mysql.server - redis:redis.server depends_on: - db - redis db: image: mysql:5.7 container_name: mysql.server hostname: db environment: -MYSQL_ROOT_PASSWORD=123456-MYSQL_DATABASE=ry-vue -LANG=C.UTF-8 -LC_ALL=C.UTF-8 command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_general_ci volumes: - /opt/mysql-data4:/var/lib/mysql - ./RuoYi-Vue/sql:/docker-entrypoint-initdb.d redis: image: redis container_name: redis.server hostname: redis:redis.server environment: -LANG=C.UTF-8 -LC_ALL=C.UTF-8

注:需要修改绝对路径

5.9 启动项目

  • 5.9.1 执行命令:docker compose up

  • 5.9.2 访问方式:浏览器访问192.168.10.13:8888

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 11:02:24

完美解决华硕笔记本风扇异常:3个G-Helper高效修复方案

完美解决华硕笔记本风扇异常&#xff1a;3个G-Helper高效修复方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址…

作者头像 李华
网站建设 2026/4/22 1:49:50

低功耗工业报警模块设计:蜂鸣器节能方案

低功耗工业报警模块设计&#xff1a;蜂鸣器节能方案在工业自动化与远程监控系统中&#xff0c;报警功能虽然看似简单&#xff0c;却是保障设备安全、预警故障的关键一环。尤其是在电池供电的物联网终端中&#xff0c;如何让一个“会叫”的模块既响得及时&#xff0c;又不把电量…

作者头像 李华
网站建设 2026/5/4 2:06:21

终极指南:如何在5分钟内完成Rhino到Blender的完美数据迁移

终极指南&#xff1a;如何在5分钟内完成Rhino到Blender的完美数据迁移 【免费下载链接】import_3dm Blender importer script for Rhinoceros 3D files 项目地址: https://gitcode.com/gh_mirrors/im/import_3dm 作为一名三维设计师&#xff0c;你是否曾经为Rhino和Blen…

作者头像 李华
网站建设 2026/4/28 12:28:04

RePKG终极指南:Wallpaper Engine资源提取与转换完全手册

RePKG终极指南&#xff1a;Wallpaper Engine资源提取与转换完全手册 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg RePKG是一款专为Wallpaper Engine设计的开源资源处理工具&#…

作者头像 李华
网站建设 2026/5/1 0:47:06

5步搞定Windows驱动清理:DriverStore Explorer终极优化指南

你是否发现系统盘空间越来越小&#xff1f;或者遇到硬件驱动冲突导致设备异常&#xff1f;这些问题很可能源于Windows系统中堆积了大量冗余驱动程序。DriverStore Explorer正是解决这些困扰的利器&#xff0c;它能帮你高效管理Windows驱动存储库&#xff0c;彻底释放宝贵存储空…

作者头像 李华
网站建设 2026/5/3 12:49:38

Git Cherry-Pick将关键修复应用到PyTorch分支

Git Cherry-Pick 与 PyTorch-CUDA 镜像协同&#xff1a;高效修复与稳定部署的工程实践 在深度学习项目进入生产阶段后&#xff0c;一个常见的挑战浮出水面&#xff1a;如何在不破坏现有训练环境的前提下&#xff0c;快速将关键修复从开发分支同步到稳定的发布版本中&#xff1f…

作者头像 李华