ตั้งค่า Node.js และ NPM บน cPanel สำหรับ Shared Hosting

รัน Node.js บน Shared Hosting ผ่าน cPanel GUI โดยไม่ต้องใช้ SSH ตั้งค่า Version, NPM Install และ Entry Point ได้เลย

ตั้งค่า Node.js cPanel 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 มีดังนี้:

เหมาะสำหรับ: เว็บแอปขนาดเล็กถึงกลาง, 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"

ตรวจสอบให้แน่ใจว่า 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 ซึ่งแต่ละอย่างมีความสำคัญมาก

วิธีกรอกข้อมูลในแต่ละฟิลด์:

หลังจากกรอกครบแล้วคลิก 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)

สิ่งสำคัญที่ต้องมีในโปรเจกต์ก่อน npm install:

หลังจาก 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:

Restart App และดู Application Log

หลังจาก Upload ไฟล์หรือแก้ไขโค้ดแล้ว ต้อง Restart Application เพื่อให้การเปลี่ยนแปลงมีผล ใน cPanel ทำได้ง่ายมากผ่าน Setup Node.js App

วิธี Restart Node.js App:

  1. ไปที่ cPanel → Software → Setup Node.js App
  2. ค้นหา Application ที่ต้องการ Restart
  3. คลิกไอคอน Restart (รูปวงกลมลูกศร) หรือคลิก Edit แล้วกด Restart
  4. รอสักครู่แล้วลอง Access URL ที่ตั้งค่าไว้

การดู Application Log มีความสำคัญมากในการ Debug ปัญหา Log จะบอกว่า App มี Error อะไร หรือ Start สำเร็จหรือไม่ วิธีดู Log:

เมื่อต้องการ 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
Tip: เปิด URL ที่ตั้งค่าไว้บน Browser ถ้าขึ้น Cannot GET / แปลว่า App ทำงานแล้วแต่ยังไม่มี Route หากขึ้น 503 ต้อง Check Application Log ใน cPanel

แก้ปัญหาที่พบบ่อย

ปัญหาที่มักพบเมื่อตั้งค่า Node.js บน cPanel Shared Hosting มักเกิดจากการตั้งค่าผิดหรือ Resource ไม่เพียงพอ รวบรวมปัญหาที่พบบ่อยพร้อมวิธีแก้ไขดังนี้:

Node.js App แสดง 503 — App ยังไม่ Start หรือ Entry Point ผิด

Error 503 Service Unavailable มักเกิดเมื่อ Passenger ไม่สามารถ Start Application ได้ ให้ตรวจสอบสิ่งต่อไปนี้:

npm install ไม่สำเร็จ — Disk Quota ไม่พอ node_modules ใหญ่มาก

โฟลเดอร์ node_modules สามารถมีขนาดใหญ่ได้มาก โดยเฉพาะ Framework ขนาดใหญ่อย่าง Next.js ที่อาจใช้พื้นที่ถึง 500 MB ขึ้นไป วิธีแก้:

PORT ผิด — ต้องใช้ process.env.PORT ไม่ใช่ port ตายตัว

นี่คือข้อผิดพลาดที่พบบ่อยที่สุดในการ Deploy Node.js บน cPanel บน Shared Hosting cPanel/Passenger จะกำหนด PORT ให้เอง ไม่สามารถใช้ Port ตายตัวได้:

NPM Version เก่าไป — ต้องอัพเดทหรือเลือก Node Version ใหม่

บางครั้ง npm install ล้มเหลวเพราะ NPM Version ที่มากับ Node.js ที่เลือกไม่รองรับ Package ที่ต้องการ วิธีแก้:

คำถามที่พบบ่อย

Node.js บน Shared Hosting ต่างจาก VPS หรือ PM2 อย่างไร?
บน Shared Hosting cPanel จะใช้ Phusion Passenger เป็น Application Server ทำหน้าที่คล้าย PM2 คือ Restart App เมื่อ Crash และจัดการ Process ให้อัตโนมัติ ข้อดีคือตั้งค่าง่ายผ่าน GUI ไม่ต้องรู้ Linux ข้อเสียคือ Customize ได้น้อยกว่า VPS ไม่สามารถรัน Multiple Worker Process ได้อิสระ และ Resource ถูกจำกัดตาม Hosting Plan บน VPS คุณควบคุมได้เต็มที่ ตั้งค่า PM2 Cluster Mode เพื่อใช้ CPU หลาย Core ได้ รองรับ Traffic สูงกว่ามาก เหมาะสำหรับ Production App ขนาดใหญ่
สามารถรัน Express.js หรือ Next.js บน cPanel Shared Hosting ได้ไหม?
Express.js รันได้ดีมากบน cPanel Shared Hosting เพราะเป็น Framework ที่เบาและตรงไปตรงมา แค่ตั้งค่า Entry Point ให้ถูกและใช้ 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 แล้วแทน
Shared Hosting รองรับ WebSocket สำหรับ Node.js ไหม?
โดยส่วนใหญ่ Shared Hosting บน cPanel ไม่รองรับ WebSocket เต็มรูปแบบ เนื่องจาก Reverse Proxy ที่ Hosting ใช้อยู่ (เช่น Apache หรือ LiteSpeed) มักตัด Long-lived Connection ก่อนกำหนด ทำให้ WebSocket Handshake ล้มเหลวหรือ Connection ถูก Drop บ่อยครั้ง ถ้าต้องการ WebSocket จริงๆ แนะนำให้ใช้ VPS หรือ Cloud Server ที่ควบคุม Reverse Proxy ได้เอง หรือใช้ Service ภายนอกอย่าง Pusher, Ably, หรือ Socket.io Cloud เป็นทางเลือกแทน