我制作了应该作为守护进程执行的java应用程序。我正在使用 Amazon Linux AMI,它使用 SysVinit,并且我的守护程序已经有一个初始化脚本,我只是对放置文件的位置有点困惑。
起初我打算将我的jar
文件放在该/usr/bin
文件夹中,因为我猜这是常规程序所在的位置,但我的程序使用 2 个库,所以事实上我有 1 个jar
文件和lib
其中包含 2 个库的文件。
我担心将jar
文件放置在/usr/bin
,然后将库放置在,/usr/lib
因为jar
和lib
文件夹应该位于同一个文件夹中,此外,我觉得如果将来这些库被另一个程序更新,这可能会使我的系统变得混乱,错误地破坏了一些功能,更不用说随着如此多的不同文件分布在各处,事情开始变得很麻烦。
但由于我喜欢遵守标准,所以我不想为我的程序创建一个随机文件夹并将我需要的所有内容放入其中。
在 Linux 上部署这样的系统有正确的方法吗?部署也需要一些库的 java 守护进程的最佳方法是什么?
答案1
JAR
将文件放在/usr/bin
目录中完全不是一个好主意。造成这种情况的原因有很多,首先最重要的是安全性。或多或少,应用程序应该被隔离。将二进制文件和未知且可能不安全的文件与系统范围的软件并排放置会使攻击面比所需的更广泛。创建单独的目录有很多好处:逻辑分离、安全性等等。强烈推荐最近读过的一本书,持续交付。
我的建议:
- 为这个Java应用程序创建单独的用户和组,并有自己的主目录,我们称之为
app-user
, - 在那里部署所有工件,
- 创建运行此 Java 应用程序的 systemd 单元或 sysv 单元并从主目录
app-user
加载您的库。app-user