ใหม่มากสำหรับสิ่งเซิร์ฟเวอร์ ขออภัยหากนี่อาจเป็นคำถามที่ไม่สุภาพ
ปัญหา
ฉันพยายามเรียกใช้ React และ Node/express บนเซิร์ฟเวอร์ React ใช้งานได้และเมื่อฉันเริ่มแอปโหนดผ่าน เริ่มต้น npm
เซิร์ฟเวอร์ก็ใช้งานได้จริงเช่นกัน ความหมาย: การเปิดเว็บไซต์บน IP w.x.y.z แสดงเว็บไซต์ของฉันและใช้การส่งแบบฟอร์มจะไปถึงโหนดแบ็กเอนด์ เมื่อฉันพยายามใช้ PM2 เพื่อรันแอพโหนดของฉัน มันไม่ทำงาน PM2 จะเริ่มแอปพลิเคชันของฉัน แต่ฉันไม่สามารถเข้าถึงได้ ไม่ว่าจะผ่านทางเว็บไซต์หรือทาง curl localhost/api/...
.
ตัวอย่างการทำงานกับ npm start
ผลลัพธ์ของการเริ่มแอปโหนดของฉันด้วยการเริ่ม npm:
เซิร์ฟเวอร์ Express กำลังฟังพอร์ต 3001
จากนั้นใช้ curl ฉันได้รับข้อความที่คาดหวังจากแบ็กเอนด์:
ขด localhost/api/users
-> {ข้อความ: "blabla"}
ตัวอย่างที่ล้มเหลวด้วยการเริ่มต้นและสถานะของ PM2
กับ เริ่มต้น npm
ตอนนี้ ไม่ ฉันเริ่มแอปพลิเคชันด้วยคำสั่งต่อไปนี้:
sudo pm2 start app.js -- เริ่มต้น
ซึ่งแสดงให้ฉันเห็นว่าออนไลน์อยู่:
ââââââ¬âââââââââââ ââââââââââ¬âââââââ ว âââââââ¬ââââââââââ â¬âââââââââââ
â id â ชื่อ â โหมด â ⺠â สถานะ â ซีพียู â หน่วยความจำ â
ââââââ¼âââââââââââ ââââââââââ¼âââââââ ââââ¼âââââââ¼âââââââ ว ââââââââââ¤
â 0 â แอป â fork â 0 â ออนไลน์ â 0% â 10.5mb â
ââââââ´âââââââââââ ââââââââââ´âââââââ ว âââââââ´ââââââââââ â´âââââââââââ
แต่ตอนนี้ใช้ curl ฉันได้รับข้อผิดพลาดเซิร์ฟเวอร์ 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>
เซิร์ฟเวอร์ที่ localhost พอร์ต 80
ทำให้ฉันสงสัยแล้วว่าสิ่งนี้บ่งบอกถึงปัญหาหรือไม่ แต่มาเถอะ
โครงสร้างไฟล์
ไฟล์โต้ตอบแบบคงที่ -> /var/www/html/client/build/
สิ่งที่โหนด -> /var/www/html/เซิร์ฟเวอร์/
การกำหนดค่า Apache
การกำหนดค่าถูกเปลี่ยนให้ชี้ไปที่โฟลเดอร์ build ของแอป react และยังทำให้เราเตอร์ react ทำงานได้อย่างถูกต้องอีกด้วย
<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>
เอาต์พุต Netstat
tcp 0 0 127.0.0.1:27017 0.0.0.0:* ฟัง
tcp 0 0 127.0.0.53:53 0.0.0.0:* ฟัง
tcp 0 0 0.0.0.0:22 0.0.0.0:* ฟัง
tcp6 0 0 :::80 :::* ฟัง
tcp6 0 0 :::22 :::* ฟัง
เอาต์พุตสถานะ UFW
ถึงการดำเนินการจาก
-- ------ ----
22 อนุญาตได้ทุกที่
80 อนุญาตได้ทุกที่
443 อนุญาตได้ทุกที่
Nginx HTTP อนุญาตทุกที่
8080 อนุญาตได้ทุกที่
3001 อนุญาตได้ทุกที่
22 (v6) อนุญาตทุกที่ (v6)
80 (v6) อนุญาตทุกที่ (v6)
443 (v6) อนุญาตได้ทุกที่ (v6)
Nginx HTTP (v6) อนุญาตทุกที่ (v6)
8080 (v6) อนุญาตได้ทุกที่ (v6)
3001 (v6) อนุญาตทุกที่ (v6)
สิ่งที่ฉันได้ลองไปแล้ว
ฉันดูตัวอย่างการตั้งค่าหลายอย่างสำหรับ PM2 ซึ่งมักจะเป็นเพียงการเริ่มต้นขั้นพื้นฐานของแอป และไม่ได้ลงลึกเกินไปหรือไม่มีการผสมผสานกับ React
ฉันยังพยายามเปลี่ยนการตั้งค่า apache ProxyPass โดยเพิ่มพอร์ต 3001 ให้กับพอร์ตที่อนุญาตใน UFW (สิ่งนี้สมเหตุสมผลหรือไม่เมื่อใช้พร็อกซีพาส)
ไม่แน่ใจว่ามีแนวคิดที่ฉันไม่เข้าใจ ณ จุดนี้หรือถ้าฉันยังขาดอะไรไป หรืออาจมีการกำหนดค่าที่ไม่ถูกต้อง ณ จุดนี้
ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก!