ก่อนหน้านี้ได้ มีการอัพเกรด cyberpanel และ เปิดใช้งาน Firewall CSF
ผู้ใช้ไม่สามารถเข้าใช้งาน Port 3001 และ 3002 ที่รัน Node.js ผ่าน PM2 ได้ เนื่องจากมีปัจจัยหลักสองอย่างที่เกี่ยวข้อง:
- Port บน Firewall ไม่ได้เปิด หรือมีข้อจำกัดในการเชื่อมต่อที่ปิดกั้น
- บริการ Node.js ที่รันด้วย PM2 หยุดทำงาน (down) ซึ่งอาจเกิดจากการรีบูตเซิร์ฟเวอร์ หรือปัญหาอื่น ๆ ในการจัดการแอปพลิเคชัน
1. เปิด Firewall ให้รองรับการเชื่อมต่อผ่าน Port 3001 และ 3002
ในกรณีที่ใช้ CSF (ConfigServer Security and Firewall) เราสามารถเปิดพอร์ตที่ต้องการได้ผ่าน CyberPanel หรือการตั้งค่าโดยตรง
ขั้นตอน:
- เข้าสู่ระบบจัดการผ่าน URL:
โค้ด: เลือกทั้งหมด
https://[ชื่อเซิร์ฟเวอร์]:8090/firewall/csf
- แก้ไขการตั้งค่า TCP IN Ports ให้เพิ่มพอร์ต 3001 และ 3002 เข้าไป เช่น:
โค้ด: เลือกทั้งหมด
20,21,22,25,53,80,110,995,143,443,465,587,993,995,1025,7080,8090,40110:40210,8088,5678,3001,3002
- บันทึกการตั้งค่าและรีสตาร์ท CSF Firewall เพื่อให้การตั้งค่ามีผล:
โค้ด: เลือกทั้งหมด
csf -r
หมายเหตุ: การเปิดพอร์ตนี้จะทำให้สามารถเข้าถึงแอปพลิเคชัน Node.js ผ่านอินเทอร์เน็ตได้ แต่ควรตรวจสอบความปลอดภัยเพิ่มเติมหากแอปต้องเปิดเผยต่อสาธารณะ
2. ตรวจสอบว่าโปรเซส Node.js รันอยู่หรือไม่
หากเปิดพอร์ตแล้ว แต่ยังเข้าใช้งานไม่ได้ อาจเกิดจากโปรเซส Node.js ที่รันผ่าน PM2 ได้หยุดทำงาน
- ตรวจสอบพอร์ตที่ใช้งานผ่าน URL:
โค้ด: เลือกทั้งหมด
https://[ชื่อเซิร์ฟเวอร์]:8090/configservercsf/
ตัวอย่างที่พบ:
หมายความว่า Node.js ถูกกำหนดให้รันที่พอร์ต 3001 และ 3002 ซึ่งอาจต้องเช็คสถานะเพิ่มเติมว่ารันอยู่จริงหรือไม่3001 tcp 4/- - 800533 root node /home/[ชื่อโปรเจกต์]/app.js /usr/bin/node
3002 tcp 4/- - 800526 root node /home/[ชื่อโปรเจกต์]/app.js /usr/bin/node
3. ใช้คำสั่ง PM2 เพื่อตรวจสอบสถานะการรัน
ให้ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่าแอปพลิเคชันที่รันผ่าน PM2 ยังทำงานอยู่หรือไม่:
โค้ด: เลือกทั้งหมด
pm2 status
หากผลลัพธ์แสดงว่าแอปบางตัวอยู่ในสถานะ errored หรือ stopped ให้ลองแก้ไขดังนี้:
4. บันทึกสถานะการรันใหม่
หากระบบ PM2 แสดงข้อความเตือน เช่น:
สามารถแก้ไขได้โดย:[PM2] Saving current process list...
[PM2][WARN] PM2 is not managing any process, skipping save...
[PM2][WARN] To force saving use: pm2 save --force
โค้ด: เลือกทั้งหมด
pm2 save --force
5. คืนค่าการรันโปรเซส PM2 (Resurrect)
ถ้าพบว่า PM2 ไม่มีการจัดการโปรเซสหรือแอปพลิเคชันถูกหยุดทำงานหลังจากการรีบูต ให้ใช้คำสั่งต่อไปนี้:
โค้ด: เลือกทั้งหมด
pm2 resurrect
คำสั่งนี้จะโหลดโปรเซสที่เคยบันทึกไว้กลับมาใช้งานอีกครั้ง
6. ตรวจสอบและรีสตาร์ทโปรเจกต์ด้วย PM2
หากยังมีปัญหา ให้ลองรีสตาร์ทแอปพลิเคชันด้วยคำสั่ง:
โค้ด: เลือกทั้งหมด
pm2 restart all
หรือระบุชื่อโปรเจกต์ที่ต้องการ:
โค้ด: เลือกทั้งหมด
pm2 restart <app-name>
สรุปแนวทางแก้ไขปัญหา
- ตรวจสอบว่าได้เปิดพอร์ต 3001 และ 3002 บน CSF Firewall เรียบร้อยแล้ว
- ตรวจสอบสถานะโปรเซส Node.js ที่รันผ่าน PM2 ด้วยคำสั่ง
โค้ด: เลือกทั้งหมด
pm2 status
- ถ้าพบว่าโปรเซสหยุดทำงาน ให้บันทึกและคืนค่าการรันด้วยคำสั่ง:
โค้ด: เลือกทั้งหมด
pm2 save --force pm2 resurrect
- รีสตาร์ทแอปพลิเคชันเพื่อให้กลับมาทำงานได้ตามปกติ:
โค้ด: เลือกทั้งหมด
pm2 restart all
หลังจากแก้ไขและรีสตาร์ททุกอย่างแล้ว ควรทดสอบการเข้าถึงพอร์ต 3001 และ 3002 ผ่านเบราว์เซอร์หรือคำสั่ง curl เพื่อให้แน่ใจว่าแอปพลิเคชันสามารถใช้งานได้ตามปกติ
ตัวอย่างการทดสอบ:
โค้ด: เลือกทั้งหมด
curl http://localhost:3001
curl http://localhost:3002
ถ้าทุกอย่างเรียบร้อย ระบบ Node.js จะกลับมารองรับการเชื่อมต่อได้ตามปกติครับ
สามารถดูบทความเกี่ยวกับสอนใช้ Cyberpanel และ จัดการ Hosting ได้ที่นี่