node.js - produccion - ¿Cómo ejecutar pm2 para que otros usuarios del servidor puedan acceder al proceso?
pm2 startup windows (5)
Cuando inicio mi aplicación Nodejs con pm2 , otros usuarios del servidor no pueden acceder al proceso.
Incluso si inicio pm2 desde un directorio personalizado (no el usuario actual ~/
, lo que pm2 está usando por defecto):
HOME=/var/www pm2 start app.js
El directorio es accesible para cualquier usuario (en comparación con ~/
, pero todavía no hay forma de que otro usuario del servidor pueda acceder al proceso.
Cuando otro usuario del servidor hace pm2 list
, le muestra 0 procesos en ejecución, pero hay (iniciados por otro usuario). Y cuando otro usuario prueba HOME=/var/www pm2 list
, CLI arroja un error:
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)
Entonces, me pregunto cómo asegurarme de que los usuarios puedan acceder a los procesos pm2 ejecutados por otros usuarios del servidor. ¿O se abordará de manera diferente?
Me pregunto por qué cada usuario del servidor puede hacer git pull
para implementar el último código fuente de un repositorio de Git, pero no puede reiniciar el proceso pm2
después. Solo el usuario que inició el proceso pm2
puede reiniciarlo ... Extraño.
Parece que PM2 guarda datos en la carpeta ''~ / .pm2'' del usuario, por lo que otros usuarios no pueden ver su proceso PM2 con ''estado pm2''.
Creé un nuevo usuario de Linux para PM2, y todos los usuarios usan ''su pm2user'' antes de iniciar el proceso Pm2:
$ sudo su pm2user
$ sudo pm2 start app.js
Es una manera estúpida, pero es simple y funciona bien. Espero que esto ayude :)
Así es como pasamos por alto esto.
Solo crea un grupo
Crea un nuevo grupo
pm2
o el nombre que te funcione$ groupadd pm2
Cambia el propietario del grupo
/var/www/
para agruparpm2
$ chgrp -R pm2 /var/www
Agregue el otro usuario, digamos bob, a pm2
$ usermod -aG pm2 bob
Ahora bob puede ejecutar comandos pm2 cambiando $ HOME a / var / www
$ env HOME=/var/www pm2 list
O (mejor aún) cree un alias como @jcollum sugirió
$ alias pm2=''env HOME=/var/www pm2''
Me he enfrentado a un problema similar. El motivo puede ser que no tiene los permisos necesarios o que no posee los archivos pid y sock creados por pm2. En mi caso, estaba funcionando bien cuando comencé el pm2 desde la línea de comandos en lugar de iniciar. Cuando utilicé el inicio, se ejecutaba como usuario root de forma predeterminada. Así que root era el dueño de los archivos pid, sock
Suponiendo que ejecute pm2 como www-data
. Para tener acceso a esa instancia de pm2, hago: sudo -u www-data HOME=/var/www pm2 list
por ejemplo. Por supuesto, puede crear una secuencia de comandos (p supm2
Ej. supm2
) que lo haga por usted, para que pueda hacer la supm2 list
lugar.
Ok, aquí está mi solución para el mismo problema:
- Crear el directorio principal de PM2:
sudo mkdir /opt/pm2
- Crear usuario pm2 :
sudo useradd -d /opt/pm2 -M -r -s /bin/false pm2
- Agregue todos los usuarios requeridos al grupo pm2 :
sudo usermod -aG <username>
- Establecer el propietario de / opt / pm2 :
sudo chown pm2:pm2 /opt/pm2
- Cambiar permisos:
sudo chmod 770 /opt/pm2
- Establecer variable de entorno (estoy usando / etc / environment ):
PM2_HOME=/opt/pm2
- Instalar pm2:
sudo npm install pm2 -g
. El prefijo Mine npm se establece en / usr / local . - Ejecute
sudo pm2 startup
. Generará un script de inicio para su sistema (en mi caso es Ubuntu Server). - Abra el script de inicio (de nuevo, en mi caso es /etc/init.d/pm2-init.sh ) y edite las siguientes variables
USER=pm2 ... export PM2_HOME="/opt/pm2"
En mi Raspberry PI tuve un problema con la herencia de permisos de archivos de socket, están configurados como de solo lectura para el grupo en lugar de que rwx se aplique al directorio de inicio: srwxr-xr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxr-xr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock
Después de horas buscando en Google finalmente encontré la solución: agregué la siguiente línea al script de inicio: umask 0002
y lo obtuve: srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock
Eso es todo.