2015-08-24 17 views
12

Po uruchomieniu aplikacji Nodejs pod numerem pm2 inni użytkownicy serwera nie mogą uzyskać dostępu do procesu.Jak uruchomić pm2, aby inni użytkownicy serwera mogli uzyskać dostęp do procesu?

Nawet jeśli zacznę PM2 z katalogu niestandardowych (nie bieżącego użytkownika ~/, co PM2 używa domyślnie):

HOME=/var/www pm2 start app.js 

katalog jest dostępny dla każdego użytkownika (w porównaniu do ~/, ale nie nadal nie ma możliwości, aby inny użytkownik serwera mógł uzyskać dostęp do procesu:

Kiedy inny użytkownik serwera robi pm2 list, pokazuje mu 0 procesów uruchomionych - ale są (rozpoczęte przez innego użytkownika) i kiedy inny użytkownik próbuje HOME=/var/www pm2 list, CLI zgłasza błąd:

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) 

Więc zastanawiam się, jak upewnić się, że użytkownicy mogą mieć dostęp do procesów PM2 prowadzonych przez innych użytkowników serwera? Lub inaczej podejść do niego?


Zastanawiam się dlaczego każdy użytkownik serwera jest w stanie dokonać git pull wdrożyć najnowszy kod źródłowy z repozytorium Git, ale nie można ponownie uruchomić proces pm2 potem? Tylko użytkownik, który rozpoczął proces pm2, może go ponownie uruchomić ... Weird.

+0

Jedna instancja pm2 należy tylko do użytkownika, który ją uruchomił. – soyuka

Odpowiedz

0

Mam do czynienia z podobnym problemem. Przyczyną może być brak wymaganych uprawnień lub brak plików pid i skarp utworzonych przez pm2. W moim przypadku działało dobrze, gdy zacząłem pm2 od linii poleceń zamiast uruchamiania. Kiedy używałem startupu, domyślnie działał jako root. Tak więc root był właścicielem pid, skarpet pliki

+0

Shrinath, co masz na myśli mówiąc, że zaczynasz pm2 od startupu? Uruchomienie serwera? Zawsze zaczynam pm2 od CLI, ale nie jako root. Jednak jako użytkownik będący w grupie sudoers. –

+0

Być może istnieje sposób na zmianę uprawnień pid, skarpet plików? Czy inni użytkownicy (sudoers, jeśli to ma znaczenie) mają pozwolenie na zobaczenie rozpoczętych procesów PM2? –

+0

Mam na myśli powiedzieć, że użytkownik, do którego zgłaszany jest komunikat o błędzie podczas uruchamiania, nie ma uprawnień dostępu do plików pid pm2. PM2 jest uruchamiany przez innego użytkownika. –

5

Oto, jak to obejść.

Wystarczy utworzyć grupę

  • Utwórz nową grupę pm2 lub dowolną nazwą działa dla Ciebie

    $ groupadd pm2

  • zmienić grupę właściciel /var/www/ folder grupy pm2

    $ chgrp -R pm2 /var/www

  • Dodaj innego użytkownika, powiedzmy, bob, aby PM2

    $ usermod -aG pm2 bob

Teraz Bob może działać PM2 poleceń zmieniając $ HOME do /var/www

$ env HOME=/var/www pm2 list

Albo (jeszcze lepiej) utwórz alias jako @jcollum recommended

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

+0

To działało dla mnie. Inną rzeczą, którą należy zrobić, to alias PM2, aby "env HOME" było zawarte we wszystkich wywołaniach pm2. – jcollum

4

Wydaje się, że PM2 zapisuje dane w ramach „” ~/.pm2 folderze użytkownika, tak aby inni użytkownicy nie mogą zobaczyć proces PM2 „statusu PM2”.

stworzyłem nowy użytkownik Linuksa dla PM2, a wszyscy użytkownicy używają „su pm2user” przed rozpoczęciem procesu PM2:

$ sudo su pm2user 
$ sudo pm2 start app.js 

To głupi sposób, ale jest prosty i działa dobrze. Mam nadzieję, że to pomoże :)

1

Zakładając, że prowadzisz pm2 jako www-data. Aby mieć dostęp do tej instancji PM2, na przykład: sudo -u www-data HOME=/var/www pm2 list. Można oczywiście utworzyć skrypt (np. supm2), który robi to za ciebie, więc możesz po prostu zrobić supm2 list zamiast tego.

3

Ok, tu jest moje rozwiązanie tego samego problemu:

  1. Tworzenie PM2 katalog domowy: sudo mkdir /opt/pm2
  2. utworzyć użytkownika PM2: sudo useradd -d /opt/pm2 -M -r -s /bin/false pm2
  3. dodać wszystkich użytkowników wymaganych do PM2 grupa: sudo usermod -aG <username>
  4. Ustaw właściciela z /opt/PM2: sudo chown pm2:pm2 /opt/pm2
  5. zmienić uprawnienia: sudo chmod 770 /opt/pm2
  6. Ustaw zmienną środowiskową (używam /etc/environment): PM2_HOME=/opt/pm2
  7. Install PM2: sudo npm install pm2 -g.Mój przedrostek npm jest ustawiony na /usr/local.
  8. Uruchom sudo pm2 startup. Wygeneruje skrypt startowy dla twojego systemu (w moim przypadku jest to Ubuntu Server).
  9. Otwórz skrypt startowy (ponownie, w moim przypadku jest to /etc/init.d/pm2-init.sh) i edytować następujące zmienne USER=pm2 ... export PM2_HOME="/opt/pm2"

W moim Raspberry Pi dostałam problem z gniazdo pozwolenie plik dziedziczenia, są one ustawione tylko do odczytu dla grupy zamiast rwx jest stosowany do domu reż: 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

po godzinach googlowania końcu znalazłem rozwiązanie: I dodaje następujący wiersz do skryptu startowego: umask 0002 i otrzymałem: srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

To wszystko.

+0

Czy przed instalacją należy ustawić zmienną 'PM2_HOME'? Mam już zainstalowany pm2 i chciałbym uniknąć ponownej instalacji ... –

+0

Możesz ustawić go w dowolnym momencie, Mark. Po prostu wskazuje na katalog domowy PM2. –

+0

Tylko problem, który znalazłem, za każdym razem, gdy usługa pm2 zostanie uruchomiona ponownie, będzie przepisywać BARDZO ważne pliki pub.sock i rpc.sock, a stracisz dostęp do 770, który ustawiłeś. Te pliki muszą być chmodded przy każdym ponownym uruchomieniu. – Nicholi

Powiązane problemy