Spring Boot项目的build.gradle文件需要如下配置。
build.gradle
jar {
baseName = 'your-app'
version = version
}
springBoot {
buildInfo()
executable = true
mainClass = "com.shunya.App"
}
可执行文件=真
这是在 unix 系统(Centos 和 Ubuntu)上制作完全可执行的 jar 所必需的
创建 .conf 文件
如果要配置自定义 JVM 属性或 Spring Boot 应用程序运行参数,则可以创建一个与 Spring Boot 应用程序名称同名的 .conf 文件,并将其与 jar 文件并行放置。
考虑到 your-app.jar 是你的 Spring Boot 应用的名字,那么你可以创建如下文件。
JAVA_OPTS="-Xms64m -Xmx64m"
RUN_ARGS=--spring.profiles.active=prod
LOG_FOLDER=/custom/log/folder
此配置将为 Spring Boot 应用程序设置 64 MB 内存并激活 prod 配置文件。
在 linux 中创建新用户
为了增强安全性,我们必须创建一个特定用户来将 Spring Boot 应用程序作为服务运行。
创建一个新用户
sudo useradd -s /sbin/nologin springboot
在 Ubuntu / Debian 上,将上述命令修改如下:
sudo useradd -s /usr/sbin/nologin springboot
设置密码
sudo passwd springboot
使springboot成为可执行文件的所有者
chown springboot:springboot your-app.jar
防止修改jar文件
chmod 500 your-app.jar
这将配置jar的权限,使其不能被写入,只能由其所有者springboot读取或执行。
您可以选择使用更改属性 (chattr) 命令将您的 jar 文件设为不可变。
sudo chattr +i your-app.jar
也应为相应的 .conf 文件设置适当的权限。 .conf 只需要读取权限(八进制 400)而不是读取 + 执行(八进制 500)权限
chmod 400 your-app.conf
创建 Systemd 服务
/etc/systemd/system/your-app.service
[Unit]
Description=Your app description
After=syslog.target
[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
进程被操作系统杀死时自动重启
添加以下两个属性(Restart 和 RestartSec)以在失败时自动重启进程。
/etc/systemd/system/your-app.service
[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
Restart=always
RestartSec=30
此更改将使 Spring Boot 应用程序在失败时重启,延迟 30 秒。如果您使用 systemctl 命令停止服务,则不会发生重新启动。
在系统启动时安排服务
要将应用程序标记为在系统启动时自动启动,请使用以下命令:
在系统启动时启用 Spring Boot 应用程序
sudo systemctl enable your-app.service
启动和停止服务
systemctl 可以在 Ubuntu 16.04 LTS 和 18.04 LTS 中用于启动和停止进程。
开始进程
sudo systemctl start your-app
停止进程
sudo systemctl stop your-app
参考文献
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html