คู่มือ Python Django Hosting ฉบับสมบูรณ์ 2026
Complete Python Django Hosting Guide 2026
Django เป็น Web Framework ที่ทรงพลังสำหรับการสร้าง Web Application ใน Python — แต่การเลือก Hosting ที่เหมาะสมเป็นส่วนสำคัญอีกส่วนหนึ่ง ไม่ใช่ทุกบริการ Web Hosting ปกติ (PHP Hosting) จะสนับสนุน Python และ Django ได้ดี บทความนี้จะอธิบายวิธีเลือก Hosting ที่ถูกต้อง ติดตั้ง ตั้งค่า และ Deploy Django Application ของคุณให้สำเร็จ
สารบัญ
Python/Django Hosting คืออะไร แตกต่างจาก PHP Hosting อย่างไร
PHP Hosting เป็นบริการ Web Hosting ที่ออกแบบมาให้รองรับภาษา PHP โดยตรง — ปกติแล้ว Apache หรือ Nginx จะอ่านไฟล์ .php และจะประมวลผลรหัสโดยอัตโนมัติ แต่ Django ไม่ทำงานแบบนี้
Django Application คือ Application ที่ยาวนาน (long-running process) ซึ่งต้องการ Application Server เช่น Gunicorn หรือ uWSGI เพื่อจัดการคำขอจากผู้ใช้ — Nginx ทำหน้าที่เป็น Reverse Proxy เท่านั้น โดยส่งต่อคำขอไปยัง Gunicorn ที่ทำงานอยู่เบื้องหลัง
ความแตกต่างหลักมีดังนี้:
- PHP Hosting: Apache/Nginx อ่านไฟล์ .php โดยตรง → ประมวลผล → ส่งผล — เรียบง่าย เหมาะสำหรับเว็บไซต์ขนาดเล็ก
- Django Hosting: ต้องมี Python Runtime + Gunicorn/uWSGI Application Server + Nginx Reverse Proxy + PostgreSQL/MySQL Database — ซับซ้อนกว่า แต่ดีสำหรับ Application ขนาดใหญ่
บริการ Web Hosting ทั่วไปในไทยส่วนใหญ่ออกแบบมาเพื่อ PHP เท่านั้น ดังนั้นเมื่อต้องการ Django คุณจะต้องใช้ VPS หรือ Cloud Hosting ที่ให้ Full Control ต่อ Linux Server
ความต้องการ Server สำหรับ Django Application
Django Application จำเป็นต้องมีส่วนประกอบหลายชิ้นเพื่อทำงานได้เต็มประสิทธิภาพ:
- Python Runtime: Python 3.8 ขึ้นไป (ปัจจุบัน Python 3.11 หรือ 3.12 เป็นมาตรฐาน)
- pip Package Manager: เพื่อติดตั้ง Django และ Libraries อื่นๆ
- Virtual Environment: venv — เพื่อแยก Dependencies ของ Project
- Application Server: Gunicorn หรือ uWSGI — เพื่อรัน Django App
- Web Server: Nginx — เพื่อทำหน้าที่ Reverse Proxy
- Database: PostgreSQL หรือ MySQL — ที่ใช้ Django ORM
- SSL Certificate: HTTPS Support (ใจแบบจำเป็น)
- Process Manager: Supervisor หรือ Systemd — เพื่อให้ Gunicorn รันต่อเนื่อง
Server ที่เหมาะสำหรับ Django ควรมี RAM อย่างน้อย 512 MB ถึง 1 GB สำหรับ Application ขนาดเล็ก และ 2 GB ขึ้นไปสำหรับ Application ขนาดกลางหรือใหญ่ — ซีพียูมักไม่เป็นปัญหามากเท่า RAM
Shared Hosting vs VPS vs Cloud สำหรับ Django
เมื่อต้องการเลือก Hosting สำหรับ Django ให้พิจารณา 3 ตัวเลือกหลัก:
1. Shared Hosting — บ่อยครั้งที่ Shared Hosting ไม่รองรับ Django เลย บางรายทำ แต่มีข้อจำกัดมากมาย เช่น ไม่สามารถติดตั้ง Python Package ใหม่ได้ หรือไม่มี Virtual Environment Support — ไม่แนะนำ
2. VPS (Virtual Private Server) — คุณได้ Full Control ต่อ Linux Server เอง สามารถติดตั้ง Python, Gunicorn, Nginx ได้เต็มที่ — เหมาะสำหรับ Developer ที่รู้วิธี Manage Server หรือมีทีมสนับสนุน ราคา ประมาณ 200-500 บาทต่อเดือน (TH Server) ถึง 500-1000 บาท (SG Server)
3. Cloud Hosting (AWS, Google Cloud, DigitalOcean) — ยืดหยุ่นสูง สามารถ Scale อัตโนมัติได้ แต่ราคาแพงกว่า (เริ่มต้น 250-1000 บาทต่อเดือน) — เหมาะสำหรับ Application ที่มีการใช้งานหลากหลายหรือต้อง Scale ขึ้นลง
สำหรับคนเริ่มต้น VPS ในไทยหรือสิงคโปร์เป็นตัวเลือกที่ดีที่สุด — ราคาประหยัด เพียงพอสำหรับ Application ขนาดกลาง และคุณสามารถเรียนรู้ Linux System Administration ได้พร้อม ๆ ไป
วิธีติดตั้ง Python และ Django บน VPS
สมมติว่าคุณมี VPS ที่รัน Ubuntu 22.04 LTS (มาตรฐาน) แล้ว — ขั้นตอนต่อไปนี้จะติดตั้ง Python 3.11 และ Django:
ขั้นตอนที่ 1: อัปเดต Server และติดตั้ง Dependencies
sudo apt update
sudo apt upgrade -y
sudo apt install -y python3.11 python3.11-venv python3-pip build-essential libpq-dev
คำสั่ง build-essential มีความจำเป็นสำหรับการ Compile Python Packages บางตัวที่มี C Extensions, libpq-dev เป็นฟังก์ชันที่สำคัญสำหรับการสอดประสานกับ PostgreSQL
ขั้นตอนที่ 2: ตรวจสอบ Python Version
python3.11 --version
pip3 --version
ขั้นตอนที่ 3: สร้าง Project Directory
mkdir -p /home/django
cd /home/django
sudo chown -R $USER:$USER /home/django
ขั้นตอนที่ 4: สร้าง Virtual Environment
python3.11 -m venv venv
source venv/bin/activate
ตอนนี้ prompt จะเปลี่ยนเป็น (venv) user@server:/home/django$ — นี่หมายความว่า Virtual Environment ทำงานอยู่
ขั้นตอนที่ 5: ติดตั้ง Django
pip install --upgrade pip
pip install django gunicorn psycopg2-binary
ตอนนี้คุณมี Django ติดตั้งแล้ว — สร้าง Django Project:
django-admin startproject mysite
cd mysite
python manage.py migrate
โดยจะสร้างไฟล์ที่สำคัญต่าง ๆ เช่น manage.py, settings.py, urls.py, wsgi.py เป็นต้น
การตั้งค่า Gunicorn + Nginx สำหรับ Django Production
ถัดไปต้องตั้งค่า Gunicorn เพื่อรัน Django Application และ Nginx เพื่อทำหน้าที่เป็น Reverse Proxy
ขั้นตอนที่ 1: ตั้งค่า Gunicorn
ทดสอบ Gunicorn ตัวแรก:
cd /home/django/mysite
source ../venv/bin/activate
gunicorn mysite.wsgi:application --bind 0.0.0.0:8000
หากทำงาน — สร้าง Systemd Service File เพื่อให้ Gunicorn รันต่อเนื่อง:
sudo nano /etc/systemd/system/gunicorn.service
ใส่เนื้อหา:
[Unit]
Description=Gunicorn Django Application
After=network.target
[Service]
User=www-data
WorkingDirectory=/home/django/mysite
ExecStart=/home/django/venv/bin/gunicorn mysite.wsgi:application --bind unix:/home/django/mysite/gunicorn.sock --workers 3
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
บันทึก และเปิดใช้ Service:
sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl status gunicorn
ขั้นตอนที่ 2: ติดตั้งและตั้งค่า Nginx
ติดตั้ง Nginx:
sudo apt install -y nginx
สร้าง Nginx Configuration File:
sudo nano /etc/nginx/sites-available/mysite
ใส่เนื้อหา:
upstream django {
server unix:/home/django/mysite/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/django/mysite/static/;
}
location /media/ {
alias /home/django/mysite/media/;
}
location / {
proxy_pass http://django;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
เปิดใช้งาน Site:
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
ตอนนี้ Nginx จะทำหน้าที่เป็น Reverse Proxy แล้ว — ส่งต่อคำขอ HTTP ไปยัง Gunicorn ผ่าน Unix Socket
Virtual Environment และ requirements.txt
Virtual Environment (venv) เป็นเครื่องมือที่สำคัญมาก — ช่วยให้คุณแยก Python Dependencies ของ Project ออกจากระบบ System Python ได้ — ส่วนของประโยชน์:
- ป้องกันความขัดแย้ง Version ของ Package ระหว่าง Project ต่าง ๆ
- ช่วยให้สามารถ Reproduce Environment เดิมได้บน Server อื่น
- ง่ายต่อการ Deploy และ Update
วิธีสร้าง requirements.txt:
pip freeze > requirements.txt
ไฟล์นี้จะบันทึก Package และ Version ทั้งหมดที่ติดตั้งอยู่ใน Virtual Environment ปัจจุบัน
ตัวอย่าง requirements.txt:
Django==4.2.2
gunicorn==21.2.0
psycopg2-binary==2.9.7
Pillow==10.0.0
celery==5.3.1
redis==4.5.5
วิธีติดตั้งจาก requirements.txt บน Server ใหม่:
python3.11 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
สิ่งนี้จะติดตั้ง Package ทั้งหมดด้วย Version เดียวกัน กับ Local Environment ของคุณ — ท่านได้อาจจะต้องอัปเดตไฟล์นี้ทุกครั้งที่เพิ่มหรือลบ Package
การ Deploy Django App จาก GitHub
ส่วนใหญ่ Django Application ถูก Develop บน GitHub — การ Deploy จาก GitHub ไปยัง Server ต้องทำให้อัตโนมัติเท่าที่เป็นไปได้
ขั้นตอนที่ 1: ตั้งค่า SSH Key บน Server
สร้าง SSH Key สำหรับ Deployment:
ssh-keygen -t ed25519 -f /home/django/.ssh/deploy -C "deploy"
cat /home/django/.ssh/deploy.pub
คัดลอก Public Key แล้วเพิ่มเข้า GitHub Repository Settings → Deploy Keys (หรือ Personal Access Token ก็ได้)
ขั้นตอนที่ 2: Clone Repository
cd /home/django
git clone [email protected]:yourusername/mysite.git mysite
cd mysite
source ../venv/bin/activate
pip install -r requirements.txt
ขั้นตอนที่ 3: สร้าง Deploy Script
สร้างไฟล์ deploy.sh:
#!/bin/bash
cd /home/django/mysite
source ../venv/bin/activate
git pull origin main
pip install -r requirements.txt
python manage.py collectstatic --noinput
python manage.py migrate
sudo systemctl restart gunicorn
sudo systemctl restart nginx
echo "Deploy successful!"
ให้สิทธิ Execute:
chmod +x deploy.sh
ขั้นตอนที่ 4: GitHub Actions (Optional)
สร้างไฟล์ .github/workflows/deploy.yml ใน Repository:
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to VPS
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/deploy
chmod 600 ~/.ssh/deploy
ssh -i ~/.ssh/deploy -o StrictHostKeyChecking=no [email protected] './deploy.sh'
ดวงวิธีนี้ทำให้ Deployment เป็นอัตโนมัติทุกครั้งที่ Push ไปยัง Main Branch
Static Files, Media Files และ Django Settings สำหรับ Production
ในช่วง Development Django จะ Serve Static Files โดยอัตโนมัติ — แต่ใน Production ต้องตั้งค่าให้ Nginx เป็นผู้ Serve แทน
การตั้งค่า settings.py:
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
DEBUG = False
SECRET_KEY = os.environ.get('SECRET_KEY', 'fallback-secret-key-not-for-production')
CSRF_TRUSTED_ORIGINS = ['https://yourdomain.com', 'https://www.yourdomain.com']
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
Collect Static Files:
python manage.py collectstatic --noinput
คำสั่งนี้จะรวบรวม Static Files จากทุก ๆ App ลงใน STATIC_ROOT — จากนั้น Nginx จะ Serve ไฟล์เหล่านี้โดยตรง ไม่ผ่าน Django
สำหรับ Media Files (ไฟล์ที่ Upload โดยผู้ใช้) — ตั้งค่า Nginx ให้อ่านจาก /media/ Directory ก่อนข้อต่อไปจะ Proxy ไปยัง Django
Database PostgreSQL สำหรับ Django
Django รองรับ SQLite, PostgreSQL, MySQL, Oracle — สำหรับ Production ขอแนะนำให้ใช้ PostgreSQL เพราะมีประสิทธิภาพดีและมีเครื่องมือบริหารที่ดี
ขั้นตอนที่ 1: ติดตั้ง PostgreSQL
sudo apt install -y postgresql postgresql-contrib
ขั้นตอนที่ 2: สร้าง Database และ User
sudo -u postgres psql
CREATE DATABASE mysite_db;
CREATE USER mysite_user WITH PASSWORD 'strong_password_here';
ALTER ROLE mysite_user SET client_encoding TO 'utf8';
ALTER ROLE mysite_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE mysite_user SET default_transaction_deferrable TO on;
GRANT ALL PRIVILEGES ON DATABASE mysite_db TO mysite_user;
\q
ขั้นตอนที่ 3: ตั้งค่า Django settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mysite_db',
'USER': 'mysite_user',
'PASSWORD': 'strong_password_here',
'HOST': 'localhost',
'PORT': '5432',
}
}
ขั้นตอนที่ 4: Migrate Database
python manage.py migrate
ตอนนี้ Django Tables จะสร้างใน PostgreSQL แล้ว — ข้อดีของ PostgreSQL ได้แก่:
- รองรับ Transaction ACID ได้ดี
- มี Full-Text Search
- รองรับ JSON Data Type
- Performance ดีสำหรับขนาดข้อมูลใหญ่
FAQ: คำถามที่พบบ่อยเกี่ยวกับ Django Hosting
sudo apt install certbot python3-certbot-nginx จากนั้น sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com Certbot จะอัป SSL Certificate และแก้ Nginx Config โดยอัตโนมัติ