ความเป็นจริงของ Node.js บน Shared Hosting
คำถามยอดนิยมที่ Developer มักถามคือ "รัน Node.js บน Shared Hosting ได้ไหม?" คำตอบคือ ได้บางส่วน แต่มีข้อจำกัดมาก
Shared Hosting ที่ใช้ cPanel เวอร์ชันใหม่ (cPanel 82+) บางเจ้ารองรับ Node.js ผ่านฟีเจอร์ "Setup Node.js App" แต่การทำงานแตกต่างจาก VPS มาก เพราะ Node.js App จะรันผ่าน Phusion Passenger แทนที่จะรันเป็น Process อิสระ
Hosting เจ้าไหนที่มักรองรับ Node.js:
- SiteGround, Namecheap, A2 Hosting (ต่างประเทศ)
- Hosting ไทยบางเจ้าที่ใช้ cPanel 94+ ลองเช็คกับ Support ก่อน
Hosting ที่ไม่รองรับ Node.js:
- Hosting ราคาถูกที่ใช้ cPanel เวอร์ชันเก่า
- Hosting ที่ใช้ DirectAdmin หรือ Plesk บางเวอร์ชัน
ตรวจสอบว่า Hosting รองรับ Node.js
วิธีที่ง่ายที่สุดคือ Login cPanel แล้วหาหัวข้อ "Software" หรือ "Setup Node.js App" ถ้าไม่เห็นตัวเลือกนี้ แสดงว่า Hosting ของคุณยังไม่รองรับ
หรือลองผ่าน SSH (ถ้ามี Access):
# ตรวจสอบว่ามี Node.js ติดตั้งอยู่หรือไม่
node --version
npm --version
# ดู Node.js Version ที่ใช้ได้
ls /opt/alt/node*/bin/node 2>/dev/null
สร้าง Node.js App ใน cPanel
ถ้า Hosting รองรับ ทำตามขั้นตอนนี้:
ขั้นที่ 1: เข้า Setup Node.js App
- Login cPanel → Software → Setup Node.js App
- กด Create Application
ขั้นที่ 2: ตั้งค่า Application
- Node.js Version — เลือก Version ที่ต้องการ (แนะนำ LTS)
- Application Mode — Production หรือ Development
- Application Root — โฟลเดอร์ที่เก็บ Code เช่น
myapp - Application URL — Domain หรือ Subdomain ที่จะให้เข้าถึง App
- Application Startup File — เช่น
app.jsหรือserver.js
ขั้นที่ 3: สร้าง server.js และ package.json
// server.js - ตัวอย่าง Express App พื้นฐาน
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Hello from Node.js on cPanel!');
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
// package.json
{
"name": "myapp",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.18.0"
}
}
ขั้นที่ 4: Install Dependencies
ใน cPanel → Setup Node.js App → กด Run NPM Install เพื่อติดตั้ง Package จาก package.json หรือใช้ SSH:
cd ~/myapp
npm install
ข้อจำกัดของ Node.js บน Shared Hosting
สิ่งที่คุณทำ ไม่ได้ บน Shared Hosting:
- ไม่มี PM2 — ถ้า App Crash จะไม่ Restart อัตโนมัติ (Phusion Passenger จัดการแทน)
- ไม่มี Root Access — ติดตั้ง Global Package ไม่ได้
- ไม่มี Custom Port — ต้องใช้ผ่าน Web Proxy เท่านั้น
- Resource จำกัด — CPU/RAM แย่งกับ User อื่น
- Long-Running Process จำกัด — App ที่ใช้ CPU สูงอาจถูก Kill
ตรวจสอบ Node.js App ทำงานถูกต้อง
# ทดสอบ Endpoint ที่ตั้งค่าไว้
curl -I https://yourdomain.com/yourapp/
# ดู App Status ใน cPanel (ผ่าน SSH)
passenger-status
# ตรวจสอบ Log ของ App
tail -f ~/logs/passenger.yourapp.log
# ทดสอบ API Response
curl https://yourdomain.com/api/test
แก้ปัญหาที่พบบ่อย
Error: "Application startup failed" หลัง Deploy
ตรวจสอบ Log ที่ ~/logs/passenger.app.log ปัญหาส่วนใหญ่คือ Missing Module (ลืมรัน npm install), Syntax Error ในไฟล์ หรือ Environment Variable ที่ขาดหาย
Error: 503 Service Unavailable หลัง Restart App
Phusion Passenger ต้องใช้เวลา Warm Up หลัง Restart ลองรอ 30 วินาทีแล้วโหลดใหม่ ถ้ายังไม่ได้ ให้ดู Error Log และ Restart Application อีกครั้งจาก cPanel
App ทำงานได้แต่ช้ามากหรือ Response Time สูง
เกิดจาก Resource Limit ของ Shared Hosting เมื่อมี Traffic เข้ามามาก App อาจรอ CPU/RAM ที่แย่งกับ User อื่น นี่คือสัญญาณว่าถึงเวลาย้ายไป VPS แล้ว
เมื่อไหร่ควรใช้ VPS แทน
ควรพิจารณา VPS เมื่อ:
- App ต้องการ PM2 สำหรับ Auto-Restart และ Cluster Mode
- มี WebSocket หรือ Real-time Features
- ต้องการ Custom Node.js Version
- มี Traffic มากกว่า 500 Request/นาที
- ต้องการติดตั้ง System Package เพิ่มเติม
คำถามที่พบบ่อย
Q: Next.js หรือ Nuxt.js รันบน Shared Hosting ได้ไหม?
A: Mode ที่ทำได้คือ Static Export (next export / nuxt generate) ซึ่งสร้าง Static Files แล้วนำไป Host เหมือน Static Website ทั่วไป แต่ SSR (Server-Side Rendering) แบบ Full จะมีข้อจำกัดมากเหมือน Node.js ทั่วไป
Q: Docker บน Shared Hosting ได้ไหม?
A: ไม่ได้ Docker ต้องการ Root Access และ Kernel Feature ที่ Shared Hosting ไม่อนุญาต ต้องใช้ VPS หรือ Cloud Server เท่านั้น
Q: Node.js กับ PHP ใช้ร่วมกันบน Hosting เดียวได้ไหม?
A: ได้ cPanel รองรับทั้งสองบน Hosting เดียวกัน คุณสามารถมีทั้ง WordPress (PHP) และ Node.js App บน Subdomain เดียวกันได้ เพียงตั้งค่า Node.js App บน Subdomain แยก