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
应用打包
<!-- 切记一定要添加 executable --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin>
安装
# 创建启动用户 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 实现了完整的运维环境,要比人肉运维好多了。
原文地址:https://my.oschina.net/seal90/blog/1828876
相关推荐
-
SpringCloud-Eureka注册与发现 Java框架
2019-5-20
-
深入了解数据校验:Java Bean Validation 2.0(JSR380) Java框架
2019-8-9
-
随行付微服务测试之接口测试和契约测试 Java框架
2020-6-1
-
【Jenkins】构建并部署SpringBoot Java框架
2020-6-1
-
曹工说Spring Boot源码(26)– 学习字节码也太难了,实在不能忍受了,写了个小小的字节码执行引擎 Java框架
2020-6-11
-
多个module实体类集合打一个jar包并上传至远程库 Java框架
2019-9-18
-
springboot配置免费的sslforfree ssl证书 Java框架
2020-6-8
-
Activiti开发案例之会签多实例任务 Java框架
2019-3-13
-
Spring Cache的基本使用与分析 Java框架
2020-6-11
-
IOC 之深入理解 Spring IoC Java框架
2018-12-11