美文网首页
SpringBoot多Jar包部署在Nginx上

SpringBoot多Jar包部署在Nginx上

作者: Tsnow308 | 来源:发表于2020-08-19 14:20 被阅读0次

    引言

    Springboot项目部署到服务器常见的方式有打成war包部署Tomcat容器或者打成jar包直接使用内置容器运行,我之前也都打成war包部署到tomcat,这种方式虽然没问题 但是后期维护比较麻烦。从官方的说明中打成jar部署是最好的方式。

    本文包含以下内容:

    Linux服务器上安装JDK
    Springboot项目打成Jar包
    Nginx部署项目分发

    一、Linux服务器上安装JDK
    1、Java JDK是区分32位和64位的,所以在安装JDK之前需要首先判断一下我们Linux是哪一个版本的,在Xshell 6中通过执行以下命令:

    uname –a
    

    显示结果中如果有x86_64就是64位的,没有就是32位的,可以看出我这里的版本是64位的。
    2、从Oracle官网上下载Linux x64版本的jdk-8u45-linux-x64.rpm文件,如下图所示:进入Oracle下载首页

    image.png
    拉到最下面
    image.png
    image.png
    3、使用 xftp 将JDK上传到Linux服务器
    切换到/usr/local目录下,在此目录下新建文件夹jdk_8u45,用于存放jdk的安装包,命令如下
    cd /usr/local
    mkdir jdk_8u45
    

    使用远程连接工具 Xftp 连接服务器,然后使用如下命令,上传到/usr/local/jdk_8u45目录下
    上传完后的文件如下,文件只有读写权限,没有执行权限


    image.png

    使用如下命令授权,如果文件已经有了执行权限,此步骤可省略

    chmod 775 jdk-8U45-linux-x64.rpm
    

    再次ll查看


    image.png

    4、安装JDK
    执行如下命令安装jdk

    # rpm -ivh jdk-8u45-linux-x64.rpm
    

    JDK安装成功后,默认存放在/usr/java文件目录中
    5、配置环境变量
    使用 vim或 vi编辑器打开文件/etc/profile

    # vim /etc/profile 
    # vi /etc/profile
    

    在文件尾部添加如下内容,保存退出

    export JAVA_HOME=/usr/java/jdk1.7.0_71
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
    

    此时,我们刚刚配置的环境变量并没有起效,输入如下命令,使用环境变量立即生效

    # source /etc/profile
    

    输入如下命令验证环境变量是否生效

    # echo $PATH
    

    输入如下命令查看jdk版本

    # java -version
    

    二、Springboot项目打成Jar包
    1、在pom.xml文件中添加

    <packaging>jar</packaging>
    

    2、在pom.xml中添加新的插件

        <build>
            <finalName>sell</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
    
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                    <configuration>
                        <!-- 不指定单元测试 -->
                        <skipTests>true</skipTests>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    

    3、使用IDEA编辑器的Maven插件进行打包

    image.png
    出现build success即为打包完成
    4、在项目中的target目录下出现一个可执行的jar文件

    5、使用FTP工具将jar包上传至root目录下

    此时Jar包已打包完成并上传至Linux服务器上。

    Springboot默认是/,这样直接通过http://ip:port/就可以访问到index页面,但是我们要通过nginx配置多项目的话就要给每一个项目单独指定context-path

    记住: Springboot项目得在配置文件application.properties中配置 (不然项目无法被正确访问)

    server.context-path: /sell
    

    三、Nginx部署项目分发
    1、在Linux服务器上进入Nginx配置目录:

     cd /usr/local/nginx/conf/
    

    这里给出nginx.conf的配置

        server {
            listen       80;
            server_name  localhost;
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm index.php;
            }
            
            #将/wvv请求转发给http://127.0.0.1:1992/wvv处理
            location /wvv {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:1992/wvv;
        }
      }
    

    同理可应用在HTTPS上的分发策略

    注意上面的端口号一定要跟程序中application.properties保持一致。

    如果是部署多个SpringBoot项目,则可以多次添加如下配置,只要修改成不一样的路径即可

    #将/wvv请求转发给http://127.0.0.1:1991/project处理
        location /project{
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_pass http://127.0.0.1:1991/project;
        }
    

    配置完成后,重启nginx。

    nginx -s reload
    

    接下来直接使用nohup命令进行后台启动应用jar包,但是要在jar包所在当前目录进行nohup启动。(注意)

    nohup java -jar sell.jar  &
    

    其实到这里本文教程算是告一段落了,但是重新启动项目还是比较繁琐的。
    四、编辑脚本以实现自动化
    先来说一下,正常的重启方式吧。

    两种方式进行进程号的查询

    ps -ef|grep jar包名 
    或者
    netstat -nap|grep jar包启动端口号,如8080
    

    然后去kill进程

    kill -9 刚刚查询到的进程号
    

    然后重新上传新的要覆盖的Jar包,进行nohup命令后台启动。
    当在屏幕上敲击上述命令之后,屏幕上会出现如下信息:
    $ nohup: ignoring input and appending output to `nohup.out’
    敲击回车,就退出了nohup.out当前的界面,进入正常的命令行。

    整合了一个启动脚本,顿时项目部署变得无比简单。

    下面是具体步骤:

    1、项目重启的脚本,写个start.sh 的脚本,注意脚本和jar包同级目录,主要是修改RESOURCE_NAME这一项的Jar包名称。

    vi start.sh
    
    #!/bin/sh
    RESOURCE_NAME=resource-0.0.1-SNAPSHOT.jar
     
    tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
    if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
    fi
    sleep 5
    tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
    if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
    else
    echo 'Stop Success!'
    fi
     
    tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
    if [ ${tpid} ]; then
        echo 'App is running.'
    else
        echo 'App is NOT running.'
    fi
     
    rm -f tpid
    nohup java -jar ./$RESOURCE_NAME --spring.profiles.active=test &
    echo $! > tpid
    echo Start Success!
    

    2、chmod +x start.sh (第一次运行的时候获取一下超级管理员权限)
    然后以后每次运行直接
    ./start.sh 即可
    五、多个Jar包应用同时部署
    在服务器目录根据个人喜好新建一个文件夹,专门用来存放spring-boot打包成的jar和重启脚本,如下所示:


    image.png
    image.png
    image.png

    六、更新jar包
    1.查看之前jar包进程

    ps aux | grep 包名
    
    image.png

    2.杀死当前进程

    kill 进程号(带有java -jar的进程)
    

    3.将之前的jar文件删除,使用ftp将新的jar包上传至服务器
    4.启动服务

    nohup java -jar jar包名 > log.file 2>&1 &
    

    5.重启防火墙与数据库(非必要、安全考虑)

    service iptables restart    //防火墙
    service mysqld restart     //MySQL数据库
    

    6.重启nginx

    ./nginx -s reload
    

    相关文章

      网友评论

          本文标题:SpringBoot多Jar包部署在Nginx上

          本文链接:https://www.haomeiwen.com/subject/tpwrjktx.html