{% 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 success@.jar %} 文件,将其上传到服务器的任意文件夹下(我推荐创建一个新的文件夹'/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 连接了