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!