一、部署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程序的的作用


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

五、部署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 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 [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

