微服务架构之Spring Boot(八十六)

2022-05-23 15:47:52 浏览数 (1)

64.安装Spring Boot应用程序

除了使用 java -jar 运行Spring Boot应用程序之外,还可以为Unix系统创建完全可执行的应用程序。完全可执行的jar可以像任何其他可执行

二进制文件一样执行,也可以 使用 init.d 或 systemd 注册。这使得在常见生产环境中安装和管理Spring Boot应用程序变得非常容易。

警告

完全可执行的jar通过在文件的前面嵌入额外的脚本来工作。目前,某些工具不接受此格式,因此您可能无法始终使用此

技术。例如, jar -xf 可能无法提取已完全可执行的jar或战争。建议您只有在打算直接执行jar或war时才能使jar或war

完全可执行,而不是使用 java -jar 运行它或将其部署到servlet容器。

要使用Maven创建“完全可执行”jar,请使用以下插件配置:

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

<configuration>

<executable>true</executable>

</configuration>

</plugin>

以下示例显示了等效的Gradle配置:

bootJar {

launchScript()

}

然后,您可以通过键入 ./my-application.jar (其中 my-application 是您的工件的名称)来运行您的应用程序。包含jar的目录用作应用程

序的工作目录。

64.1支持的操作系统

默认脚本支持大多数Linux发行版,并在CentOS和Ubuntu上进行测试。其他平台,如OS X和FreeBSD,需要使用自定

义 embeddedLaunchScript 。

64.2 Unix / Linux服务

Spring Boot应用程序可以使用 init.d 或 systemd 轻松启动为Unix / Linux服务。

64.2.1作为 init.d 服务安装(系统V)

如果您配置了Spring Boot的Maven或Gradle插件来生成完全可执行的jar,并且您没有使用自定义 embeddedLaunchScript ,那么您的应用程

序可以用作 init.d 服务。为此,请将jar符号链接到 init.d 以支持标准 start , stop , restart 和 status 命令。

该脚本支持以下功能:

以拥有jar文件的用户身份启动服务

使用 /var/run/<appname>/<appname>.pid 跟踪应用程序的PID

将控制台日志写入 /var/log/<appname>.log

假设您在 /var/myapp 中安装了Spring Boot应用程序,要将Spring Boot应用程序安装为 init.d 服务,请创建一个符号链接,如下所示:

$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp

安装后,您可以按常规方式启动和停止服务。例如,在基于Debian的系统上,您可以使用以下命令启动它:

$ service myapp start

如果您的应用程序无法启动,请检查写入 /var/log/<appname>.log 的日志文件是否有错误。

您还可以使用标准操作系统工具标记应用程序以自动启动。例如,在Debian上,您可以使用以下命令:

$ update-rc.d myapp defaults <priority>

保护 init.d 服务

以下是一组有关如何保护作为init.d服务运行的Spring Boot应用程序的指南。它并不是为了强化应用程序及其运行环境而应该做的

所有事情的详尽列表。

当以root身份执行时,就像root用于启动init.d服务的情况一样,默认可执行脚本以拥有jar文件的用户身份运行应用程序。您永远不应该以 root

运行Spring Boot应用程序,因此您的应用程序的jar文件永远不应该由root拥有。相反,创建一个特定用户来运行您的应用程序并使用 chown 使

其成为jar文件的所有者,如以下示例所示:

$ chown bootapp:bootapp your-app.jar

在这种情况下,默认可执行脚本以 bootapp 用户身份运行应用程序。

为了减少应用程序用户帐户遭到入侵的可能性,您应该考虑阻止它使用登录shell。例如,您可以将帐户的shell设置

为 /usr/sbin/nologin 。

您还应该采取措施来防止修改应用程序的jar文件。首先,配置其权限,使其无法写入,只能由其所有者读取或执行,如以下示例所示:

$ chmod 500 your-app.jar

其次,如果您的应用程序或运行它的帐户受到损害,您还应该采取措施限制损害。如果攻击者确实获得了访问权限,他们可以使jar文件可写并更

改其内容。防止这种情况的一种方法是使用 chattr 使其不可变,如以下示例所示:

$ sudo chattr i your-app.jar

这将阻止任何用户(包括root)修改jar。

如果root用于控制应用程序的服务,并且您 使用 .conf 文件来自定义其启动,则root用户将读取并评估 .conf 文件。它应该得到相应的保护。

使用 chmod 以便文件只能由所有者读取并使用 chown 使root成为所有者,如以下示例所示:

$ chmod 400 your-app.conf

$ sudo chown root:root your-app.conf

0 人点赞