![pm2、套接字和权限](https://linux22.com/image/670410/pm2%E3%80%81%E5%A5%97%E6%8E%A5%E5%AD%97%E5%92%8C%E6%9D%83%E9%99%90.png)
我正在部署一个 node.js 应用程序PM2在 nginx 反向代理后面。我想使用本地套接字运行 PM2 管理的应用程序,但有几个障碍。
首先,需要告知应用程序将其套接字写入何处,以便 nginx 可以指向它。对于 vanilla node,这是通过 PORT 环境变量完成的,但是鉴于 PM2 可以在集群模式下运行多个实例,因此这不能是静态值,并且应用程序本身无法知道将其设置为多少(因为不是应用程序决定的)。所以我需要知道如何让 PM2 动态地告诉应用程序位置。据我所知,PM2 应该能够处理这个问题,因为它在文档中提到 clstering 适用于套接字 - 只是没有说更多。
其次,应用程序本身需要写入套接字,因此它需要位于应用程序可写入的位置。通常,套接字放在的子目录中/var/run
,但对于非特权应用程序来说,这通常是不可写入的,而且由于它通常位于易失性存储中,因此每个应用程序的目录在重新启动后会消失,需要以适当的所有权重新创建。这显然需要对的特权访问/var/run
,因此应用程序无法执行此操作。PM2 可以使用适当的权限运行,因此 PM2 执行此操作似乎是正确的,但是,我看不到它执行此操作的任何机制。在 upstart 中,这将在启动前脚本中完成。
我该如何解决这两个问题?