Linux环境下使用tomcat+nginx部署若依项目

news2024/12/22 6:55:25
Linux + Tomcat + MySQL + Java 是构建动态网站系统的完美解决方案之一,具有免费、高
效、扩展性强且资源消耗低等优良特性。 Java Web 凭借其优秀的开发框架和良好的生态被广
泛应用于社会各行业的信息化系统构建。
本实验以若依管理系统( http://ruoyi.vip/ )为例,模拟 Java Web 项目开发完成后如何部
署到服务器并提供 HTTP 服务。 RuoYi 是一个基于 SpringBoot 的后台管理系统,主要目的让
开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质
量。若依采用了主流的 Java Web 技术,提供前后端一体、前后端分离、微服务、 APP 等多
重不同架构的开源代码。为了方便演示 Tomcat 的部署过程,这里选择前后端一体的版本进
行实验,将部署 war 包和 jar 包,并分别使用 8888 9999 端口。

任务一 安装与配置 Mysql 数据库

1、docker拉取MySQL

2、启动MySQL

3、远程访问连接

4、创建数据库并执行项目 SQL 脚本

从官方的部署文档可以看到,我们需要创建一个名为 ry 的数据库,并导入两个 SQL
本,以完成数据库的初始化,如下图所示。
拉取项目源码 https://gitee.com/y_project/RuoYi ,运行 SQL 脚本文件。

任务二 安装与配置 Tomcat

1、使用docker拉取 Tomcat 

这里要特别注意Tomcat的版本,因为我拉的这个若依项目使用的springboot版本是2.5.15,所以查看maven仓库得知对应的应该是9.0.75版本的Tomcat,如果版本使用错,会出现访问项目报错404。maven仓库地址:Maven Repository: org.springframework.boot » spring-boot-starter-tomcat 

2、启动Tomcat 

docker run -di --name=mytomcat -p 8888:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:9.0.89

3、配置防火墙放行 8888端口

4、在客户机上测试 Tomcat 服务

任务三 部署 war 包和 jar 包

tomcat webapps 目录中,每个目录都代表一个 Web 应用,只要把 war 包放在此目录下, Tomcat 启动时会自动解压 war 并部署,然后就可以用“ http:// 服务器 ip:8888/ 目录名 / 来访问相应的应用
若依前后端一体版的源码主要采用 Spring Boot Apache Shiro MyBatis Thymeleaf
Maven 等主要技术搭建,提供 war 包和 jar 包两种打包方式。这里先在主机下载项目源码
https://gitee.com/y_project/RuoYi ,解压并用 idea 打开项目,刷新 Maven (本地需先配好 JDK
Maven 环境),正常加载项目源码。

1、修改配置文件,打包 war 包并部署

(1) ruoyi/ruoyi-admin pom.xml packaging 修改为 war

(2) 修改 ruoyi/ruoyi-admin application-druid.yml MySQL 数据库连接,ip,端口,用户

名,密码

(3) 修改文件存储路径

(4) 打开 Maven 面板,双击 ruoyi 下的 package,完成后查看日志找到对应的 war

  1. 上传 war 包到服务器

访问若依项目:

2、修改配置文件,打包 jar 包并部署

Maven 内嵌 Tomcat 后,应用的部署变得简单,做好相应配置后,直接使用 Java 命令运
jar 包即可。

(1) ruoyi/ruoyi-admin pom.xml packaging 修改为 jar

(2) 修改 ruoyi/ruoyi-admin application.yml server : port 9999

  1. 双击 Maven-package 打包,在 target 底下找到 jar,并上传到 Linux 服务器。

使用java -jar指令启动项目。这里要记得防火墙关闭9999端口号。

firewall-cmd --add-port=8888/tcp --permanent

启动成功

成功访问若依项目:

任务四 Nginx 的配置和负载均衡

1、docker 拉取nginx

2、启动 nginx 服务

docker run -d --name mynginx -p 80:80 \
-v /usr/local/nginx/nginx:/etc/nginx \
nginx

 特别注意这里,这个命令的意思是将nginx容器里的/etc/nginx下的东西挂载到宿主机/usr/local/nginx/nginx下。但是如果你是第一次执行这个命令会出现nginx启动后状态是exited(0),也就是没启动成功。原因是宿主机中/usr/local/nginx/nginx下啥也没有。解决办法就是:

先执行这个命令:

docker run --name mynginx -p 80:80 -d nginx

然后进入nginx容器内复制 /etc/nginx下的内容到宿主机中:

docker cp 7012c47eea4e:/etc/nginx /usr/local/nginx

 此时我们在/usr/local/nginx/nginx下就可以看到以下内容:

此时如果我们使用最开始的那个命令,nginx是可以成功启动的:

docker run -d --name mynginx -p 80:80 \
-v /usr/local/nginx/nginx:/etc/nginx \
nginx

3、配置防火墙放行 80 端口

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

4、在客户机上测试 nginx 服务

在浏览器中访问指定的服务器 IP:80,若能打开 nginx 默认首页,则表明配置成功。

5、用 Nginx+Tomcat 实现负载均衡

1)部署 Tomcat 集群

由于单台 Tomcat 的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比 较大时,单台 Tomcat 可能存在性能不足的情况,这个时候,就需要搭建 Tomcat 的集群,而 目前比较主流的做法就是通过 Nginx 来实现 Tomcat 集群的负载均衡。

1. 下载 Tomcat 服务器。

正常情况下, Tomcat 集群一般部署在多台 Linux 服务器上,本次实验由于只在单台服务
器上,因此通过在服务器上部署多个 Tomcat 实例组成 Tomcat 集群。
上文中,已经安装部署了一个 Tomcat 实例,开放端口为 8888 。因此,下一步,我们需
要再部署一个新的 Tomcat 实例,组成 Tomcat 集群。
我又拉了一个9.0.75的,为了和刚刚那个Tomcat作区分。当然也可以使用docker再一次启动刚刚那个Tomcat,形成两个实例。

2. 启 动 tomcat 实 例

3. 验证 Tomcat

在客户机上可以通过访问 Tomcat 默认首页来测试 Tomcat 服务是否配置成功,如图
所示,在浏览器中访问“ http:// 服务器 ip:9999 ”,若能打开 Tomcat 默认首页,则表明
配置成功。

此时通过 http://服务器 IP:9999/ruoyi-admin/也可以正常访问若依系统。

 

此时 Tomcat 集群中已经包含两个 Tomcat 实例,开放端口分为为 8888 9999 端口。 

2Nginx 实现负载均衡

1. 编辑 nginx 配置文件:/etc/nginx/nginx.conf

新增负载均衡策略配置 :
采用轮询策略,它是 upstream 模块默认的负载均衡策略。
每个请求会按时间逐一分配到不同的后端服务器。
upstream 名称统一配置为 upstream ruoyi.com
server 配置格式为 : server 服务器 IP: 端口 weight=n; 其中服务器 IP 和端口均为
Linux 服务器的 IP 和端口, weight 表示轮询的几率,统一配置成 1 即可。
修改服务器信息:
1 、将服务器名称修改为服务器 IP 地址;
2 、将 root 路径修改为 /var/zs_wp
3 、新增 location 配置: location 配置用于匹配请求的 URL 路径,并指定相应的处理
方式。
如下图所示:
upstream ruoyi.com {
  server 192.168.8.39:8888 weight=1;
  server 192.168.8.39:9999 weight=1;
}

server {
    listen       80;
    server_name  192.168.8.39;
    root         /var/zs_wp;

    location / {
      proxy_pass   http://ruoyi.com/;       
    }
}

2. 重启 nginx 服务:

docker run -d --name mynginx -p 80:80 \
-v /usr/local/nginx/nginx:/etc/nginx \
nginx

3. 测试负载均衡:

以上配置结束后,客户端可以通过访问 nginx IP 地址 + 端口来实现负载均衡的请
求转发。
在客户机浏览器首次输入服务器 IP:80 ,可以看到 nginx 重定向到第一个 Tomcat
例,结果如下图所示:

刷新页面,可以看到 nginx 重定向到另一个 Tomcat 实例:

由上可以发现, nginx 实现了请求处理的负载均衡,请求会采用轮询的方式,依次
分发到不同的 Tomcat 实例。
此时,
tomcat 下的实例自动实现负载均衡,访问部署的若依系统,可以使用 nginx ip
地址 /ruoyi-admin 来访问。

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

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

相关文章

.NET重点

B/S C/S什么语言 B/S: 浏览器端:JavaScript,HTML,CSS 服务器端:ASP(.NET)PHP/JSP 优势:维护方便,易于升级和扩展 劣势:服务器负担沉重 C/S java/.NET/…

前端HTTP协议传输以及背后的原理总结

一、HTTP在前端的地位 HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议,也就是说,请求是由接受方——通常是…

城市应急指挥系统

城市应急指挥系统的重要性 随着现代化城市的高速发展,我们面临着多种应急突发情景,如自然灾害、事故灾难、公共卫生事件以及社会安全事件等。这些事件对城市的安全稳定构成严重威胁,因此,建立一套高效、全面的城市应急指挥系统显…

【软考高级】系统架构设计师复习笔记-精华版

文章目录 前言0 系统架构设计师0.1 考架构还是考系分0.2 架构核心知识0.3 架构教材变化 1 计算机操作系统1.1 cpu 组成1.2 内核的五大功能1.3 流水线技术1.4 段页式存储1.5 I/O 软件1.6 文件管理1.7 系统工程相关 2 嵌入式2.1 嵌入式技术2.2 板级支持包(BSP&#xf…

NSDT 3DConvert:高效实现大模型文件在线预览与转换

NSDT 3DConvert 作为一个 WebGL 展示平台,能够实现多种模型格式免费在线预览,并支持大于1GB的OBJ、STL、GLTF、点云等模型进行在线查看与交互,这在3D模型展示领域是一个相当强大的功能。 平台特点 多格式支持 NSDT 3DConvert兼容多种3D模型…

STL 剖析

STL 六大组件 「STL 六大组件的交互关系」 Container 通过 Allocator 取得数据储存空间Algorithm 通过 Iterator 存取 Container 内容Functor 可以协助 Algorithm 完成不同的策略变化Adapter 可以修饰或套接 Functor、Iterator 配置器(allocator) 配置器:负责空间…

买卖股票的最佳时机 IV - 困难

************* C topic&#xff1a;188. 买卖股票的最佳时机 IV - 力扣&#xff08;LeetCode&#xff09; ************* Stock angin: Still stocks. Intuitively, it feels hard. For once: class Solution { public:int maxProfit(vector<int>& prices) {in…

#{ }和${ } 、参数处理

目录 #{ }和${ } 参数处理 入参-parameterType 使用Map 使用Bean / List<Bean> 使用多参数 Param注解&#xff08;命名参数&#xff09; 出参-resultType 返回Map / List<Map> 返回Map<String,Map> 属性名不一致-resultMap结果映射 #{ }和${ }…

机器学习探索之旅:开启智能预测的新篇章!!! 笔记 ! ! !)

目录 一 . 机器学习基础&#xff1a; 1. 什么是机器学习&#xff1a; Langley&#xff08;1996&#xff09;的定义&#xff1a; Tom Mitchell&#xff08;1997&#xff09;的定义&#xff1a; 冷雨泉&#xff08;等&#xff09;的观点&#xff1a; 2. 机器学习与人工智能…

【RAII | 设计模式】C++智能指针,内存管理与设计模式

前言 nav2系列教材&#xff0c;yolov11部署,系统迁移教程我会放到年后一起更新&#xff0c;最近年末手头事情多&#xff0c;还请大家多多谅解。 上一节我们讲述了C移动语义相关的知识&#xff0c;本期我们来看看C中常用的几种智能指针&#xff0c;并看看他们在设计模式中的运…

基于单片机的病房呼叫系统设计

摘 要&#xff1a; 文章基于 51 系列的单片机设计的病房呼叫系统 。 在以 AT89C51 单片机为核心&#xff0c;以 74HC573 锁存器 、数码管显示模块、 矩阵按键模块等为辅组成的&#xff0c;按键分布在各个病床的床头&#xff0c;可以节约接口资源&#xff0c;当按下按键&a…

编译原理复习---目标代码生成

适用于电子科技大学编译原理期末考试复习。 1. 目标代码 是目标机器的汇编代码或机器码&#xff0c;在本课程中指的是类似于汇编代码的一种形式&#xff0c;由一条条的指令构成目标代码。 抽象机指令格式&#xff1a;OP 目的操作数&#xff0c;源操作数。 我们要做的&…

Redis数据对象

基本结构图 key和value指向的是redisObject对象 type&#xff1a;标识该对象用的是什么类型&#xff08;String、List Redis数据结构 SDS SDS有4个属性&#xff1a; len&#xff1a;记录了字符串长度&#xff0c;因此获取字符串长度的时候时间复杂度O&#xff08;1&#xff…

Gale-Shapley算法

一. 设计目的 盖尔-沙普利算法&#xff08;Gale-Shapley算法&#xff09;的设计目的是为了解决稳定匹配问题&#xff0c;即在给定一组男性和女性的偏好列表的情况下&#xff0c;找到一个稳定的匹配。这里的“稳定”指的是不存在任何一对男性和女性&#xff0c;他们彼此都比当前…

JWT令牌与微服务

1. 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种开放标准(RFC 7519)&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。JWT通常用于身份验证和信息交换。 以下是JWT的一些关键特性&#xff1a; 紧凑&#xff…

视频点播系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

docker部署Melody开源音乐管理工具

Melody是一款非常实用的开源音乐管理工具。它不仅功能强大、操作简便&#xff0c;还支持多平台检索和一键下载/上传功能。更重要的是&#xff0c;它还支持一键“解锁”无法播放的歌曲和多端适配。如果你也是音乐爱好者&#xff0c;不妨试试Melody&#xff0c;让你的音乐生活更加…

问题小记-达梦数据库报错“字符串转换出错”处理

最近遇到一个达梦数据库报错“-6111: 字符串转换出错”的问题&#xff0c;这个问题主要是涉及到一条sql语句的执行&#xff0c;在此分享下这个报错的处理过程。 问题表现为&#xff1a;一样的表结构和数据&#xff0c;执行相同的SQL&#xff0c;在Oracle数据库中执行正常&…

day4:tomcat—maven-jdk

一&#xff0c;java项目部署过程 编译&#xff1a;使用javac命令将.java源文件编译成.class宇节码文件打包&#xff1a;使用工具如maven或Gradle将项目的依赖、资源和编译后的字节码打包成一个分发格式&#xff0c;如.jar文件&#xff0c;或者.war文件(用于web应用&#xff09…

【D3.js in Action 3 精译_046】DIY 实战:在 Observable 平台利用饼图布局函数实现 D3 多个环形图的绘制

当前内容所在位置&#xff1a; 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段&#xff08;一&#xff09;5.1.2 饼图布局生成器&#xff08;二&#xff09;5.1.3 圆弧的绘制&#xff08;三&#xff09;5.1.4 数据标签的添加&#xff08;四&#…