systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?
Posted
技术标签:
【中文标题】systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?【英文标题】:Java executable jar location best practice for systemd and Jenkins CI? 【发布时间】:2018-10-03 19:13:12 【问题描述】:我有 Spring Boot 2 可执行 jar(由命令 java -jar myapp.jar 运行),我需要将其作为 systemd 服务部署到远程 linux 服务器。 Jenkins CI 将管理从源代码构建这个 jar 并将其复制到适当的位置并重新启动与 myapp.jar
关联的 java 服务。除了 jenkins 用户之外,Linux 服务器只有一个具有 sudo 权限 的用户“jonas”。从生产环境中安全最佳实践的角度来看,我需要将myapp.jar
放在 linux 服务器的哪个位置?可能的位置:
/var/myapplications/myapp.jar
/home/jona/myapplications/myapp.jar
/opt//myapplications/myapp.jar
还有myapp.jar
生成的日志文件会放在哪里?
【问题讨论】:
【参考方案1】:根据我的经验,我建议将所有第三方和应用程序保留在/opt/ app_name
如果您喜欢以下结构,您可以关注该结构,该结构使新工件的部署更加容易,并且可以在需要时快速回滚。
/opt/ app_name /releases/ app_version
/opt/ app_name /current
/opt/ app_name /current/logs
releases/ app_version 一部分的日志目录
您的部署脚本可以为此目的创建相应的文件夹、管理权限和符号链接。
我个人喜欢的是确保它在具有适当权限的非特权用户下运行,以确保只有特定用户可以递归地读取/执行/写入目录,其中包括可能包含一些敏感信息的日志被包含在例外中,但这完全取决于您的记录方式。
【讨论】:
Usman 的非特权用户是指非 root 用户吗?所以在我的情况下,乔纳斯是非特权用户?如果不需要,我是否需要创建另一个只能访问指定文件夹的用户 x,并且应用程序将作为该用户 x 运行?在这种情况下,我还需要以用户 x 身份登录才能查看日志文件?或者我可以以 jonas 身份登录并查看日志文件?如果只有非特权用户 x 可以访问应用程序,也不确定 jenkins 用户将如何部署和管理应用程序。谢谢 所以在这种情况下,用户jonas
是一个非特权用户(非 root),我假设将用于运行应用程序,我建议创建一个名为 jonasapp
的组或者无论您想命名它,将jenkins
和jonas
用户添加到该组,然后分别为组部分分配权限对于jonas
用户,如果应用程序从该用户运行,那么它将能够访问日志,对该组jonasapp
的读取权限该组下的用户也可以读取日志jenkins
用户可以添加到该组,因为显然它们似乎都在同一台主机上运行。以上是关于systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins vs GitLab CI:CI/CD工具之战