ตั้งค่า Python App บน cPanel

รัน Flask, Django และ Python Script บน Shared Hosting ด้วย Setup Python App ใน cPanel ตั้งค่า Virtual Environment และ WSGI ได้ง่ายผ่าน GUI

ตั้งค่า Python App บน cPanel Shared Hosting รัน Flask Django

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:

ตรวจสอบว่า Hosting รองรับ Python App

Login cPanel แล้วดูที่หัวข้อ Software ถ้ามี "Setup Python App" แสดงว่ารองรับ ถ้าไม่เห็นต้องติดต่อ Support ของ Hosting เพื่อสอบถาม

Hosting ที่มักรองรับ Python App ผ่าน cPanel:

สร้าง Python App ใหม่ใน cPanel

ขั้นที่ 1: เข้า Setup Python App

  1. Login cPanel
  2. ไปที่ Software → Setup Python App
  3. กด Create Application

ขั้นที่ 2: กำหนด Application Settings

กด 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
Tip: สร้างไฟล์ 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
Tip: ถ้า App แสดง Error 500 ให้เช็ค Passenger Error Log ที่ ~/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 ให้ความยืดหยุ่นกว่ามาก