Я развертываю приложение node.js с PM2 за обратным прокси-сервером nginx. Я хочу запустить приложение под управлением PM2, используя локальный сокет, но есть пара препятствий.
Во-первых, приложению нужно указать, куда записать сокет, чтобы nginx мог указывать на него. С ванильным узлом это делается с помощью переменной среды PORT, однако, учитывая, что PM2 может запускать несколько экземпляров в режиме кластера, это не может быть статическим значением, и само приложение не может знать, что его установить (потому что это не приложение, которое решает). Поэтому мне нужно знать, как заставить PM2 динамически сообщать приложению местоположение. Насколько я понимаю, PM2 должен справиться с этим, поскольку в документации упоминается, что clstering работает с сокетами - больше ничего не сказано.
Во-вторых, самому приложению необходимо записать сокет, поэтому он должен находиться в месте, доступном для записи приложению. Обычно сокеты помещаются в подкаталоги /var/run
, но это обычно не доступно для записи непривилегированному приложению, а поскольку оно обычно находится в энергозависимом хранилище, каталоги для каждого приложения исчезают после перезагрузки и требуют повторного создания с соответствующими правами собственности. Это, очевидно, требует привилегированного доступа к /var/run
, поэтому приложение не может этого сделать. PM2 может работать с соответствующими привилегиями, поэтому казалось бы правильным для PM2 это сделать, однако я не вижу никакого механизма для этого. В выскочке это будет сделано в предварительном скрипте.
Как я могу решить эти две проблемы?