Score:0

แอป NodeJs ทำงานเมื่อเริ่มต้นโดยใช้ npm start แต่ไม่ใช่กับ PM2

ธง in

ใหม่มากสำหรับสิ่งเซิร์ฟเวอร์ ขออภัยหากนี่อาจเป็นคำถามที่ไม่สุภาพ

ปัญหา

ฉันพยายามเรียกใช้ 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 (สิ่งนี้สมเหตุสมผลหรือไม่เมื่อใช้พร็อกซีพาส)

ไม่แน่ใจว่ามีแนวคิดที่ฉันไม่เข้าใจ ณ จุดนี้หรือถ้าฉันยังขาดอะไรไป หรืออาจมีการกำหนดค่าที่ไม่ถูกต้อง ณ จุดนี้

ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก!

jp flag
`netstat` แสดงว่าไม่มีกระบวนการที่รับฟังพอร์ต `3001` แอปพลิเคชันของคุณไม่ทำงานหรือไม่ได้รับฟังพอร์ต `3001`
Tommy avatar
in flag
ตกลงนี่อาจเป็นปัญหาฉันลองใช้แฟล็กพอร์ตแบบนี้แล้ว `sudo pm2 start app.js -- start --port 3001` ซึ่งไม่เปลี่ยนแปลงอะไรเลย นี่อาจเป็นปัญหาในแอปโหนดของฉันหรือไม่
jp flag
คุณต้องแน่ใจว่าแอปพลิเคชันของคุณ 1) กำลังทำงาน 2) กำลังฟังอยู่บนพอร์ต 3001 คุณสามารถตรวจสอบได้ด้วย `netstat`
Tommy avatar
in flag
ความคิดเห็นของคุณนำฉันไปสู่วิธีแก้ปัญหา (โง่ๆ) มันเป็นความผิดพลาดง่ายๆ ที่เปิดแอปด้วย PM2 คุณอาจต้องการเพิ่มเป็นคำตอบเพื่อให้ฉันยอมรับมันเป็นวิธีแก้ปัญหา :) จากนั้นฉันจะแสดงความคิดเห็นเกี่ยวกับปัญหาที่ฉันพบ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา