Python บน cPanel ทำงานอย่างไร
cPanel เวอร์ชันใหม่ (82+) มาพร้อมฟีเจอร์ Setup Python App ที่ช่วยให้คุณรัน Python Web Application บน Shared Hosting ได้โดยไม่ต้องเปิด Terminal
กลไกเบื้องหลังคือ Phusion Passenger ซึ่งทำหน้าที่เป็น WSGI Server แทนที่ mod_wsgi แบบเดิม ทำให้ Flask และ Django ทำงานได้บน Apache ที่ Shared Hosting ใช้
ความสามารถที่ได้จาก Setup Python App:
- เลือก Python Version ได้ (2.7, 3.6, 3.8, 3.9, 3.11 ขึ้นอยู่กับ Hosting)
- สร้าง Virtual Environment แยกสำหรับแต่ละ App
- ติดตั้ง Package ผ่าน pip โดยไม่กระทบ Python ระบบ
- กำหนด Startup File และ URL Path ได้เอง
ตรวจสอบว่า Hosting รองรับ Python App
Login cPanel แล้วดูที่หัวข้อ Software ถ้ามี "Setup Python App" แสดงว่ารองรับ ถ้าไม่เห็นต้องติดต่อ Support ของ Hosting เพื่อสอบถาม
Hosting ที่มักรองรับ Python App ผ่าน cPanel:
- Hosting ที่ใช้ CloudLinux + cPanel 82 ขึ้นไป
- แผน Business Hosting หรือ Web Hosting ระดับกลาง-สูง
- Hosting ที่มี SSH Access มักรองรับ Python ด้วย
สร้าง Python App ใหม่ใน cPanel
ขั้นที่ 1: เข้า Setup Python App
- Login cPanel
- ไปที่ Software → Setup Python App
- กด Create Application
ขั้นที่ 2: กำหนด Application Settings
- Python Version — เลือก Version ที่ต้องการ เช่น 3.11
- Application Root — โฟลเดอร์เก็บ Code เช่น
myflaskapp - Application URL — Domain หรือ Subdomain เช่น
yourdomain.comหรือapp.yourdomain.com - Application Startup File — ไฟล์หลัก เช่น
app.pyหรือpassenger_wsgi.py - Application Entry Point — ชื่อ WSGI Application Object เช่น
application
กด Create cPanel จะสร้าง Virtual Environment ให้อัตโนมัติ
ขั้นที่ 3: สร้างไฟล์ Flask App
# passenger_wsgi.py — ไฟล์ที่ Phusion Passenger ต้องการ
import sys
import os
# เพิ่ม path ของ App เข้า Python Path
sys.path.insert(0, os.path.dirname(__file__))
from app import app as application # import Flask app
# app.py — Flask Application หลัก
from flask import Flask, render_template, jsonify
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello from Flask on cPanel!</h1>'
@app.route('/api/status')
def status():
return jsonify({'status': 'running', 'python': 'ok'})
if __name__ == '__main__':
app.run(debug=False)
ขั้นที่ 4: ติดตั้ง Package ผ่าน cPanel
ใน Setup Python App ให้กด Open Terminal (หรือใช้ SSH) แล้วรัน:
# Activate Virtual Environment ก่อน
source ~/virtualenv/myflaskapp/3.11/bin/activate
# ติดตั้ง Flask
pip install flask
# ติดตั้งจาก requirements.txt
pip install -r ~/myflaskapp/requirements.txt
requirements.txt ไว้ในโฟลเดอร์ App เสมอ เพื่อ Deploy ใหม่ได้ง่าย ตัวอย่าง: flask==3.0.0, requests==2.31.0ขั้นที่ 5: Restart Application
หลังแก้ไข Code ต้อง Restart App เสมอ ทำได้จาก cPanel → Setup Python App → กด Restart ที่ App ของคุณ
ตั้งค่า Django บน cPanel
Django ต้องการ Configuration เพิ่มเติมเล็กน้อยเพราะมี Static Files และ Database
# passenger_wsgi.py สำหรับ Django
import sys
import os
sys.path.insert(0, '/home/username/mydjango')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# settings.py — ตั้งค่าสำหรับ Shared Hosting
DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
# Database — ใช้ MySQL จาก cPanel
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cpanelusername_dbname',
'USER': 'cpanelusername_dbuser',
'PASSWORD': 'your_db_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
# Static Files
STATIC_ROOT = '/home/username/public_html/static/'
STATIC_URL = '/static/'
# ติดตั้ง Django dependencies
pip install django mysqlclient pillow
# Collect Static Files
python manage.py collectstatic --noinput
# Run Migrations
python manage.py migrate
ตรวจสอบว่า Python App ทำงานถูกต้อง
# ทดสอบ App ที่ Deploy แล้ว
curl -I https://yourdomain.com/
# ตรวจสอบ Response Body
curl https://yourdomain.com/api/status
# ดู Virtual Environment ที่ใช้งาน
source ~/virtualenv/myflaskapp/3.11/bin/activate
python --version
pip list
~/logs/ หรือใน cPanel → Error Log ก่อน ปัญหาส่วนใหญ่คือ Missing Package หรือ Path ไม่ถูกต้องใน passenger_wsgi.pyแก้ปัญหาที่พบบ่อย
Error: "ModuleNotFoundError" หลัง Deploy
Package ที่ต้องการยังไม่ได้ติดตั้งใน Virtual Environment ของ App ต้อง Activate venv แล้วรัน pip install อีกครั้ง ระวังอย่า pip install บน Python ระบบเพราะ App จะหา Package ใน venv ของตัวเอง
Error: 503 หลัง Restart App
Phusion Passenger ใช้เวลา 10–30 วินาทีในการ Warm Up App ใหม่ ให้รอแล้วโหลดซ้ำ ถ้ายัง 503 อยู่ให้ดู Error Log เพราะอาจมี Syntax Error ในไฟล์ Python
Static Files ของ Django ไม่แสดง
ต้องรัน python manage.py collectstatic และตรวจสอบว่า STATIC_ROOT ชี้ไปที่โฟลเดอร์ใน public_html พร้อมตั้งค่า Alias ใน .htaccess ให้ URL /static/ ชี้ไปที่โฟลเดอร์ถูกต้อง
App ทำงานได้แต่ช้ามากหรือ Timeout
เกิดจาก Resource Limit ของ Shared Hosting โดยเฉพาะ App ที่ใช้ Machine Learning หรือ Data Processing หนัก ควรพิจารณาย้ายไป VPS ที่มี RAM และ CPU เพียงพอกว่า
คำถามที่พบบ่อย
Q: FastAPI รันบน cPanel ได้ไหม?
A: ได้ แต่ต้องใช้ ASGI Wrapper เพราะ Phusion Passenger รองรับแค่ WSGI ให้ใช้ asgiref หรือ uvicorn wrapped ผ่าน passenger_wsgi.py โดยเขียน Adapter แปลง WSGI → ASGI
Q: Celery Task Queue บน Shared Hosting ได้ไหม?
A: ไม่แนะนำ Celery ต้องการ Worker Process ที่รันอยู่ตลอดเวลา ซึ่ง Shared Hosting มีข้อจำกัดด้าน Long-Running Process สำหรับ Background Job แนะนำใช้ Cron Job ใน cPanel แทน
Q: Python App ที่ cPanel ต่างจาก VPS อย่างไร
A: บน Shared Hosting จะรันผ่าน Phusion Passenger ไม่ใช่ Gunicorn หรือ uWSGI โดยตรง มี Resource Limit ร่วมกับ User อื่น และไม่สามารถเปิด Port หรือรัน Background Service เองได้ VPS ให้ความยืดหยุ่นกว่ามาก