Tomcat 企业级运维实战系列(六):综合项目实战:Java 前后端分离架构部署

  • 一:概述
  • 二:部署
    • 1)环境准备
    • 2)部署数据库
    • 3)部署后端
    • 4)部署前端
  • 总结


🚀 Tomcat 系列文章导航
本系列系统讲解 Linux 环境下 Apache Tomcat 的部署、配置、管理与优化,并最终带你完成 企业级前后端分离项目上线。无论你是初学者还是想进阶的运维人员,这份路线图都能帮你快速构建完整的知识体系。

⚠️ 该系列所有涉及的软件包和项目都可以私信博主免费获取

  • 👉 第一部分:Tomcat 核心概念与基础部署
  • 👉 第二部分:Tomcat 系统化管理与应用部署
  • 👉 第三部分:Tomcat 配置解析与集群化部署
  • 👉 第四部分:Tomcat 企业级监控
  • 👉 第五部分:Tomcat 优化和安全加固
  • 👉 第六部分:综合项目实战:Java 前后端分离架构部署

一:概述

  • 动静分离

    • 静态资源(html、css、js) → 前端 → 部署到 Nginx
    • 动态功能(Java/PHP/Python/Go…) → 后端 → 部署到 应用服务器,连接数据库。
  • 前后端通信:通过 API 接口(Rest API)

    • API:提供功能的调用接口,调用方无需关心内部
  • 全栈 = 前端 + 后端。

    • 开发流程
      • 前端:Node.js 构建 → 静态资源 → Nginx
    • 后端:Maven/Gradle 构建 → war/jar 包 → Java 运行

二:部署

1)环境准备

角色主机外网IP内网IP
数据库(MySQL)da01192.168.2.109172.16.1.109
前端 + 后端web01192.168.2.104172.16.1.104

2)部署数据库

采用二进制包安装 MySQL

  1. 删除系统自带 MySQL

    [root@db01 ~]# rpm -qa | grep -i mariadb-server | xargs rpm -e --nodeps
    
  2. 解压 MySQL 二进制安装包

    [root@db01 ~]# tar -xvf /opt/software/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz -C /opt/module/
    
    # 重命名
    [root@db01 ~]# mv /opt/module/mysql-8.0.26-linux-glibc2.12-x86_64/ /opt/module/mysql-8.0.26
    
  3. 创建用户

    [root@db01 ~]# useradd -Ms /sbin/nologin mysql
    
  4. 创建数据目录

    [root@db01 ~]# mkdir -p /opt/module/data/mysql
    
  5. 修改配置文件

    [root@db01 ~]# cat > /etc/my.cnf << EOF
    
    [mysqld]
    user=mysql
    basedir=/opt/module/mysql-8.0.26
    datadir=/opt/module/data/mysql
    port=3306
    socket=/tmp/mysql.sock[client]
    socket=/tmp/mysql.sock
    
  6. 添加环境变量

    [root@db01 ~]# vim /etc/profile
    
    # MySQL
    export MYSQL_HOME='/opt/module/mysql-8.0.26'
    export PATH=${MYSQL_HOME}/bin:${PATH}
    
    [root@db01 ~]# source /etc/profile
    
  7. 修改文件所属

    [root@db01 ~]# chown mysql:mysql /etc/my.cnf
    [root@db01 ~]# chown -R mysql:mysql /opt/module/mysql-8.0.26
    
  8. 初始化数据库

    [root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/opt/module/mysql-8.0.26 --datadir=/opt/module/data/mysql
    
  9. 启动 MySQL

    [root@db01 ~]# /etc/init.d/mysqld start
    
  10. 导入数据

    # 1.连接数据库
    [root@db01 ~]# mysql
    mysql> 
    
    # 2.创建数据库
    mysql> create database exam charset utf8mb4;
    
    # 3.创建用户
    mysql> create user 'exam'@'172.16.1.%' identified with mysql_native_password by 'exam';
    
    # 4.授权
    mysql> grant all on exam.* to 'exam'@'172.16.1.%';
    
    # 5.导入数据
    [root@db01 ~]# mysql exam < /opt/software/xzs-mysql.sql
    

3)部署后端

  1. 确定 JDK 环境

    [root@web01 ~]# java -version
    java version "1.8.0_212"
    
  2. 创建项目

    # 1.创建项目目录
    [root@web01 ~]# mkdir -p /opt/module/exam# 2.上传项目 jar 包
    [root@web01 ~]# ls /opt/moduel/exam
    xzs-3.9.0.jar
    
  3. 配置 application-prod.yml

    [root@web01 ~]# vim /opt/module/exam/application-prod.yml
    
    server:port: 8000undertow:io-threads: 16worker-threads: 4000buffer-size: 1024direct-buffers: truecompression:enabled: truemin-response-size: 1
    logging:path: /var/log/xzs/
    spring:datasource:url: jdbc:mysql://172.16.1.109:3306/exam?useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&allowMultiQueries=trueusername: 'exam'password: 'exam'driver-class-name: com.mysql.cj.jdbc.Driver
    
  4. 运行后端项目

    也可以后台运行

    nuhup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod /opt/module/exam/xzs-3.9.0.jar > start.log 2>&1 &
    
    [root@web01 ~]# java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod /opt/module/exam/xzs-3.9.0.jar
    

4)部署前端

  1. 创建站点目录

    # 用户端
    [root@web01 ~]# mkdir -p /opt/module/exam/student# 管理端
    [root@web01 ~]# mkdir -p /opt/module/exam/admin
    
  2. 上传前端代码

    [root@web01 ~]# unzip /opt/software/exam-web.zip -d /opt/module/
    
  3. 编辑 exam.conf 配置文件

    [root@web01 ~]# vim /etc/nginx/conf.d/exam.conf
    
    # 用户端
    server {listen 80;server_name student.cn;root /opt/module/exam-web/student/;location / {index index.html;}location /api/ {proxy_pass http://localhost:8000;}
    }# 管理端
    server {listen 80;server_name admin.cn;root /opt/module/exam-web/admin/;location / {index index.html;}location /api/ {proxy_pass http://localhost:8000;}
    }
    
  4. 刷新 Nginx

    [root@web01 ~]# nginx -t
    [root@web01 ~]# ngins -s reload
    
  5. 编辑 hosts

    192.168.2.104 student.cn admin.cn
    
  6. 访问

    • 用户端

      http://student.cn

      user:student

      password:123456

    • 管理端

      http://admin.cn

      user:admin

      password:123456


总结

📌 本节重点回顾

  • 前后端分离架构

    • 静态资源(HTML/CSS/JS)由 Nginx 托管,负责页面展示。

    • 动态业务逻辑(Java 项目)运行在 后端应用服务器,通过 API 接口 与前端交互。

    • 数据库(MySQL)提供数据支撑,实现前后端解耦。

  • 部署流程

    • 数据库层:二进制安装 MySQL → 配置用户与权限 → 导入业务数据。

    • 后端层:准备 JDK → 部署 SpringBoot Jar 包 → 配置 application-prod.yml → 启动服务(8000 端口)。

    • 前端层:Nginx 部署前端代码 → 配置虚拟主机(student.cn / admin.cn) → 反向代理 API 请求到后端。

  • 访问效果

    • 用户端:http://student.cn

    • 管理端:http://admin.cn

    • 通过 域名 + Nginx 转发,实现前端、后端、数据库的完整交互。

至此,你已经完成了 企业级 Java 前后端分离架构的完整上线流程,能够独立搭建一个包含数据库、后端服务、前端站点的生产环境。
这一系列学完,相当于完成了 Tomcat 企业级运维实战 —— 以后无论是个人项目还是企业生产环境,你都能独立完成稳定、高效的部署与运维。

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

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

相关文章

《Unity Shader入门精要》学习笔记四(高级纹理)

1、立方体纹理解释&#xff1a;站在一个完全透明的玻璃盒子中心&#xff0c;就可以看到6个面。把这个玻璃盒子的6个面都贴上一张照片。这6张照片合起来&#xff0c;就记录了周围360度的环境&#xff0c;比如蓝天、地面、建筑、树木等。在2D纹理中&#xff0c;使用坐标来找颜色&…

局域网中使用Nginx部署https前端和后端

目录 一.前端部署https 二.后端部署https 一.前端部署https 1.前端正常创建项目即可,打包后,文件夹的格式是dist 2.下载认证的证书 也可以使用其他软件,这里推荐使用mkcert,下载地址如下: Releases FiloSottile/mkcert GitHub 3.输入 mkcert -install

K8s卷机制:数据持久化与共享

在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;卷&#xff08;Volume&#xff09; 是用于解决容器内数据持久化、容器间数据共享以及与外部存储交互的核心机制。它本质上是一个可供 Pod 中容器访问的存储目录&#xff0c;生命周期独立于容器&#xff08;容器重启或销…

线性回归原理推导与应用(十一):多重共线性

多重共线性的定义与影响 多重共线性&#xff08;Multicollinearity&#xff09;是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。 根据定义和影响程度&#xff0c;可以将多重共线性分为极端共线性和一般共线性。极端共线…

day082-初识ElasticStack

文章目录0. 老男孩思想-人性十大需求1. ElasticStack介绍1.1 ELK&#xff08;**Elastic Stack**&#xff09;1.2 logstash和filebeat的区别2. ElasticSearch单点部署2.1 下载ElasticSearch软件包2.2 安装软件并修改配置文件2.3 启动并测试服务3. ElasticSearch集群部署3.1 安装…

软考 系统架构设计师系列知识点之杂项集萃(139)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(138) 第257题 系统工程利用计算机作为工具,对系统的结构、元素、()和反馈等进行分析,以达到最优()、最优设计、最优管理和最优控制的目的。霍尔(A.D.Hall)于1969年提出了系统方法的三维结构体系,通常称为霍…

solidity地址、智能合约、交易概念

目录地址address 的两种子类型&#xff08;Solidity 0.5.0&#xff09;address分类address 的常用操作和属性总结交易交易的基本结构&#xff08;由外部发起&#xff09;Gas交易生命周期函数调用与交易常见交易场景总结地址 在 Solidity 中&#xff0c;地址&#xff08;addres…

jwt原理及Java中实现

一、JWT 是什么&#xff1f;解决什么问题&#xff1f; 我们先来一张图看一下这个过程&#xff1a;JWT&#xff08;JSON Web Token&#xff09;是一种把“认证信息&#xff08;Claims&#xff09; 完整性校验”打包成 自包含 的字符串的规范。 它主要用于无状态认证&#xff1a;…

大数据在UI前端的应用深化研究:用户行为数据的跨平台关联分析

大数据在UI前端的应用深化研究&#xff1a;用户行为数据的跨平台关联分析每天&#xff0c;你在手机 App 里点了一个按钮、在网页上滑了两屏、又在小程序里停留了 3 秒&#xff0c;这些看似零散的动作&#xff0c;其实都在被悄悄记录。过去&#xff0c;这些数据只能各自躺在自己…

C++11基础——— 右值引用和移动语义

1. C11的发展历史 C11是C的第⼆个主要版本&#xff0c;并且是从C98起的最重要更新。它引入了大量更改&#xff0c;标准化了既有实践&#xff0c;并改进了对C程序员可用的抽象。在它最终由ISO在2011年8月12日采纳前&#xff0c;人们曾使用名称“C0x”&#xff0c;因为它曾被期待…

【一】Django框架版本介绍

【一】Django框架版本介绍 【一】Django框架版本 ● Django 是一个高级的Python Web框架&#xff0c;由荷兰人Armin Ronacher创建。 ● 随着版本的迭代和功能的不断优化&#xff0c;Django在处理异步请求方面也有了显著的进步。 【1】Django1.x ● 默认不支持异步 ● Django 1.…

git 大文件上传不了的 问题

你 还是在 cmd 里执行&#xff0c;Select-String 是 PowerShell 的命令&#xff0c;cmd 不认识。 请务必按下面的步骤 切换到 PowerShell 再运行。✅ 1. 打开 PowerShell&#xff08;不要再用 cmd&#xff09;最简单&#xff1a; 在资源管理器里进入 D:\linShiWenjian\my-react…

【FIX】go运行报错“missing go.sum entry for module providing package”解决方案

&#x1f527; ​核心解决方案​**运行 go mod tidy**​ ​作用​&#xff1a;自动同步 go.mod和 go.sum文件&#xff0c;添加缺失依赖并移除无用条目。 go mod tidy​适用场景​&#xff1a;90% 的校验和缺失问题可通过此命令解决。 ​注意​&#xff1a;若项目含私有仓库&…

【实操教学】ArcGIS 如何进行定义坐标系

一、坐标系定义的方式创建数据时可直接完成坐标系定义&#xff1b;针对已创建的数据集&#xff08;涵盖要素类、要素数据集及栅格数据集&#xff09;&#xff0c;则可通过以下这种方式定义&#xff1a;工具箱工具调用&#xff1a;使用 ArcGIS 工具箱中的 “定义投影&#xff08…

如何使用Windows自带的PnPUtil命令来禁用/停用和启用硬件设备

我来详细讲解一下如何使用 Windows 自带的 PnPUtil 命令来禁用&#xff08;停用&#xff09; 和启用硬件设备。 PnPUtil (即插即用实用工具) 是一个功能强大的命令行工具&#xff0c;主要用于安装、卸载、枚举和修改驱动程序包。对于硬件的启用和禁用&#xff0c;它通过操作设…

鸿蒙Next媒体展示组件实战:Video与动态布局全解析

今天我们来深入探讨HarmonyOS Next中几种核心媒体展示组件的使用方法&#xff0c;通过实际代码示例展示如何打造丰富的多媒体体验。HarmonyOS Next为开发者提供了一套强大而灵活的媒体展示组件&#xff0c;使开发者能够轻松实现视频播放、动态布局适应、全屏切换等常见多媒体功…

复现RoboDK机器人校准功能(以Staubli TX2‑90L / TX200机械臂为测试对象,实测精度接近原厂)

本算法复现了 RoboDK 的机器人校准功能&#xff1a;在训练集的理论校准后精度与 RoboDK 一致&#xff0c;在测试集的实测精度接近 Staubli 原厂。 参考&#xff1a;RoboDK 机器人校准功能&#xff08;https://robodk.com.cn/cn/robot-calibration&#xff09; 特性 支持 SDH 参…

Vue常用指令和生命周期

Vue 是基于 MVVM模型的前端 JavaScript 框架。Vue 核心是数据驱动视图&#xff0c;通过响应式数据实现视图自动更新。<template><div>{{ message }}</div><button click"changeMsg">修改内容</button> </template><script se…

深度学习周报(8.25~8.31)

目录 摘要 Abstract 1 RNN学习意义 2 RNN基础知识 2.1 核心思想 2.2 传播 2.3 优缺点 2.4 变体结构与应用场景 3 RNN结构代码示例 4 总结 摘要 本周主要学习了循环神经网络的学习意义与基础知识&#xff0c;重点了解了RNN循环连接的核心思想、前向传播与反向传播过程…

借助 LAMBDA 公式,实现单元格区域高效转换

新特性介绍 “转换单元格&#xff08;Transform&#xff09;” 功能允许用户将自定义的单参数 LAMBDA 公式应用于选中的单元格区域。用户可选择公式参数的作用域 —— 按单元格、按行、按列或按整个区域。 转换完成后&#xff0c;源单元格区域会被清空&#xff0c;转换后的区…