Puncte:0

Aplicația NodeJs funcționează când a început să folosească npm start, dar nu și cu PM2

drapel in

Foarte nou în chestiile de server, îmi pare rău dacă aceasta poate fi o întrebare noob.

Problemă

Încerc să rulez React și Node/express pe un server. React funcționează și când pornesc aplicația mea nod prin npm start De fapt, serverul funcționează și el, adică: deschiderea site-ului web pe IP w.x.y.z arată site-ul meu și utilizarea unui formular de trimitere va ajunge la backend-ul nodului. Când încerc să folosesc PM2 pentru a rula aplicația mea nod, nu funcționează. PM2 îmi va porni aplicația, dar nu pot ajunge la ea, nici prin site, nici prin curl localhost/api/....


Exemplu de lucru cu npm start

Ieșirea pornirii aplicației mele nod cu npm start:
Serverul Express ascultă pe portul 3001
Apoi, folosind curl, primesc un mesaj așteptat de la backend:
curl localhost/api/users -> {mesaj: „blabla”}


Exemplu de eșec cu pornirea și starea PM2

Cu npm start în prezent nu rulând, pornesc aplicația cu următoarea comandă:
sudo pm2 start app.js -- start care apoi îmi arată că este online:

ââââââ¬âââââââ†ââââââââââ¬âââââââ¬âââââââ ½ âââââââ¬âââââââââââââââââ â¬âââââââââââ
â id â nume â mod â ⺠â stare â CPU â memorie â
ââââââ¼âââââââââ†ââââââââââ¼âââââ†ââââ¼âââââââ¼âââ↽ ââââââââââ¤
â 0 â aplicație â furk â 0 â online â 0% â 10,5mb â
ââââââ´âââââââââ†ââââââââââ´ââââ↽ âââââââ´âââââââââââââââââ â´âââââââââââ

Dar acum folosind curl primesc o eroare de server 503:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>503 Service Unavailable</title>
</head><body>
<h1>Service Unavailable</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
<hr>
<address>Apache/2.4.48 (Ubuntu) Server at localhost Port 80</address>
</body></html>

Server la portul localhost 80 deja m-a făcut să mă întreb dacă asta indică o problemă, dar hai să trecem mai departe.


Structura fișierului

Fișiere de reacție statice -> /var/www/html/client/build/
Chestii nod -> /var/www/html/server/


Configurare Apache

Configurația a fost schimbată pentru a indica folderul de compilare al aplicației react, permițând, de asemenea, routerului react să funcționeze corect.

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/client/build/

        # following is used for React Router to work properly
        <Directory "/var/www/html/client/build/">
                RewriteEngine on
                RewriteCond %{REQUEST_FILENAME} -f [OR]
                RewriteCond %{REQUEST_FILENAME} -d
                RewriteRule ^ - [L]
                RewriteRule ^ index.html [L]
        </Directory>

        # following is what I thought is the right way to add the possibility to talk to the nodejs backend
        # ServerName localhost
        ProxyPreserveHost on

        ProxyPass /api http://localhost:3001/api
        ProxyPassReverse /api http://localhost:3001/api
...
</VirtualHost>

Ieșire Netstat

tcp 0 0 127.0.0.1:27017 0.0.0.0:* ASCULTĂ
tcp 0 0 127.0.0.53:53 0.0.0.0:* ASCULTĂ
tcp 0 0 0.0.0.0:22 0.0.0.0:* ASCULTĂ
tcp6 0 0 :::80 :::* ASCULTĂ
tcp6 0 0 :::22 :::* ASCULTĂ

Ieșire de stare UFW

La Acțiune De la
-- ------ ----
22 PERMITERE oriunde
80 PERMITĂ oriunde
443 PERMITĂ Oriunde
Nginx HTTP ALLOW oriunde
8080 PERMITERE oriunde
3001 PERMITĂ oriunde
22 (v6) PERMITERE oriunde (v6)
80 (v6) PERMITERE oriunde (v6)
443 (v6) PERMITERE oriunde (v6)
Nginx HTTP (v6) PERMITERE oriunde (v6)
8080 (v6) PERMITERE oriunde (v6)
3001 (v6) PERMITERE oriunde (v6)

Ce am incercat pana acum

M-am uitat la mai multe exemple de configurare pentru PM2, care sunt adesea doar începutul de bază al unei aplicații și nu merg prea profund sau nu au combinația cu React.

De asemenea, am încercat să schimb setarea Apache ProxyPass, adăugând portul 3001 la porturile permise în UFW (are acest lucru vreun sens când folosești proxypass?).

Nu sunt sigur dacă există un concept pe care nu l-am înțeles în acest moment sau dacă încă îmi lipsește ceva. Sau poate aveți o configurație greșită în acest moment.

Orice ajutor este foarte apreciat!

drapel jp
`netstat` arată că nu există procese care ascultă pe portul `3001`. Fie aplicația dvs. nu rulează, fie nu ascultă pe portul `3001`.
Tommy avatar
drapel in
Ok, atunci aceasta ar putea fi problema.Am încercat deja să folosesc steag-ul port în felul acesta `sudo pm2 start app.js -- start --port 3001` care nu schimbă nimic. Ar putea fi aceasta o problemă în aplicația mea nod?
drapel jp
Trebuie să vă asigurați că aplicația dvs. 1) rulează 2) ascultă pe portul 3001. Puteți verifica acest lucru cu `netstat`.
Tommy avatar
drapel in
Comentariile tale m-au condus la soluția (proastă), a fost o simplă greșeală lansarea aplicației cu PM2. Poate doriți să îl adăugați ca răspuns, astfel încât să îl pot accepta ca soluție :), apoi voi comenta exact problema pe care am găsit-o.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.