สร้างระบบ Continuous Delivery ให้ Django บน DigitalOcean ด้วย GitHub Actions และ Docker
สรุปสั้น ๆ: บทความนี้จะแนะนำขั้นตอนแบบครบวงจรในการสร้าง ระบบ Continuous Delivery (CD) สำหรับโปรเจกต์ Django โดยใช้เครื่องมือยอดนิยมอย่าง GitHub Actions, Docker และ DigitalOcean (VM Ubuntu) เพื่อให้คุณสามารถทดสอบและนำโค้ดขึ้น Production ได้โดยอัตโนมัติทันทีที่ Push ไปยัง GitHub
💡 Continuous Delivery คืออะไร?
Continuous Delivery (CD) คือกระบวนการพัฒนา Software ที่ทำให้โค้ดของคุณอยู่ในสถานะที่สามารถนำขึ้น Production ได้เสมอ โดยมีจุดเด่นคือ
- ✅ อัปเดตฟีเจอร์ได้รวดเร็ว
- 🔄 ลดขั้นตอน Manual ที่อาจเกิดข้อผิดพลาด
- 🔐 ส่งมอบได้บ่อยและปลอดภัย
- 🧪 ทดสอบโค้ดอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง
🔄 แผนภาพการทำงานของ CD Pipeline
graph TD
A["Push โค้ดขึ้น GitHub"] --> B["GitHub Actions เริ่มทำงาน"]
B --> C[Checkout code]
C --> D["SSH เข้าสู่ DigitalOcean VM"]
D --> E["ดึงโค้ดล่าสุดจาก Git"]
E --> F["Build Docker ใหม่"]
F --> G["Restart Django ด้วย Docker Compose"]
G --> H["แอปออนไลน์แบบอัตโนมัติ"]
| ลำดับ | รายละเอียด |
|---|---|
| A | นักพัฒนาส่งโค้ดขึ้น GitHub |
| B | GitHub Actions เริ่ม Pipeline โดยอัตโนมัติ |
| C | ดึงโค้ดมาบน runner |
| D | เชื่อมต่อเซิร์ฟเวอร์ผ่าน SSH |
| E | ใช้ git pull เพื่อดึงโค้ดล่าสุด |
| F | Rebuild Docker |
| G | รีสตาร์ทแอปด้วย Docker Compose |
| H | ระบบออนไลน์โดยไม่ต้องแตะเซิร์ฟเวอร์เลย |
🛠️ เครื่องมือที่ใช้
| หน้าที่ | เครื่องมือ |
|---|---|
| CI/CD | GitHub Actions |
| เซิร์ฟเวอร์จริง | DigitalOcean (Ubuntu) |
| Containerization | Docker + Docker Compose |
| Web Server | Nginx |
| การเข้าถึงจาก GitHub | SSH + Secret Key |
📦 ขั้นตอนที่ 1: สร้าง Dockerfile สำหรับ Django
FROM python:3.11-slim
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
🐳 ขั้นตอนที่ 2: สร้าง docker-compose.prod.yml
version: '3.9'
services:
web:
build: .
env_file: .env
volumes:
- .:/app
expose:
- 8000
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
🌐 ขั้นตอนที่ 3: ตั้งค่า Nginx
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
🔐 ขั้นตอนที่ 4: ตั้งค่า SSH ให้ GitHub Actions
- สร้าง SSH Key:
ssh-keygen -t ed25519 -C "your_email@example.com"
- นำ public key ไปใส่ใน
/home/deploy/.ssh/authorized_keysบน VM - นำ private key ไปใส่ใน GitHub Secrets ชื่อว่า:
DO_SSH_PRIVATE_KEY
🤖 ขั้นตอนที่ 5: GitHub Actions Workflow
name: Django CD to DigitalOcean
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DO_SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan your.server.ip >> ~/.ssh/known_hosts
- name: Deploy via SSH
run: |
ssh -i ~/.ssh/id_ed25519 deploy@your.server.ip << 'EOF'
cd /home/deploy/myproject/
git pull origin main
docker compose -f docker-compose.prod.yml down
docker compose -f docker-compose.prod.yml up -d --build
EOF
🧠 อย่าลืมเปลี่ยน
your.server.ipและdeployให้ตรงกับเครื่องของคุณ
🔧 ไฟล์ .env ตัวอย่าง
DJANGO_SECRET_KEY=super-secret-key
DEBUG=False
ALLOWED_HOSTS=yourdomain.com
📁 โครงสร้างไฟล์บนเซิร์ฟเวอร์
/home/deploy/myproject/
├── manage.py
├── myproject/
├── Dockerfile
├── docker-compose.prod.yml
├── .env
├── nginx.conf
✅ ผลลัพธ์ที่ได้
- ทุกครั้งที่ push → ระบบจะ pull, build, restart ให้อัตโนมัติ
- ลดเวลา deploy เหลือเพียงไม่กี่วินาที
- ไม่ต้อง ssh เข้าไปจัดการเองอีกต่อไป
🌟 เคล็ดลับเพิ่มเติม
- เพิ่ม Sentry เพื่อติดตาม Error
- ใช้
systemdหรือsupervisorเพื่อดูแล container - ใช้ Let’s Encrypt + Certbot สำหรับ HTTPS ฟรี
🧠 สรุป
คุณสามารถสร้างระบบ Continuous Delivery สำหรับ Django ด้วยเครื่องมือฟรีและง่ายต่อการใช้งาน ตั้งแต่การพัฒนาไปจนถึงการส่งมอบบน VM จริง ด้วยความมั่นใจและอัตโนมัติเต็มรูปแบบ
Get in Touch with us
Related Posts
- การออกแบบระบบ Cybersecurity Monitoring & Incident Response สมัยใหม่ สถาปัตยกรรมเชิงปฏิบัติ ด้วย Wazuh, SOAR และ Threat Intelligence
- แนวคิดการเขียนโปรแกรมแบบคลาสสิกในยุค AI
- SimpliPOSFlex. POS สำหรับธุรกิจที่อยู่บนความจริงของหน้างาน
- แนวคิดการเขียนโปรแกรมแบบคลาสสิก: บทเรียนที่เรายังได้เรียนรู้จาก Kernighan & Pike
- ก่อนจะเริ่มเขียนโค้ด: 5 คำถามที่เราถามลูกค้าทุกครั้ง
- ทำไมระบบที่ทำกำไรได้ อาจไม่มีคุณค่าที่แท้จริง
- โลกของเธอ
- สร้างระบบ Automation ที่เชื่อถือได้ด้วย Temporal + Local LLM + Robot Framework แนวทางสำหรับองค์กรไทยที่ต้องการ Automate งานบัญชี-ERP อย่างปลอดภัย
- RPA + AI: ทำไมระบบอัตโนมัติถึงล้มเหลว หากไม่มี “ความฉลาด” และการควบคุมที่ดี
- การจำลองความขัดแย้งชายแดนและ Proxy War
- แก้ “การค้นหาและการเข้าถึง” ก่อน ก้าวแรกที่เร็วที่สุดในการฟื้นคุณค่าห้องสมุดมหาวิทยาลัยในยุคดิจิทัล
- เรากำลังสร้างแพลตฟอร์มใหม่ สำหรับโรงงานที่ขายเศษวัสดุ และโรงงานรีไซเคิลในประเทศไทย
- แนวทางพัฒนา MES ด้วย Python สำหรับโรงงานไทย
- MES vs ERP vs SCADA: บทบาทและขอบเขตที่โรงงานไทยควรรู้
- ทำไมการเรียนเขียนโปรแกรมถึง “เจ็บปวด” — และเราจะแก้มันอย่างไร
- องค์กรควรเลือก AI แบบ GPT หรือ AI แบบ Gemini?
- ตัวอย่างการใช้งานจริงที่ GPT-5.2 เหนือกว่า GPT-5.1 อย่างชัดเจน
- ChatGPT 5.2 vs 5.1 — อธิบายความแตกต่างด้วยอุปมาเข้าใจง่าย
- ทำไมธุรกิจที่กำลังเติบโต มัก “โตเกิน” ซอฟต์แวร์สำเร็จรูปในที่สุด และบริษัทที่ประสบความสำเร็จเขาจัดการอย่างไร
- Computer Vision บน Edge Device และสภาพแวดล้อมทรัพยากรจำกัด: ความท้าทายและโอกาสสำหรับไทย













