cPanel
cPanel Setup Node.js App คืออะไร และต่างจาก VPS อย่างไร
หลายคนอาจเคยได้ยินว่า Node.js ต้องรันบน VPS หรือ Server ที่มีสิทธิ์ Root เท่านั้น แต่ความจริงแล้ว cPanel รุ่นใหม่ๆ มีฟีเจอร์ชื่อ Setup Node.js App ที่ช่วยให้คุณสร้างและรัน Node.js Application บน Shared Hosting ได้โดยไม่ต้องยุ่งกับ Command Line เลย
cPanel ใช้ Phusion Passenger เป็น Application Server ในการรัน Node.js แทนที่จะเป็น PM2 หรือ Forever ที่นิยมใช้บน VPS ข้อดีคือ Passenger จะจัดการ Process ให้อัตโนมัติ ถ้า App Crash จะ Restart เอง และยังรองรับการกำหนด Node Version ได้หลายเวอร์ชันผ่าน GUI
ความแตกต่างสำคัญระหว่าง Node.js บน Shared Hosting และ VPS มีดังนี้:
- Shared Hosting (cPanel): ง่าย ไม่ต้อง SSH, ใช้ Passenger เป็น Process Manager, มี Resource จำกัดตาม Plan
- VPS / Cloud Server: ยืดหยุ่นกว่า, ใช้ PM2 ได้, รองรับ WebSocket เต็มรูปแบบ, ต้องจัดการ Server เอง
- การ Deploy: Shared Hosting ทำผ่าน cPanel GUI ส่วน VPS ต้องใช้ SSH และ CLI
- PORT: บน Shared Hosting cPanel จะกำหนด PORT ผ่าน Environment Variable ไม่สามารถกำหนดตายตัวได้
เหมาะสำหรับ: เว็บแอปขนาดเล็กถึงกลาง, REST API, หรือ Backend ที่ไม่ต้องการ WebSocket หากโปรเจกต์ของคุณต้องการ Realtime สูงหรือ Traffic มาก แนะนำให้ใช้ VPS แทน
เข้า Software → Setup Node.js App
เริ่มต้นด้วยการล็อกอิน cPanel ของคุณก่อน โดยปกติจะเข้าที่ yourdomain.com/cpanel หรือ yourdomain.com:2083 แล้วกรอก Username และ Password ที่ได้รับจาก Hosting Provider
เมื่อเข้า cPanel แล้ว ให้ไปที่หมวด Software จากนั้นคลิกที่ไอคอน Setup Node.js App ถ้าหา Setup Node.js App ไม่เจอในหมวด Software ลองค้นหาด้วยช่อง Search ที่ด้านบนของ cPanel โดยพิมพ์ "Node.js"
- เข้า cPanel Dashboard → หมวด Software
- คลิก Setup Node.js App
- หน้าที่เปิดขึ้นมาจะแสดงรายการ Node.js Applications ทั้งหมดที่มีอยู่
- ถ้าเพิ่งสร้างครั้งแรกจะไม่มี Application ใดๆ ให้คลิก + Create Application
ตรวจสอบให้แน่ใจว่า Hosting Plan ของคุณรองรับ Node.js ด้วย เพราะ Hosting บางเจ้าหรือ Plan ราคาถูกอาจไม่มีฟีเจอร์นี้ สอบถาม Support ของ Hosting Provider ได้เลยถ้าไม่แน่ใจ
สร้าง Node.js Application ใหม่
หลังจากคลิก Create Application แล้ว จะมีฟอร์มให้กรอกข้อมูลสำคัญ ได้แก่ Node.js Version, Application Mode, Application Root, Application URL และ Application Entry Point ซึ่งแต่ละอย่างมีความสำคัญมาก
วิธีกรอกข้อมูลในแต่ละฟิลด์:
- Node.js Version: เลือก Version ที่ตรงกับโปรเจกต์ของคุณ เช่น 18.x หรือ 20.x แนะนำให้ใช้ LTS Version เพื่อความเสถียร
- Application Mode: เลือก Production สำหรับเว็บจริง หรือ Development สำหรับทดสอบ (Development จะแสดง Error Details มากกว่า)
- Application Root: โฟลเดอร์ที่เก็บไฟล์โปรเจกต์ เช่น
nodeapp(จะถูกสร้างใน public_html หรือ home directory) - Application URL: URL ที่ต้องการให้ App รัน เช่น
yourdomain.comหรือapi.yourdomain.com - Application Entry Point: ไฟล์หลักที่ Node.js จะ Execute เช่น
server.jsหรือapp.js
หลังจากกรอกครบแล้วคลิก Create cPanel จะสร้างโฟลเดอร์และ Virtual Environment ให้อัตโนมัติ รอสักครู่แล้วหน้าจะแสดง Command สำหรับ Activate Virtual Environment ซึ่งใช้สำหรับรัน npm ผ่าน Terminal (ถ้ามี SSH Access)
ติดตั้ง Dependencies ด้วย NPM ใน cPanel
หลังจากสร้าง Application แล้ว ขั้นตอนต่อไปคือการ Upload ไฟล์โปรเจกต์และติดตั้ง NPM Packages ใน cPanel มีวิธีทำ NPM Install ได้ 2 แบบหลักๆ
วิธีที่ 1: ผ่าน cPanel GUI (แนะนำสำหรับมือใหม่) ไปที่ Setup Node.js App แล้วคลิก Edit Application ที่ต้องการ จะเห็นปุ่ม Run NPM Install ให้คลิกปุ่มนี้ cPanel จะรัน npm install โดยอ่าน dependencies จาก package.json อัตโนมัติ
วิธีที่ 2: ผ่าน SSH Terminal (สำหรับผู้ที่มี SSH Access)
- เชื่อมต่อ SSH เข้า Server
- รัน Command ที่ cPanel แสดงให้เพื่อ Activate Virtual Environment เช่น
source /home/username/nodevenv/nodeapp/18/bin/activate - ไปที่โฟลเดอร์โปรเจกต์:
cd ~/nodeapp - รัน:
npm install
สิ่งสำคัญที่ต้องมีในโปรเจกต์ก่อน npm install:
- ไฟล์
package.jsonที่มีรายการ dependencies ครบถ้วน - ไฟล์ Entry Point เช่น
server.jsต้องอยู่ใน Application Root - Disk Quota เพียงพอ (node_modules อาจใช้พื้นที่ 50-500 MB ขึ้นอยู่กับ Package)
หลังจาก npm install สำเร็จ จะเห็น Folder node_modules ถูกสร้างขึ้นใน Application Root ของคุณ
ตั้งค่า Entry Point (server.js / app.js)
Entry Point คือไฟล์ JavaScript หลักที่ Node.js จะรันเมื่อ Application เริ่มทำงาน ชื่อไฟล์ที่นิยมใช้คือ server.js หรือ app.js ต้องให้ตรงกับที่ตั้งค่าใน cPanel Setup Node.js App
ตัวอย่าง server.js พื้นฐานที่ทำงานได้บน cPanel Shared Hosting:
const http = require('http');
// ต้องใช้ process.env.PORT เสมอ — cPanel จะกำหนด PORT ให้เอง
const PORT = process.env.PORT || 3000;
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
res.end('สวัสดี! Node.js App กำลังรันอยู่บน cPanel Shared Hosting\n');
});
server.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
สำหรับ Express.js ให้ใช้โค้ดนี้:
const express = require('express');
const app = express();
// สำคัญมาก: ต้องใช้ process.env.PORT
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.json({ message: 'Express.js กำลังรันบน cPanel!', status: 'ok' });
});
app.listen(PORT, () => {
console.log(`Express server running on port ${PORT}`);
});
ข้อควรระวังในการเขียน Entry Point สำหรับ cPanel:
- ห้ามใช้ PORT ตายตัว เช่น
app.listen(3000)ต้องใช้process.env.PORTเสมอ - ไม่ต้อง Bind IP เป็น
0.0.0.0ให้ Node.js ใช้ Default ของ Passenger - ถ้าใช้
.envfile ต้องติดตั้ง Packagedotenvและเรียกใช้ต้นไฟล์ - Logs จะถูกเก็บโดย Passenger อัตโนมัติ ดูได้ใน cPanel → Application Log
Restart App และดู Application Log
หลังจาก Upload ไฟล์หรือแก้ไขโค้ดแล้ว ต้อง Restart Application เพื่อให้การเปลี่ยนแปลงมีผล ใน cPanel ทำได้ง่ายมากผ่าน Setup Node.js App
วิธี Restart Node.js App:
- ไปที่ cPanel → Software → Setup Node.js App
- ค้นหา Application ที่ต้องการ Restart
- คลิกไอคอน Restart (รูปวงกลมลูกศร) หรือคลิก Edit แล้วกด Restart
- รอสักครู่แล้วลอง Access URL ที่ตั้งค่าไว้
การดู Application Log มีความสำคัญมากในการ Debug ปัญหา Log จะบอกว่า App มี Error อะไร หรือ Start สำเร็จหรือไม่ วิธีดู Log:
- ไปที่ cPanel → Setup Node.js App → คลิก Edit Application ที่ต้องการ
- เลื่อนลงมาด้านล่างจะเห็น Application Log แสดง Output ล่าสุด
- ถ้ามี Error จะแสดงเป็น Stack Trace พร้อม Line Number ที่เกิด Error
- Log ที่เห็นคือ stderr + stdout ของ Node.js Process
เมื่อต้องการ Stop Application ชั่วคราว ให้คลิกปุ่ม Stop ใน cPanel Application จะหยุดทำงานและ URL จะแสดง 503 Error แทน เมื่อ Start ใหม่ก็กด Restart อีกครั้ง
ตรวจสอบว่า Node.js App ทำงานถูกต้อง
หลังจาก Start Application แล้ว ให้ทดสอบโดยเปิด URL ที่ตั้งค่าไว้บน Browser ตัวอย่างการทดสอบด้วย curl และโค้ดที่ควรมีในโปรเจกต์:
# ทดสอบว่า App ตอบสนองหรือไม่ (รันจาก Terminal บนเครื่องตัวเอง)
curl -I https://yourdomain.com
# ถ้า App ตอบ 200 OK แสดงว่าทำงานแล้ว
# HTTP/2 200
# content-type: text/plain; charset=utf-8
# ทดสอบ Express.js API endpoint
curl https://yourdomain.com/api/health
# ตัวอย่าง package.json ที่ถูกต้องสำหรับ cPanel
# {
# "name": "my-node-app",
# "version": "1.0.0",
# "main": "server.js",
# "scripts": {
# "start": "node server.js"
# },
# "engines": {
# "node": ">=18.0.0"
# },
# "dependencies": {
# "express": "^4.18.2"
# }
# }
# ตรวจสอบ Node Version ที่ cPanel ใช้ (ผ่าน SSH)
node --version
npm --version
แก้ปัญหาที่พบบ่อย
ปัญหาที่มักพบเมื่อตั้งค่า Node.js บน cPanel Shared Hosting มักเกิดจากการตั้งค่าผิดหรือ Resource ไม่เพียงพอ รวบรวมปัญหาที่พบบ่อยพร้อมวิธีแก้ไขดังนี้:
Node.js App แสดง 503 — App ยังไม่ Start หรือ Entry Point ผิด
Error 503 Service Unavailable มักเกิดเมื่อ Passenger ไม่สามารถ Start Application ได้ ให้ตรวจสอบสิ่งต่อไปนี้:
- ตรวจสอบ Application Log ใน cPanel ว่ามี Error อะไร
- ตรวจสอบว่า Entry Point ที่ตั้งใน cPanel ตรงกับชื่อไฟล์จริง (Case-Sensitive)
- ตรวจสอบว่าไฟล์
package.jsonอยู่ใน Application Root แล้ว - ลอง npm install ใหม่ผ่านปุ่มใน cPanel
- ตรวจสอบว่า Syntax ในไฟล์ Entry Point ไม่มี Error โดยรัน
node --check server.jsผ่าน SSH
npm install ไม่สำเร็จ — Disk Quota ไม่พอ node_modules ใหญ่มาก
โฟลเดอร์ node_modules สามารถมีขนาดใหญ่ได้มาก โดยเฉพาะ Framework ขนาดใหญ่อย่าง Next.js ที่อาจใช้พื้นที่ถึง 500 MB ขึ้นไป วิธีแก้:
- ตรวจสอบ Disk Usage ใน cPanel → Disk Usage
- ลบไฟล์ที่ไม่จำเป็นออก เช่น ไฟล์ Log เก่า หรือ Backup
- ใช้
npm install --productionเพื่อติดตั้งเฉพาะ Production Dependencies - ตรวจสอบว่า
devDependenciesไม่มี Package ที่ใหญ่เกินจำเป็น - ถ้า Quota ไม่พอจริงๆ ต้องอัพเกรด Hosting Plan
PORT ผิด — ต้องใช้ process.env.PORT ไม่ใช่ port ตายตัว
นี่คือข้อผิดพลาดที่พบบ่อยที่สุดในการ Deploy Node.js บน cPanel บน Shared Hosting cPanel/Passenger จะกำหนด PORT ให้เอง ไม่สามารถใช้ Port ตายตัวได้:
- ผิด:
app.listen(3000)หรือapp.listen(8080) - ถูก:
app.listen(process.env.PORT) - ถ้าต้องการ Fallback:
app.listen(process.env.PORT || 3000) - ตรวจสอบไฟล์ Entry Point ทุกไฟล์ที่มี
.listen()
NPM Version เก่าไป — ต้องอัพเดทหรือเลือก Node Version ใหม่
บางครั้ง npm install ล้มเหลวเพราะ NPM Version ที่มากับ Node.js ที่เลือกไม่รองรับ Package ที่ต้องการ วิธีแก้:
- ลองเปลี่ยน Node.js Version เป็น Version ใหม่กว่า เช่น จาก 16.x เป็น 18.x หรือ 20.x
- ดู Error Message จาก npm install อย่างละเอียด มักจะบอกว่าต้องการ Node หรือ npm Version เท่าไหร่
- ตรวจสอบ
enginesfield ในpackage.jsonของ Package ที่มีปัญหา - ถ้า Hosting ไม่มี Node Version ที่ต้องการ ให้ติดต่อ Support ของ Hosting Provider
คำถามที่พบบ่อย
process.env.PORT ก็ทำงานได้ทันที สำหรับ Next.js สามารถรันในโหมด Custom Server ได้ แต่ต้องสร้าง server.js แยกต่างหากและไม่ใช้ next start โดยตรง ข้อจำกัดคือ Next.js ใช้ Disk Space มาก (node_modules ขนาดใหญ่) และ Build Process อาจ Timeout บน Shared Hosting แนะนำ Build บนเครื่องตัวเองแล้ว Upload ไฟล์ที่ Build แล้วแทน