Как запустить pm2, чтобы другие пользователи сервера могли получить доступ к этому процессу?

Когда я запускаю приложение Nodejs с pm2, другие пользователи сервера не могут получить доступ к этому процессу.

Даже если я запустил pm2 из пользовательского каталога (не текущего пользователя ~/, то, что pm2 использует по умолчанию):

HOME=/var/www pm2 start app.js

Доступ к каталогу доступен любому пользователю (по сравнению с ~/, но до сих пор нет другого доступа к этому процессу другому пользователю сервера.

Когда другой пользователь сервера pm2 list, он показывает, что он работает 0, но есть (запущен другим пользователем). И когда другие пользователи пробуют HOME=/var/www pm2 list, CLI выдает ошибку:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: connect EACCES
    at errnoException (net.js:905:11)
    at Object.afterConnect [as oncomplete] (net.js:896:19)

Итак, мне интересно, как обеспечить доступ пользователей к процессам pm2, выполняемым другими пользователями сервера? Или к нему обращаются по-другому?


Мне интересно, почему каждый пользователь сервера может сделать git pull для развертывания последнего исходного кода из репозитория Git, но не может перезапустить процесс pm2 после этого? Только пользователь, который запустил процесс pm2, может перезапустить его... Странно.

Ответ 1

Здесь мы обходим это.

Просто создайте группу

  • Создайте новую группу pm2 или другое имя для вас

    $ groupadd pm2

  • Измените владельца группы папок /var/www/ на группу pm2

    $ chgrp -R pm2 /var/www

  • Добавьте другого пользователя, скажем bob, в pm2

    $ usermod -aG pm2 bob

Теперь bob может запускать команды pm2, меняя $HOME на /var/www

$ env HOME=/var/www pm2 list

Или (еще лучше) создайте псевдоним, в котором предлагается @jcollum

$ alias pm2='env HOME=/var/www pm2'

Ответ 2

Кажется, что PM2 сохраняет данные в папке пользователя ~ ~.pm2, так что другие пользователи не могут видеть ваш PM2-процесс со статусом "pm2".

Я создал нового пользователя linux для PM2, и все пользователи используют "su pm2user" перед запуском процесса Pm2:

$ sudo su pm2user
$ sudo pm2 start app.js

Это глупо, но это просто и хорошо работает. Надеюсь, это поможет:)

Ответ 3

Хорошо, вот мое решение для той же проблемы:

# 1. Create user PM2 and set his password
sudo useradd -d /opt/pm2 -m -s /bin/bash pm2
sudo passwd pm2

# 2. Add users you want to provide the access to PM2 to PM2 group
sudo usermod -aG pm2 <username>

# Note: if you added yourself to pm2 group, perform logout and login back to the host machine   

# 3. Set the PM2_HOME variable
sudo touch /etc/profile.d/pm2.sh
sudo sh -c 'echo "export PM2_HOME=\"/opt/pm2/.pm2\"" > /etc/profile.d/pm2.sh'
source /etc/profile.d/pm2.sh

# 4. Install the PM2 
# Check the npm prefix if fail: 
# https://docs.npmjs.com/misc/config#prefix
sudo npm install pm2 -g

# 5. Make startup script
sudo pm2 startup ubuntu -u pm2 --hp /opt/pm2

sudo systemctl enable pm2-pm2 && \
sudo systemctl start pm2-pm2 && \
sudo systemctl status pm2-pm2

# 6. Change permission of PM2_HOME
sudo chmod -v g+w /opt/pm2/.pm2

# 7. Check the PM2
pm2 status

Ответ 4

Предполагая, что вы запустите pm2 как www-data. Чтобы получить доступ к этому экземпляру pm2, я делаю: sudo -u www-data HOME=/var/www pm2 list например. Разумеется, вы можете создать script (например, supm2), который сделает это для вас, чтобы вы могли просто сделать supm2 list.

Ответ 5

Я столкнулся с подобной проблемой. Причина может заключаться в том, что у вас нет необходимых разрешений, или у вас нет файлов pid и sock, созданных pm2. В моем случае это работало нормально, когда я начал pm2 из командной строки вместо запуска. Когда я использовал запуск, он запускался как пользователь root по умолчанию. Итак, root был владельцем файлов pid, sock

Ответ 6

Я знаю, что опаздываю на вечеринку, но вот как я это сделал:

PM2="/usr/share/nodejs/pm2"
USER="me"
useradd $USER
groupadd pm2
chgrp -R pm2 $PM2
usermod -aG pm2 $USER
setfacl -Rdm g:pm2:rwx $PM2

/etc/bash.bashrc и т.д.

export PM2_HOME=$PM2;