Springboot 应用部署建议

springboot应用的人越来越多,看到许多人在部署的时候依旧热衷于使用 nohup,& 等手段(可在 https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 查看更多手段,developerWorks 有人说是IBM 的一大彩蛋,确实不少好文章)来运行程序,问题都很明显,系统重启后不会自动启动,为何我们的应用不能像 nginx,haproxy,redis 等应用一样,注册为服务呢!查看springboot官网也有提到如何注册为服务启动,地址为 https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#deployment-service ,在参考其安装过程中遇到一些问题,并有一些自己想法,故写篇文章记录下。下面是为了说明问题使用命令,在生产上建议不要使用shell脚本执行,而要使用ansible脚本执行安装过程。

环境准备

主机一台,系统centos7 以上
应用一个 seal-app-1.0.1.jar
安装规划

应用启动用户,家目录 tomcat:tomcat /var/lib/tomcat
应用放置目录 /var/lib/tomcat/app
应用日志目录 /var/log/tomcat
应用打包



安装

卸载openjdk,请根据自己情况卸载

安装 oracle jdk,请根据自己情况安装,建议 rpm 包安装

至于问为何不用 openjdk 我了解到的是 oracle jdk 目前来看,大家都用,并且没问题

创建启动用户

useradd -m -d /var/lib/tomcat -s /sbin/nologin tomcat

创建 app存储目录

mkdir /var/lib/tomcat/app

将 seal-app-1.0.1.jar 移动到 /var/lib/tomcat/app 中,并改变属主属组

chown tomcat:tomcat -R /var/lib/tomcat/app/seal-app-1.0.1.jar
chmod 500 /var/lib/tomcat/app/seal-app-1.0.1.jar

若想保存历史版本,则创建硬连接,否则重命名此文件

ln /var/lib/tomcat/app/seal-app-1.0.1.jar /var/lib/tomcat/app/seal-app.jar

创建软链接,放到 /usr/bin 目录下供 service 配置文件使用。

ln -sv /var/lib/tomcat/app/seal-app.jar /usr/bin/seal-app.jar

注意 此处做两次链接的原因。

1 启动文件大多放在 /usr/bin 目录下

2 springboot 在启动时可以加载一个配置文件,来影响tomcat及自己应用的配置。其规则为

1 springboot 默认会在和启动应用的同目录下,找一个同名且后缀名为 .conf 配置文件

2 springboot 会在启动的时候将软连接解析为对应真实地址

3 springboot 会从环境变量中读取 CONF_FOLDER 指定的路径

根据以上规则,springboot 默认会解析到 /var/lib/tomcat/app/seal-app.jar,

并且会找 /var/lib/tomcat/app/seal-app.conf 配置文件

所以一定要保证硬链接的名为 seal-app.jar

禁止改动 jar 文件

chattr +i /var/lib/tomcat/app/seal-app.jar

# 注意 更新程序需要如下操作

允许修改 jar 文件

chattr -i /var/lib/tomcat/app/seal-app.jar

删除文件

rm /var/lib/tomcat/app/seal-app.jar

更新 jar 文件

ln /var/lib/tomcat/app/seal-app-${NEW_VERSION}-exec.jar /var/lib/tomcat/app/seal-app.jar

禁止改动 jar 文件

chattr +i /var/lib/tomcat/app/seal-app.jar

创建日志目录

mkdir /var/log/tomcat
chown tomcat:tomcat /var/log/tomcat

创建配置文件目录,因操作用户为 root,则下面目录若不修改都是 root用户的

mkdir /etc/tomcat
chmod 755 /etc/tomcat

配置文件

vim /etc/tomcat/seal-app.conf

JAVA_OPTS=-Xms1024M -Xmx1024M

设置为 tomcat 只读

chmod 644 /etc/tomcat/seal-app.conf

配置启动文件,注意此处 CONF_FOLDER=/etc/tomcat

vim /etc/systemd/system/seal-app.service

[Unit]
Description=seal-app
After=syslog.target

[Service]
User=tomcat
Environment="CONF_FOLDER=/etc/tomcat"
ExecStart=/usr/bin/seal-app.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
------------
systemctl daemon-reload
systemctl enable seal-app
systemctl start seal-app

后记

这样实现的部署感觉更符合linxu系统的规划,写成这样我想 ansible 脚本应该不难实现了吧。当然容器化目前看是未来,而 kubernetes 实现了完整的运维环境,要比人肉运维好多了。

猜你喜欢

转载自www.cnblogs.com/dongsk/p/9177321.html