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

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
setenforce 0

2、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

3、设置阿里云镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安装 Docker-CE 并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io

5、使用华为加速器:
mkdir -p /etc/docker
tee /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.repo
                  
curl -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_connections 1024;
}
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_timeout   65;
    types_hash_max_size 4096;
    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 {
        listen 80;
        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
    在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐