linux - systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?

标签 linux spring spring-boot systemd

我有 Spring Boot 2 可执行 jar(通过命令 java -jar myapp.jar 运行),我需要将其作为 systemd 服务部署到远程 linux 服务器。 Jenkins CI 将管理从源代码构建此 jar 并将其复制到适当的位置并重新启动与 myapp.jar 关联的 java 服务。除了 jenkins 用户外,Linux 服务器只有一个用户“jonas”具有 sudo 权限。从生产环境中的安全最佳实践角度来看,我需要将 myapp.jar 放在 linux 服务器上的什么位置?可能的位置:

 /var/myapplications/myapp.jar 
 /home/jona/myapplications/myapp.jar
 /opt//myapplications/myapp.jar

myapp.jar 生成的日志文件将位于何处?

最佳答案

根据我的经验,我建议将所有第三方和应用程序保留在 /opt/{{ app_name }}

如果您喜欢以下结构,您可以按照以下结构进行操作,该结构使新工件的部署更加容易,并且可以选择在需要时快速回滚。

/opt/{{ app_name }}/releases/{{ app_version }}

/opt/{{ app_name }}/current <- 上面的符号链接(symbolic link)

/opt/{{ app_name }}/current/logs <- 日志目录将成为 releases/{{ app_version }}

您的部署脚本可以为此目的创建相应的文件夹、管理权限和符号链接(symbolic link)。

我个人喜欢的是确保它在具有适当权限的非特权用户下运行,以确保只有特定用户可以递归地读取/执行/写入目录,其中包括可能包含一些敏感信息的日志作为异常(exception)的一部分包含在内,但这完全取决于您的记录方式。

关于linux - systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49986193/

相关文章:

linux - 将 SpecFlow 测试添加到 VSCode 中的 .NET Core 项目

linux - 好奇如何指定MPI的核数才能达到最快的科学计算

linux - Bash 脚本生成空文件

java - 用于嵌套属性的 Jackson2 PropertyFilter,还是有其他方法?

java - Spring 4.0 和 ActiveMQ enableStompBrokerRelay 错误

java - 了解 spring 4 (spring-context) maven 依赖

spring - 尝试使用 Spring Boot 4 设置正确的 HTTPS

spring-boot - 无阻塞地插入两个集合

linux - grep 一段之前的特定内容

java - 根据 ID 和列表中的另一个 ID 查找记录