【服务器】在 CentOS 服务器部署 Springboot 项目(使用pm2托管)

{% note success %}

在CentOS 服务器部署 Springboot 项目

{% endnote %}

{% note primary %}

准备工作 | 安装 JDk

{% endnote %}

{% label warning@依次 %}执行下列命令,查看自己的处理器型号并安装对应的 jdk

注意!wget 并不是唯一下载文件的方式,如果下载太慢或者下载失败,可以考虑其他方式(比如我就是下载到本地后,用宝塔上传到服务器,解压缩重命名等一系列操作都是在宝塔完成的。

# 查看处理器型号 运行结果 x86_64
uname -m

# 执行下列命令,进入 `/usr/local` 文件夹下并创建 jdk 文件夹并进入该文件夹
cd /usr/local
mkdir jdk
cd jdk

# 使用 wget+url 的方式下载相应的 jdk 压缩文件(推荐)
wget https://www.oracle.com/java/technologies/downloads/#license-lightbox

#执行下列命令,解压缩文件 并 移动到 `jdk1.8` 文件夹下(压缩包文件名可能不一致,可以使用 ls 命令查看文件夹下有哪些文件
sudo tar -xvf jdk-8u144-linux-x64.tar.gz
mv jdk-8u144-linux-x64 jdk1.8

# 删除压缩包
rm -rf jdk-8u144-linux-x64.tar.gz

# 修改环境变量(注意一定要在 root 模式下执行)
sudo vim /etc/profile

# 在该文件内加入以下内容 (vim 的基本使用操作不再赘述,可以去我的博客里面搜索`vim`找到相应的文档)
# 记得查看 file 地址是否正确
export JAVA_HOME=/usr/local/jdk/jdk1.8
export JRE_HOME=/usr/local/jdk/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/LIB/DT.JAR:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

# 使用 esc + :wq 保存并退出文档后,执行下列命令,使配置生效
sudo source /etc/profile

# 使用下列命令查看是否生效
java -version

# 显示下列提示时,安装成功
java version "1.8.0_144" 
Java(TM) SE Runtime Environment (build 1.8.0_144-b03) 
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

# 不成功请回过头检查哪一步操作错误了,尤其是环境变量的文件地址是否正确(记得常使用 ls 随时查看)

{% note primary %}

在本地将项目打成 jar 包

{% endnote %}

打开 IDEA 后,在右侧的 {% label success@Maven %} 菜单中,执行一次' {% label success@package %} ',随后 Maven 会在左侧目录树中自动生成 target 目录,打开即可在下面找到与项目名同名的项目名称{% label [email protected] %} 文件,将其上传到服务器的任意文件夹下(我推荐创建一个新的文件夹'/home/JavaDemo '并存放到该文件夹下)

# 执行下列命令,进入到该文件夹下(文件夹名称按你的来)
cd /home/JavaDemo

# 执行下列命令,启动 Springboot 项目
java -jar 项目名称.jar

执行上述命令后,可以看到控制台开始打印日志,则项目启动成功


原本到这里应该就结束了,但是与 Hexo 项目一样,当你关闭 ssh 窗口后,ssh 连接断开,项目就会自动关闭了(该操作相当于你关闭了本地的 terminal 端口并且在跳出来的小弹窗中选择了{% label danger@kill %}这个进程。

于是接下来就要思考,如何保证 Springboot 项目稳定运行不关闭呢?在之前进行 Hexo 部署的时候,我考虑的解决方案是保持 ssh 长连接,首先不能关闭窗口这就比较麻烦,我本地的机器一关机服务器也不能用了,我还不如部署到本地;其次如果一段时间不进行操作,ssh 也会自动失去连接(这一点应该可以设置,但是我并没有进行尝试,毕竟这种方法太鸡肋了)。

于是就想到了 pm2,将项目交由 pm2 托管,无论 ssh 连接如何都无所谓。

{% note success %}

使用 pm2 托管 Springboot 项目

{% endnote %}

{% note primary %}

安装 pm2

{% endnote %}

  • 安装 nodejs
  • npm install pm2 -g

{% note primary %}

创建托管文件

{% endnote %}

在项目的同级目录下创建一个 name.json 文件(name 随你取,直接叫 name 也可以)

将下列代码复制到 name.json 文件夹中去

{
    "name": "my-server",
    "script": "/usr/local/jdk/jdk8/bin/java",
    "args": [
        "-jar",
        "demo4.jar"
    ],
    "exec_interpreter": "",
    "exec_mode": "fork"
}
  • name 进程名称(显示在pm2 list命令中)
  • script 执行进程名称,如果需要执行PHP脚本则填写php解释器的路径,本文为java(找到你的 jdk/bin/java)
  • args 传给执行进程的参数,多个参数以数组单元分割
  • exec_interpreter NodeJs解析器,本文不适用
  • exec_mode 执行模式[cluster|fork]这个针对NodeJs应用的配置,非NodeJs应用统一fork

保存并退出文件

{% note primary %}

启动项目

{% endnote %}

使用下列指令启动 pm2 项目

pm2 start name.json

项目启动后,控制台不会有任何输出,可以直接使用浏览器或者 postman 进行访问测试。

进行其他操作可以参考下列命令

# 查看目前 pm2 托管了哪些项目
pm2 list

# 每一个交由 pm2 托管的项目都会获得一个 id,下列的 0 就是 一个 id
# 停止某个 pm2 项目( 0是 进程id 想关哪个就关哪个)
pm2 stop 0

# 已经交由 pm2 托管的项目,再次启动的话无需找到相应的 js/JSON 文件,只需 start 相应的进程 id 就可以
pm2 start 0

{% note primary %}

访问效果

{% endnote %}

此时已经关闭了 ssh 连接了

你可能感兴趣的:(服务器,centos,spring,boot,java,linux)