在CentOS8中部署SpringBoot项目并实现开机自动启动

1. 概况

  • 开发环境:windows 10
  • 远程工具:windows terminal
  • 项目运行环境:CentOS 8
  • 项目开发工具:idea
  • 项目开发方式:SpringBoot
  • 项目构建工具:maven
  • 项目打包方式:jar

2. 准备工作

安装 windows 中用于文件上传的工具 pscp.exe。

  1. 下载地址
    在CentOS8中部署SpringBoot项目并实现开机自动启动_第1张图片

  2. 将下载下来的 exe 文件放在 C:\Windows\System32 就可以在命令行中使用 pcsp 命令上传了

3. 打包开发好的项目为 jar 文件

在 idea 中使用 maven 工具进行打包
在CentOS8中部署SpringBoot项目并实现开机自动启动_第2张图片

注意:在打包时可以先点击图中的闪电图标,用于跳过测试,用于节省时间和避免测试过程中手动输入的参数与真实环境参数不符造成打包失败的现象。

打包好后就可以在输出信息中找到打包好的 jar 文件了。
在这里插入图片描述

4. 准备项目的运行环境

在 CentOS 中创建用于放置 jar 的目录。windows terminal 可以直接使用 ssh 命令,所以这里使用 windows terminal 远程到 CentOS 中
在这里插入图片描述

  1. 创建目录(目录的名字和位置根据自己的实际情况决定)

    mkdir /home/PublicServer
    
  2. 使用 pscp 命令上传 jar 包到项目目录

    pscp -P 22 C:\Users\jiand\Desktop\network.jar [email protected]:/home/PublicServer/
    

在这里插入图片描述

注意:正常情况下使用 pscp 命令直接跟上文件路径就可以了,但我在传输时出现ssh_init: Network error: Cannot assign requested address错误,所以加上了端口号 22 进行传输。

5. 完成 jar 文件的开机启动

  1. 打开相应网络端口

    由于 CentOS 主要用于服务器环境,所以其防火墙规则是很严格的。要使用网络服务,必须在防火墙中打开相应的端口,我这个项目假定使用 8088 端口。首先查看该端口是否已经开启

    firewall-cmd --list-ports #查看所有放行的端口
    

    如果该端口没有开启,则使用下面的命令开启

    firewall-cmd --zone=public --add-port=8088/tcp --permanent #放行8088端口
    firewall-cmd --reload #务必要重载才能生效开放的端口
    
  2. 在 jar存放的目录中编写手动启动的脚本 autodeploy.sh

    #!/bin/bash
    JAVA_HOME=/opt/jdk-11.0.6
    PATH=$PATH:$JAVA_HOME/bin                     # shell脚本必须指定,因为脚本不会自动加载环境变量,不写的话导致出现此错误
    app='/home/PublicServer/network.jar'    #jar包的决定路径
    args='-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC'  #java程序启动参数,可不写
    LOGS_FILE=/dev/null                           # 把打印的日志扔进垃圾桶
    
    cmd=$1                                        #获取执行脚本的时候带的参数
    pid=`ps -ef|grep java|grep $app|awk '{print $2}'`                # 抓取对应的java进程
    
    startup(){
      aa=`nohup java -jar $args $app >> $LOGS_FILE 2>&1 &`
      echo $aa
    }
    
    if [ ! $cmd ]; then
      echo "Please specify args 'start|restart|stop'"
      exit
    fi
    
    if [ $cmd == 'start' ]; then
      if [ ! $pid ]; then
        startup
      else
        echo "$app is running! pid=$pid"
      fi
    fi
    
    if [ $cmd == 'restart' ]; then
      if [ $pid ]
        then
          echo "$pid will be killed after 3 seconds!"
          sleep 3
          kill -9 $pid
      fi
      startup
    fi
    
    if [ $cmd == 'stop' ]; then
      if [ $pid ]; then
        echo "$pid will be killed after 3 seconds!"
        sleep 3
        kill -9 $pid
      fi
      echo "$app is stopped"
    fi
    

    写好脚本之后,需要为脚本添加可执行权限

    chmod a+x autodeploy.sh 
    

    通过脚本也可以手动启动项目,脚本会自检项目是否启动,并输出对应的信息
    在CentOS8中部署SpringBoot项目并实现开机自动启动_第3张图片

  3. 完成自动启动

    /etc/systemd/system 创建 autodeploy.service

    [Unit]
    Description=Springboot project for TW network auto start
    After=syslog.target network.target nss-lookup.target
    
    [Service]
    User=root
    Group=root
    Type=forking
    ExecStart=sh /home/PublicServer/autodeploy.sh start
    ExecReload=sh /home/PublicServer/autodeploy.sh restart
    ExecStop=sh /home/PublicServer/autodeploy.sh stop
    
    [Install]
    WantedBy=multi-user.target
    

    写完保存,执行

    systemctl enable autodeploy.service
    

    发现系统将创建一个软连接到 /etc/systemd/system/multi-user.target.wants

    此时重启就可以完成自启了。

在CentOS8中部署SpringBoot项目并实现开机自动启动_第4张图片

6. 参考资料

  1. windows10下将文件传送到Linux(CentOS)

  2. 从win10远程传输文件到centos7

  3. CentOS8 systemd 自动启动 jar

  4. Centos 7将java jar包自定义开机启动服务

  5. CentOS7服务器系统开放端口及其相关命令

你可能感兴趣的:(Linux,java学习,linux,centos,jar,spring,boot,自动启动)