cPanel
Application Manager ใน cPanel คืออะไร?
Application Manager คือฟีเจอร์ใน cPanel ที่ช่วยให้ผู้ใช้ Shared Hosting สามารถรัน Web Application ที่พัฒนาด้วยภาษา Node.js หรือ Python ได้โดยตรง โดยไม่จำเป็นต้องมี VPS หรือ Dedicated Server เป็นของตัวเอง ฟีเจอร์นี้ทำงานผ่านระบบ Passenger Application Server ซึ่ง cPanel รองรับอยู่แล้ว ทำให้นักพัฒนาสามารถ deploy แอปได้ง่ายขึ้นมาก
โดยปกติแล้ว Shared Hosting รองรับได้เฉพาะ PHP เป็นหลัก แต่ด้วย Application Manager ทำให้สามารถรัน Express.js, Flask, Django, FastAPI และ Framework อื่นๆ บน Shared Hosting ได้เช่นกัน ซึ่งเหมาะอย่างยิ่งสำหรับโปรเจกต์ขนาดเล็กถึงกลางที่ยังไม่ต้องการ infrastructure ขนาดใหญ่
ก่อนเริ่มต้น: สิ่งที่ต้องเตรียม
ก่อนที่จะเริ่มใช้งาน Application Manager ควรตรวจสอบสิ่งต่อไปนี้ให้พร้อมก่อน:
- Hosting Plan ของคุณต้องรองรับ cPanel (ถาม Support เพื่อยืนยันว่า Hosting รองรับ Node.js หรือ Python ผ่าน Passenger)
- มี SSH Access หรืออย่างน้อย File Manager ใน cPanel เพื่อ upload ไฟล์
- โค้ดของ Application พร้อมแล้ว เช่น มีไฟล์
app.js(Node.js) หรือapp.py(Python) - ไฟล์
package.jsonสำหรับ Node.js หรือrequirements.txtสำหรับ Python
วิธี Setup Node.js App ใน cPanel Application Manager
ขั้นตอนการตั้งค่า Node.js Application ผ่าน cPanel มีดังนี้:
- เข้าสู่ cPanel ของคุณ แล้วค้นหาหมวด Software
- คลิก "Setup Node.js App" (บาง Hosting อาจแสดงเป็น "Node.js" หรือ "Application Manager")
- คลิกปุ่ม "+ Create Application" สีเขียวด้านบนขวา
- กรอกข้อมูลต่อไปนี้:
- Node.js version: เลือก version ที่ต้องการ เช่น 18.x หรือ 20.x
- Application mode: เลือก "Production" สำหรับเว็บจริง หรือ "Development" สำหรับทดสอบ
- Application root: โฟลเดอร์ที่เก็บโค้ด เช่น
myapp(จะถูกสร้างอัตโนมัติใน home directory) - Application URL: เลือก domain หรือ subdomain ที่ต้องการ
- Application startup file: ชื่อไฟล์หลัก เช่น
app.jsหรือserver.js
- คลิก "Create" เพื่อสร้าง Application
หลังจากสร้างแล้ว ระบบจะแสดงคำสั่ง virtual environment ให้ใช้ใน Terminal ซึ่งคุณสามารถ copy ไปรันผ่าน SSH เพื่อ install package ได้
อัปโหลดโค้ดและติดตั้ง Dependencies (Node.js)
หลังจากสร้าง Application แล้ว ให้ upload โค้ดขึ้นไปยัง Application root folder โดยใช้ File Manager หรือ FTP จากนั้นทำการ install package ผ่าน SSH:
# เข้า virtual environment ของ Node.js (copy จากหน้า Application Manager)
source /home/username/nodevenv/myapp/18/bin/activate
# เปลี่ยนไปยัง Application directory
cd ~/myapp
# ติดตั้ง package ทั้งหมดจาก package.json
npm install --production
# ตรวจสอบว่าแอปรันได้ (optional)
node app.js
วิธี Setup Python App ใน cPanel Application Manager
สำหรับ Python Application ขั้นตอนคล้ายกัน แต่ใช้เมนู "Setup Python App" แทน:
- ใน cPanel ค้นหา "Setup Python App" ในหมวด Software
- คลิก "+ Create Application"
- กรอกข้อมูล:
- Python version: เลือก version เช่น 3.9, 3.10, 3.11 หรือ 3.12
- Application root: โฟลเดอร์สำหรับเก็บโค้ด เช่น
pythonapp - Application URL: domain หรือ subdomain ที่ต้องการ
- Application startup file: เช่น
app.pyหรือpassenger_wsgi.py - Application Entry point: ชื่อ object หลัก เช่น
application(สำหรับ WSGI)
- คลิก "Create"
สำหรับ Flask หรือ Django จำเป็นต้องมีไฟล์ passenger_wsgi.py เพื่อเป็น entry point ให้ Passenger รู้จักแอปของคุณ ตัวอย่างไฟล์สำหรับ Flask:
# passenger_wsgi.py สำหรับ Flask
import sys
import os
# เพิ่ม path ของแอปเข้า Python path
sys.path.insert(0, os.path.dirname(__file__))
# import Flask app object
from app import app as application
# สำหรับ Django ให้ใช้:
# from django.core.wsgi import get_wsgi_application
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
# application = get_wsgi_application()
ติดตั้ง Python Dependencies
หลังจากสร้าง Application และ upload โค้ดแล้ว ให้ activate virtual environment แล้ว install package:
# Activate virtual environment (copy command จาก Application Manager)
source /home/username/virtualenv/pythonapp/3.11/bin/activate
# เปลี่ยนไปยัง Application directory
cd ~/pythonapp
# ติดตั้ง dependencies จาก requirements.txt
pip install -r requirements.txt
# ตรวจสอบ package ที่ติดตั้งแล้ว
pip list
การตั้งค่า Environment Variables
ในหน้า Application Manager คุณสามารถเพิ่ม Environment Variables ได้โดยตรง ไม่จำเป็นต้องสร้างไฟล์ .env เอง ซึ่งปลอดภัยกว่าการเก็บ key ไว้ในโค้ด:
- คลิก "Edit" ที่ Application ที่ต้องการ
- เลื่อนลงมาที่หัวข้อ "Environment variables"
- กด "+ Add Variable" แล้วกรอก Name และ Value เช่น:
DATABASE_URL=mysql://user:pass@localhost/dbnameSECRET_KEY=your-secret-key-hereNODE_ENV=production
- กด "Save" แล้วกด "Restart"
การ Restart และ Stop Application
ทุกครั้งที่มีการแก้ไขโค้ดหรือเปลี่ยน Environment Variables จะต้อง Restart Application เพื่อให้การเปลี่ยนแปลงมีผล ในหน้า Application Manager จะมีปุ่มให้ดังนี้:
- Restart - รีสตาร์ทแอปโดยไม่ต้องตั้งค่าใหม่
- Stop - หยุดการทำงานของแอปชั่วคราว
- Start - เริ่มการทำงานของแอปที่หยุดไว้
- Destroy - ลบ Application ออกจากระบบ (โค้ดยังอยู่ แต่ Passenger หยุดเสิร์ฟ)
ข้อจำกัดของ Application Manager บน Shared Hosting
แม้ว่า Application Manager จะสะดวก แต่ Shared Hosting มีข้อจำกัดบางอย่างที่ควรทราบ:
- ไม่รองรับ WebSocket แบบ persistent (เช่น Socket.io อาจทำงานได้ไม่สมบูรณ์)
- มี Memory และ CPU limit ตามแผน Hosting ที่เลือก
- ไม่สามารถรัน Background Process หรือ Cron ที่ใช้ทรัพยากรสูงได้ต่อเนื่อง
- Port ถูก manage โดย Passenger ไม่สามารถเลือก Port เองได้
หากแอปของคุณเริ่มโตขึ้นหรือต้องการ resource มากขึ้น การอัปเกรดไปยัง VPS จะให้ความยืดหยุ่นมากกว่า แต่สำหรับ MVP หรือโปรเจกต์ขนาดเล็ก Shared Hosting ก็เพียงพอมาก
ตรวจสอบว่า Application ทำงานถูกต้อง
# 1. ตรวจสอบสถานะแอปผ่าน cPanel Application Manager
# - ดูที่คอลัมน์ "Status" ต้องแสดง "Running"
# 2. ทดสอบเรียก URL ของแอปในเบราว์เซอร์
curl -I https://yourdomain.com/
# 3. ตรวจสอบ Error log ใน cPanel > Logs > Error Log
# หรือดูไฟล์ log โดยตรงผ่าน SSH:
tail -f ~/logs/yourdomain.com.error.log
# 4. ตรวจสอบว่า Node.js/Python version ถูกต้อง
node --version
python3 --version
# 5. ตรวจสอบ package ที่ติดตั้ง (Node.js)
npm list --depth=0
แก้ปัญหาที่พบบ่อย
Error: "Application failed to start"
ปัญหานี้มักเกิดจาก startup file ไม่ถูกต้อง หรือโค้ดมี syntax error ให้ตรวจสอบ Error Log ใน cPanel และตรวจสอบว่า Application startup file ที่กรอกไว้ตรงกับชื่อไฟล์จริงในโฟลเดอร์ เช่น ถ้ากรอก app.js แต่ไฟล์จริงชื่อ index.js ต้องแก้ให้ตรงกัน
Error: "Cannot find module '...'"
เกิดจาก npm install ยังไม่ได้รัน หรือรันนอก virtual environment วิธีแก้คือ activate virtual environment ก่อนแล้วค่อย install:
source /home/username/nodevenv/myapp/18/bin/activate
cd ~/myapp
npm install
Error: "ModuleNotFoundError: No module named '...'" (Python)
ปัญหาเดียวกับ Node.js คือ package ยังไม่ได้ติดตั้ง ให้ activate Python virtual environment แล้วรัน pip install:
source /home/username/virtualenv/pythonapp/3.11/bin/activate
pip install -r requirements.txt
ตรวจสอบด้วยว่า requirements.txt อยู่ใน root ของ Application folder หรือไม่
Error: "passenger_wsgi.py not found" หรือหน้าขาว (Python)
Passenger ต้องการไฟล์ passenger_wsgi.py เป็น entry point สำหรับ Python WSGI App ถ้าใช้ Flask ให้สร้างไฟล์นี้ใน root ของ Application โดยมีเนื้อหาดังที่แสดงในตัวอย่างด้านบน และตรวจสอบว่า "Application Entry point" ในหน้า Setup Python App ตั้งเป็น application
Error: "503 Service Unavailable" ทุกครั้ง
อาจเกิดจากแอปรันไม่ผ่านเพราะ Environment Variable ขาดหาย หรือ port ที่แอปพยายามจะ bind ถูก block ให้ตรวจสอบ Error Log และแก้ไขให้แอปไม่กำหนด port เองโดยตรงในโค้ด (Passenger จะ inject PORT ให้อัตโนมัติ) สำหรับ Node.js ให้ใช้:
// ถูกต้อง: ให้ Passenger กำหนด port ให้
const port = process.env.PORT || 3000;
app.listen(port);
คำถามที่พบบ่อย
Shared Hosting รองรับ Node.js ทุกแผนไหม?
ไม่ทุกแผนและไม่ทุก Provider รองรับ ขึ้นอยู่กับว่า Hosting ของคุณติดตั้ง Passenger ไว้หรือเปล่า แนะนำให้ติดต่อ Support ของ Hosting เพื่อยืนยันก่อน โดยทั่วไปแผน Business Hosting หรือสูงกว่ามักรองรับ Node.js และ Python ผ่าน cPanel Application Manager
สามารถรัน Express.js, Django, FastAPI บน Shared Hosting ได้ไหม?
ได้ทั้งหมด โดย Express.js ใช้ Node.js setup ส่วน Django และ FastAPI ใช้ Python setup พร้อมไฟล์ passenger_wsgi.py สำหรับ FastAPI ซึ่งเป็น ASGI app อาจต้องใช้ wrapper เพิ่มเติม เช่น Uvicorn หรือ Mangum ขึ้นอยู่กับ Passenger version ที่ Hosting รองรับ
ถ้าแอปใช้ Database ต้องตั้งค่าอย่างไร?
สร้าง Database ใน cPanel ก่อนผ่าน MySQL Databases จากนั้นใส่ Connection String ลงใน Environment Variables ของ Application Manager โดยใช้ localhost เป็น host เนื่องจากทั้ง App และ Database อยู่บน Server เดียวกัน ไม่ต้องใช้ IP ภายนอก ซึ่งทำให้เร็วกว่าและปลอดภัยกว่าด้วย