สร้างระบบ 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
- พัฒนาโปรแกรมสแกนหุ้น Breakout หลายตลาดด้วย Python
- Agentic AI และ MCP Servers: ก้าวต่อไปของระบบอัตโนมัติอัจฉริยะ
- การใช้ DevOps กับระบบอีคอมเมิร์ซ Django + DRF + Docker + PostgreSQL
- วิธีที่ AI ช่วยแก้ปัญหาใน Agile Development ได้จริง
- การเชื่อมต่อ TAK และ Wazuh เพื่อการรับรู้ภัยคุกคามแบบเรียลไทม์
- การขยายระบบ Wazuh สำหรับการมอนิเตอร์ความปลอดภัยเครือข่ายหลายสาขา
- ทำไมโครงการ ERP ถึงล้มเหลว — และเราจะหลีกเลี่ยงได้อย่างไร
- วิธีสร้างคอมมูนิตี้ที่แข็งแกร่งด้วยเทคโนโลยี
- ปัญญาประดิษฐ์ (AI) กับสวนสัตว์ยุคใหม่: ทำให้การเรียนรู้สนุก ฉลาด และน่าจดจำ
- วิธีเลือกโรงงานรับซื้อเศษวัสดุรีไซเคิลสำหรับโรงงานอุตสาหกรรม
- เข้าใจเทคโนโลยีฐานข้อมูลยุคใหม่ — และวิธีเลือกให้เหมาะกับงานของคุณ
- อนาคตอยู่ที่ขอบเครือข่าย — เข้าใจ Edge & Distributed Computing ในปี 2025
- NVIDIA กับสองคลื่นใหญ่: จากคริปโตสู่ AI — ศิลปะแห่งการโต้คลื่นในฟองสบู่
- จากการตรวจเช็กด้วยมือสู่การบำรุงรักษาอากาศยานด้วย AI
- ระบบสร้างใบรับรองการตรวจสอบอัตโนมัติจากเทมเพลต Excel
- SimpliPOS (COFF POS): ระบบขายหน้าร้านสำหรับคาเฟ่ที่ใช้งานง่ายและครบฟังก์ชัน
- สร้างเว็บแอป Local-First ด้วย Alpine.js — เร็ว ปลอดภัย และไม่ต้องใช้เซิร์ฟเวอร์
- 🌱 Carbon Footprint Calculator (Recycling) — เครื่องมือคำนวณคาร์บอนสำหรับอุตสาหกรรมรีไซเคิล
- Recycle Factory Tools — เครื่องมือช่วยบันทึกงานรีไซเคิลให้ง่ายขึ้น
- โค้ชท่าวิ่ง — เมโทรนอมจังหวะก้าว เคาะจังหวะ จับเวลาท่าฝึก เช็คลิสต์ท่าทาง













