三、web应用层-部署java程序

一、部署java程序的两种方式

1.1 打包和分发Java应用程序的两种包格式

java程序开发完毕后,需要打包然后进行部署,包的两种常见压缩格式为

1、jar包

JAR包适用于多种Java应用,包括桌面、服务器或嵌入式系统。
JAR文件可以在任何Java支持的平台上运行,包括桌面、服务器或嵌入式系统

2、war包

WAR包专门用于Java Web应用程序,包括Servlet、JSP、HTML和JavaScript等
WAR文件主要部署于Web服务器和应用服务器,如Tomcat、Jetty或WebLogic

1.2 传统部署与基于maven的springboot项目部署

1、传统web项目部署,通常是导出java项目为war包,然后扔到tomcat中运行

可以用ide导出,也可以命令导出,后续我们会介绍。导出后放到tomcat的webapps目录下就行

 

2、由于springboot的start-web的jar包中集成了tomcat,所以springboot项目既可以采用jar包部署,也可以采用war包部署

对于jar包,直接启动:java -jar xxx.jar # 就可以拉起服务,监听http协议,因为内置了tomcat

 

二、基于maven的springboot项目部署

示例项目文档:https://doc.ruoyi.vip/ruoyi/document/hjbs.html

2.1 准备工作

JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Maven >= 3.0
安装jdk1.8 安装jdk
# 1、yum安装JDK1.8.0。
yum -y install java-1.8.0-openjdk*
# 2、验证安装
[root@web02 conf]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)

配置环境变量

find /usr/lib/jvm -name 'java-1.8.0-openjdk-1.8.0*'#输出/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64
# 注意:你上面find出来的结果可能跟我的不同,请以你find出来的为准,不要直接复制粘贴
vim /etc/profile # 添加
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH

 

安装mvn
# 官网:https://maven.apache.org/download.cgi
wget https://dlcdn.apache.org/maven/maven-3/3.9.7/binaries/apache-maven-3.9.7-bin.tar.gz --no-check-certificate
tar xf apache-maven-3.9.7-bin.tar.gz -C /test/
vim /etc/profile # 添加环境变量
PATH=/test/apache-maven-3.9.7/bin:$PATH
export PATH
source /etc/profile

 

安装mysql

略,请参考:https://egonlin.com/?p=9154 第1.3小节

2.1 导出jar包部署

参考部署文档:https://doc.ruoyi.vip/ruoyi/document/hjbs.html

 

1、把项目下载到本地

yum install git -y
mkdir /my_soft
cd /my_soft
git clone https://gitee.com/y_project/RuoYi.git

2、进入项目目录内,修改数据库配置、及服务本身监听的端口

[root@web03 /my_soft/RuoYi]# cd /my_soft/RuoYi/
[root@web03 /my_soft/RuoYi]# find . -name 'application-druid.yml'
./ruoyi-admin/src/main/resources/application-druid.yml
[root@web03 /my_soft/RuoYi]# vim ./ruoyi-admin/src/main/resources/application-druid.yml
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
# 问号左侧的ry就是要创建到mysql里的库名
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 'egon@123Abc'
[root@web03 /my_soft/RuoYi]# find . -name 'application.yml'
./ruoyi-admin/src/main/resources/application.yml
[root@web03 /my_soft/RuoYi]# vim ./ruoyi-admin/src/main/resources/application.yml
# 开发环境配置
server:
# 服务器的HTTP端口,默认为80
port: 8686
servlet:
# 应用的访问路径
context-path: /

 

3、不用做特殊的修改,默认导出的包格式就jar

# 如何导出其实你cat /my_soft/RuoYi/bin/package.bat 可以看到导出命令就是下面这条
cd /my_soft/RuoYi
mvn clean package -Dmaven.test.skip=true

4、成功后查看

[root@web03 /my_soft/RuoYi]# find . -name *.jar
./ruoyi-admin/target/ruoyi-admin.jar # 我们要启动的就是这个jar,其他的都是被调用者
./ruoyi-common/target/ruoyi-common-4.7.8.jar
./ruoyi-framework/target/ruoyi-framework-4.7.8.jar
./ruoyi-generator/target/ruoyi-generator-4.7.8.jar
./ruoyi-quartz/target/ruoyi-quartz-4.7.8.jar
./ruoyi-system/target/ruoyi-system-4.7.8.jar

5、初始化数据库

#========================》创建库与账号
# mysql -uroot -p'你原来的密码' # 登录后执行如下sql
create database ry;
create user 'root'@'localhost';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'egon@123Abc';
grant all on *.* to 'root'@'localhost';
flush privileges;
#========================》导入sql
mysql -uroot -p'egon@123Abc' -B ry < /my_soft/RuoYi/sql/quartz.sql
mysql -uroot -p'egon@123Abc' -B ry < /my_soft/RuoYi/sql/ry_20240529.sql

6、启动

# 查看cat /my_soft/RuoYi/bin/run.bat 可以看到提示的启动命令
# 提示只需要启动一个jar即可:java -jar %JAVA_OPTS% ruoyi-admin.jar
java -jar /my_soft/RuoYi/ruoyi-admin/target/ruoyi-admin.jar

7、启动成功显示如下

 

8、访问测试

2.2 导出war包部署

在2.1小节的基础上做就行了,拉代码、该配置、初始化mysql都一样,无非是导出一个新的war包来部署,如下

war部署方式
/my_soft/RuoYi/ruoyi-admin/pom.xml中的packaging原值为jar修改为war,放入tomcat服务器webapps

<packaging>war</packaging>

SpringBoot去除内嵌Tomcat

 <dependencies>
.........在这里面增加如下两段 
 </dependencies>
<!-- 多模块排除内置tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

导出war包

cd /my_soft/RuoYi
mvn clean package -Dmaven.test.skip=true

查看war包

[root@web03 /my_soft/RuoYi]# find . -name *.war
./ruoyi-admin/target/ruoyi-admin.war

拿着这个war包,我们来用tomcat部署

三、tomcat对于java程序的的作用
file

nginx+tomcat+java环境
1、tomcat本身就能对外提供http协议请求
2、但还是建议前面挡一个nginx

 

四、安装tomcat

4.1 安装jdk1.8

之前已经安装过了(详见2.1小节),所以本步略

4.2 安装tomcat

注意:Tomcat 10 + jdk 1.8启动会报错,换成Tomcat 9就可以了

Tomcat下载地址官网会持续更新。如果上述下载地址失效,请您直接访问Tomcat官网获取:https://tomcat.apache.org/
找到core处下载

# 版本更新可能导致下面的链接失效,请自行去官网查找最新
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.87/bin/apache-tomcat-9.0.87.tar.gz --no-check-certificate
tar -zxvf apache-tomcat-9.0.87.tar.gz
mv apache-tomcat-9.0.87 /usr/local/tomcat/
useradd www
chown -R www.www /usr/local/tomcat/

4.3 启动

/usr/local/tomcat/bin/catalina.sh start

file

五、部署war包

tomcat的默认应用根目录在:”tomcat的安装目录/webapps/” 下,我们的是/usr/local/tomcat/webapps/

把war包扔到该目录里,会自动解压,扔进去就可以访问

[root@web03 /my_soft/RuoYi]# find . -name *.war
./ruoyi-admin/target/ruoyi-admin.war
cp /my_soft/RuoYi/ruoyi-admin/target/ruoyi-admin.war /usr/local/tomcat/webapps/

拷贝完后查看,发现确实是自动解压了

[root@web03 /usr/local/tomcat]# cd /usr/local/tomcat/webapps/
[root@web03 /usr/local/tomcat/webapps]# ll
总用量 72012
drwxr-x--- 16 root root 4096 5月 29 22:23 docs
drwxr-x--- 7 root root 99 5月 29 22:23 examples
drwxr-x--- 6 root root 79 5月 29 22:23 host-manager
drwxr-x--- 6 root root 114 5月 29 22:23 manager
drwxr-x--- 3 root root 223 5月 29 22:23 ROOT
drwxr-x--- 5 root root 48 5月 30 01:29 ruoyi-admin # 自动解压了
-rw-r--r-- 1 root root 73733259 5月 30 01:29 ruoyi-admin.war

浏览器访问:http://192.168.71.114:8080/ruoyi-admin

如果我不想带着一个后缀:http://192.168.71.114:8080/ruoyi-admin访问,我想直接访问http://192.168.71.114:8080/

[root@web03 /usr/local/tomcat/webapps]# ll
总用量 72012
drwxr-x--- 16 root root 4096 529 22:23 docs
drwxr-x--- 7 root root 99 529 22:23 examples
drwxr-x--- 6 root root 79 529 22:23 host-manager
drwxr-x--- 6 root root 114 529 22:23 manager
drwxr-x--- 3 root root 223 529 22:23 ROOT
drwxr-x--- 5 root root 48 530 01:29 ruoyi-admin
-rw-r--r-- 1 root root 73733259 530 01:29 ruoyi-admin.war
[root@web03 /usr/local/tomcat/webapps]#
[root@web03 /usr/local/tomcat/webapps]#
[root@web03 /usr/local/tomcat/webapps]# mv ROOT ROOT_bak
[root@web03 /usr/local/tomcat/webapps]# mv ruoyi-admin ROOT
[root@web03 /usr/local/tomcat/webapps]#

如果想修改tomcat的端口

[root@web03 ~]# vim /usr/local/tomcat/conf/server.xml
<Connector port="18080" protocol="HTTP/1.1"
[root@web03 ~]# /usr/local/tomcat/bin/catalina.sh stop
[root@web03 ~]# /usr/local/tomcat/bin/catalina.sh start
[root@web03 ~]# netstat -tunalp |grep -w 18080
tcp6 0 0 :::18080 :::* LISTEN 51025/java

六、配置nginx转发tomcat

我们之前为了能够不带后缀去访问,做了如下改动

[root@web03 /usr/local/tomcat/webapps]# mv ROOT ROOT_bak 

[root@web03 /usr/local/tomcat/webapps]# mv ruoyi-admin ROOT

其实,如果你加一层nginx来代理的话,你不需要做上面的事情,nginx就能帮你达到目的

所以我们先来还原一下

cd /usr/local/tomcat/webapps/
mv ROOT ruoyi-admin

 

 

 

通过http协议转发

cat /etc/nginx/conf.d/default.conf

[root@web03 /usr/local/tomcat/webapps]# cat /etc/nginx/conf.d/www.conf 
server {
    listen       80;
    server_name  localhost;
    location / {
        rewrite ^(.*)$ /ruoyi-admin$1;
    }
 
    location /ruoyi-admin {
        # 把请求转发到上面定义的Tomcat服务器
        proxy_pass   http://127.0.0.1:18080; 

        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

proxy_pass http://127.0.0.1:18080; 后面不能跟uri路径

proxy_pass http://127.0.0.1:8080/ruoyi-admin/; 语法错误

七 tomcat配置介绍

<server> ---> 可以监听一个端口,从此端口上可以远程向该实例发送shutdown关闭命令。
<service> ---> 是一个逻辑组件,用于绑定connector和container,有一个service就是一个服务
<connector PORT /> --->相当于nginx中的listen, 此处监听的端口才是对外暴露服务的端口,connector称之为连接器,它监听到的请求会交给engine具体处理处理
<engine>---> 接请求,按照分析的结果将相关参数传递给匹配出的虚拟主机
<host name=www.a.com appBase=/www/a > ----> 相当于nginx中的server_name
<context path="" docBase=/www/a /> ---> 相当于nginx中的localtion
<context path="/xuexi" docBase=/www/a/xuexi />
</host>
<host>
<context />
</host>
</engine>
</service>
</server>

详解见:
https://egonlin.com/?p=9221

 

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 沪ICP备2022009235号 沪公网安备31011802005110号 青浦区尚茂路798弄 联系方式-13697081366