2015-08-24 12 views
12

Quando avvio la mia app Nodejs con pm2, altri utenti del server non sono in grado di accedere al processo.Come eseguire pm2 in modo che altri utenti del server possano accedere al processo?

Anche se inizio PM2 da una directory personalizzata (non attuali di ~/ dell'utente, cosa PM2 sta utilizzando per impostazione predefinita):

HOME=/var/www pm2 start app.js 

Directory è accessibile da qualsiasi utente (confronto ad ~/, ma c'è ancora nessun altro utente del server è in grado di accedere al processo

Quando l'altro utente del server fa pm2 list, gli mostra che 0 processi sono in esecuzione, ma ce ne sono (avviati da un altro utente) e quando un altro utente prova HOME=/var/www pm2 list, CLI genera un errore:

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) 

Quindi mi chiedo come per assicurarsi che gli utenti sono in grado di accedere a processi PM2 gestiti da altri utenti del server? O sarà avvicinato in modo diverso?


Mi chiedo il motivo per cui ogni utente del server è in grado di fare git pull di distribuire codice sorgente più recente da un repository Git, ma non può riavviare pm2 processo dopo? Solo l'utente che ha avviato il processo pm2 è in grado di riavviarlo ... Strano.

+0

Un'istanza pm2 appartiene solo all'utente che l'ha avviata. – soyuka

risposta

0

Ho affrontato un problema simile. La ragione potrebbe essere che non hai i permessi richiesti, o non possiedi i file pid e sock creati da pm2. Nel mio caso, stava funzionando bene quando ho iniziato il pm2 da linea di comando anziché da avvio. Quando ho usato l'avvio, era in esecuzione come utente root per impostazione predefinita. Quindi root era il proprietario dei file pid, calzino

+0

Shrinath, cosa intendi con l'avvio di pm2 da una startup? Avvio del server? Inizio sempre pm2 da una CLI, ma non come utente root. Tuttavia, poiché un utente si trova nel gruppo sudoers. –

+0

Forse, c'è un modo per cambiare i permessi dei file pid, calzino allora? Quindi altri utenti (sudoers, se è importante) hanno il permesso di vedere i processi pm2 avviati? –

+0

Intendo dire che l'utente a cui viene lanciato il messaggio di errore durante l'esecuzione non dispone dell'autorizzazione per accedere ai file p2 di pm2. Il pm2 è stato avviato dall'utente diverso –

5

Ecco come abbiamo bypassato questo.

creare solo un gruppo

  • creare un nuovo gruppo pm2 o qualsiasi altro nome funziona per voi

    $ groupadd pm2

  • Cambiare il proprietario del gruppo della cartella /var/www/ al gruppo pm2

    $ chgrp -R pm2 /var/www

  • aggiungere gli altri utenti, diciamo bob, a PM2

    $ usermod -aG pm2 bob

Ora Bob può eseguire comandi PM2 modificando $ HOME per /var/www

$ env HOME=/var/www pm2 list

Oppure (meglio ancora) creare un alias come @jcollum suggerito

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

+0

Questo ha funzionato per me. L'altra cosa da fare è alias PM2 in modo che 'env HOME' sia stato incluso in tutte le chiamate pm2. – jcollum

4

Sembra che PM2 salva i dati nella cartella dell'utente '~/.pm2', in modo che altri utenti non possono vedere il processo di PM2 con 'stato PM2'.

ho creato un nuovo utente Linux per il PM2, e tutti gli utenti utilizzano 'su pm2user' prima di iniziare il processo di Pm2:

$ sudo su pm2user 
$ sudo pm2 start app.js 

E 'un modo stupido, ma è semplice e funziona bene. Spero che questo possa aiutare :)

1

Supponendo di eseguire pm2 come www-data. Per accedere a quell'istanza di pm2, ad esempio: sudo -u www-data HOME=/var/www pm2 list. Puoi, ovviamente, creare un copione (ad esempio supm2) che lo fa per te, quindi puoi semplicemente fare supm2 list.

3

Ok, ecco la mia soluzione per lo stesso problema:

  1. Creare PM2 home directory: sudo mkdir /opt/pm2
  2. Crea utente PM2: sudo useradd -d /opt/pm2 -M -r -s /bin/false pm2
  3. aggiungere tutti gli utenti necessari per la PM2 gruppo: sudo usermod -aG <username>
  4. Set proprietario di /opt/PM2: sudo chown pm2:pm2 /opt/pm2
  5. Cambiare i permessi: sudo chmod 770 /opt/pm2
  6. Set variabile d'ambiente (sto usando /etc/environment): PM2_HOME=/opt/pm2
  7. Installare PM2: sudo npm install pm2 -g.Il mio prefisso npm è impostato su /usr/local.
  8. Corsa sudo pm2 startup. Genererà script di avvio per il tuo sistema (nel mio caso è Ubuntu Server).
  9. script di avvio Open (ancora una volta, nel mio caso è /etc/init.d/pm2-init.sh) e modificare le seguenti variabili USER=pm2 ... export PM2_HOME="/opt/pm2"

Nel mio PI Raspberry ho avuto problema con il presa permessi dei file eredità, che sta insieme in sola lettura per il gruppo, invece di rwx è applicato a directory home: 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

Dopo ore di googling ho finalmente trovato la soluzione: ho aggiunto la seguente riga allo script di avvio: umask 0002 e ottenuto: srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

Questo è tutto.

+0

La variabile 'PM2_HOME' deve essere impostata prima dell'installazione? Ho già installato PM2 e vorrei evitare di reinstallarlo ... –

+0

Puoi impostarlo in qualsiasi momento, Mark. Punta semplicemente alla directory home di PM2. –

+0

Unico problema che ho trovato, ogni volta che si riavvia il servizio PM2, riscrive i file pub.sock e rpc.sock MOLTO importanti e perderai l'accesso 770 impostato. Questi file devono essere risolti ogni riavvio. – Nicholi