Cara Menyiapkan CI/CD untuk Aplikasi Django Anda Menggunakan GitHub Actions dan Systemd
Pengembangan dan penerapan aplikasi web modern membutuhkan proses yang ramping dan otomatis. Integrasi Berkelanjutan/Pengiriman Berkelanjutan (CI/CD) adalah praktik pengembangan perangkat lunak yang membantu Anda mengotomatiskan proses pembuatan, pengujian, dan penerapan aplikasi. Dalam panduan komprehensif ini, kami akan memandu Anda melalui proses pengaturan alur kerja CI/CD untuk aplikasi Django Anda menggunakan GitHub Actions dan Systemd.
Daftar Isi
- Pendahuluan: Apa itu CI/CD dan Mengapa Itu Penting?
- Prasyarat
- Menyiapkan Aplikasi Django Anda
- Membuat Proyek Django Baru
- Mengatur Lingkungan Virtual
- Menginstal Ketergantungan
- Konfigurasi Proyek
- Membuat Repositori GitHub
- Menyiapkan Server
- Memprovisikan Server (AWS, DigitalOcean, dll.)
- Menginstal Dependensi yang Diperlukan (Python, Pip, Git)
- Mengatur Firewall (UFW)
- Membuat Pengguna Systemd Khusus
- Mengonfigurasi Systemd untuk Aplikasi Django Anda
- Membuat File Unit Systemd
- Mengaktifkan dan Memulai Layanan Systemd
- Mengelola Log dengan Systemd
- Menyiapkan GitHub Actions untuk CI/CD
- Memahami GitHub Actions
- Membuat Alur Kerja CI/CD (
.github/workflows/deploy.yml
) - Menjelaskan Alur Kerja YAML
- Menambahkan Rahasia GitHub
- Mengamankan Aplikasi Django Anda
- Konfigurasi Keamanan
- Menggunakan variabel environment
- Mengonfigurasi HTTPS dengan Nginx
- Penerapan Otomatis dengan GitHub Actions
- Pengujian dan Validasi
- Menulis Uji Unit
- Menjalankan Pengujian di Alur Kerja CI/CD
- Pemantauan dan Pemeliharaan
- Pencatatan dan Pemantauan Aplikasi
- Mengotomatiskan Pencadangan Database
- Update berkala
- Pemecahan Masalah Umum
- Praktik Terbaik untuk Alur Kerja CI/CD Django
- Kesimpulan
1. Pendahuluan: Apa itu CI/CD dan Mengapa Itu Penting?
CI/CD adalah singkatan dari Integrasi Berkelanjutan dan Pengiriman Berkelanjutan (atau Penerapan Berkelanjutan). Ini adalah serangkaian praktik yang mengotomatiskan proses pembuatan, pengujian, dan penerapan aplikasi. Dengan menerapkan CI/CD, tim pengembangan dapat membuat perubahan kode lebih sering dan andal.
Manfaat CI/CD:
- Rilis Lebih Cepat: Otomatisasi mempercepat proses rilis perangkat lunak.
- Kualitas Kode yang Ditingkatkan: Pengujian otomatis membantu mendeteksi bug di awal siklus pengembangan.
- Mengurangi Risiko: Rilis yang lebih kecil dan lebih sering mengurangi risiko yang terkait dengan penerapan perubahan besar.
- Umpan Balik yang Ditingkatkan: Umpan balik yang lebih cepat dari pengujian otomatis membantu pengembang untuk dengan cepat memperbaiki masalah.
- Peningkatan Produktivitas: Otomatisasi memungkinkan pengembang untuk fokus pada penulisan kode, bukan pada tugas-tugas manual.
2. Prasyarat
Sebelum memulai, pastikan Anda memiliki yang berikut ini:
- Akun GitHub: Anda akan memerlukan akun GitHub untuk membuat repositori dan menggunakan GitHub Actions.
- Server: Server yang menjalankan Linux (misalnya, Ubuntu, Debian). Anda dapat menggunakan penyedia cloud seperti AWS, DigitalOcean, atau Linode.
- Pengetahuan Dasar Django: Keakraban dengan pengembangan Django diperlukan.
- Pengetahuan Dasar Linux: Memahami perintah dan konsep Linux sangat membantu.
- Python dan Pip: Python dan Pip (pengelola paket Python) harus diinstal di server Anda.
- Git: Git harus diinstal di server Anda untuk mengkloning repositori GitHub Anda.
3. Menyiapkan Aplikasi Django Anda
Jika Anda sudah memiliki aplikasi Django, Anda dapat melewati bagian ini. Jika tidak, ikuti langkah-langkah ini untuk membuat proyek Django baru.
3.1 Membuat Proyek Django Baru
Buka terminal Anda dan jalankan perintah berikut:
python3 -m venv venv
3.2 Mengatur Lingkungan Virtual
Aktifkan lingkungan virtual:
source venv/bin/activate
3.3 Menginstal Ketergantungan
Instal Django dan ketergantungan lain yang diperlukan:
pip install Django gunicorn psycopg2-binary
3.4 Konfigurasi Proyek
Buat proyek Django baru:
django-admin startproject myproject .
Perhatikan tanda titik (.
) di akhir perintah. Ini akan membuat proyek di direktori saat ini.
Buat aplikasi:
python manage.py startapp myapp
Tambahkan myapp
ke INSTALLED_APPS
di myproject/settings.py
:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # Tambahkan myapp di sini
]
Migrasikan database:
python manage.py migrate
Buat pengguna super:
python manage.py createsuperuser
Jalankan server pengembangan untuk menguji aplikasi Anda:
python manage.py runserver
Buka browser web Anda dan buka http://localhost:8000/
. Anda akan melihat halaman selamat datang Django.
4. Membuat Repositori GitHub
Jika Anda belum melakukannya, buat repositori GitHub baru untuk proyek Anda. Inisialisasi direktori proyek Anda sebagai repositori Git:
git init
git add .
git commit -m "Initial commit"
git remote add origin [URL repositori GitHub Anda]
git push -u origin main
Ganti [URL repositori GitHub Anda]
dengan URL repositori GitHub Anda.
5. Menyiapkan Server
Anda memerlukan server untuk menghosting aplikasi Django Anda. Anda dapat menggunakan penyedia cloud seperti AWS, DigitalOcean, atau Linode. Bagian ini mengasumsikan Anda menggunakan server Ubuntu.
5.1 Memprovisikan Server (AWS, DigitalOcean, dll.)
Pilih penyedia cloud dan buat instans server. Pastikan untuk memilih sistem operasi Ubuntu.
5.2 Menginstal Dependensi yang Diperlukan (Python, Pip, Git)
Terhubung ke server Anda melalui SSH:
ssh user@your_server_ip
Instal Python, Pip, dan Git:
sudo apt update
sudo apt install python3 python3-pip python3-venv git
5.3 Mengatur Firewall (UFW)
Aktifkan firewall dan izinkan lalu lintas SSH, HTTP, dan HTTPS:
sudo ufw allow OpenSSH
sudo ufw allow 8000
sudo ufw enable
Pastikan port yang digunakan sesuai dengan konfigurasi Django anda, dan sesuaikan dengan kebutuhan
5.4 Membuat Pengguna Systemd Khusus
Buat pengguna khusus untuk menjalankan aplikasi Django Anda:
sudo adduser django
Ikuti petunjuk untuk mengatur kata sandi untuk pengguna baru.
6. Mengonfigurasi Systemd untuk Aplikasi Django Anda
Systemd adalah manajer sistem yang digunakan untuk mengelola layanan di sistem Linux. Kami akan menggunakan Systemd untuk menjalankan aplikasi Django Anda sebagai layanan.
6.1 Membuat File Unit Systemd
Buat file unit Systemd untuk aplikasi Django Anda: (pastikan untuk menyesuaikan dengan path anda)
sudo nano /etc/systemd/system/django.service
Tambahkan konten berikut ke file:
[Unit]
Description=Django application
After=network.target
[Service]
User=django
Group=django
WorkingDirectory=/home/django/myproject
ExecStart=/home/django/venv/bin/gunicorn --workers 3 --bind unix:/home/django/myproject/django.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
Pastikan untuk mengganti yang berikut:
/home/django/myproject
dengan direktori proyek Anda./home/django/venv/bin/gunicorn
dengan jalur ke executable Gunicorn Anda.myproject.wsgi:application
dengan jalur ke aplikasi WSGI Anda.
6.2 Mengaktifkan dan Memulai Layanan Systemd
Aktifkan dan mulai layanan Systemd:
sudo systemctl enable django
sudo systemctl start django
6.3 Mengelola Log dengan Systemd
Periksa status layanan Systemd:
sudo systemctl status django
Lihat log layanan Systemd:
sudo journalctl -u django
7. Menyiapkan GitHub Actions untuk CI/CD
GitHub Actions adalah platform otomatisasi CI/CD yang terintegrasi dengan GitHub. Kami akan menggunakan GitHub Actions untuk mengotomatiskan proses pembuatan, pengujian, dan penerapan aplikasi Django Anda.
7.1 Memahami GitHub Actions
GitHub Actions menggunakan alur kerja yang didefinisikan dalam file YAML. Alur kerja berisi satu atau lebih pekerjaan, dan setiap pekerjaan berisi satu atau lebih langkah. Setiap langkah menjalankan perintah atau tindakan.
7.2 Membuat Alur Kerja CI/CD (.github/workflows/deploy.yml
)
Buat direktori .github/workflows
di repositori Anda:
mkdir -p .github/workflows
Buat file alur kerja deploy.yml
di direktori .github/workflows
:
nano .github/workflows/deploy.yml
Tambahkan konten berikut ke file:
name: Deploy Django App
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v3
with:
python-version: 3.9
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run Tests
run: python manage.py test
- name: Deploy to Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /home/django/myproject
git pull origin main
/home/django/venv/bin/python manage.py migrate
/home/django/venv/bin/python manage.py collectstatic --noinput
sudo systemctl restart django
7.3 Menjelaskan Alur Kerja YAML
Mari kita uraikan alur kerja YAML:
name: Deploy Django App
: Nama alur kerja.on: push: branches: [ main ]
: Alur kerja dipicu ketika terjadi push ke branchmain
.jobs: deploy
: Mendefinisikan pekerjaan bernamadeploy
.runs-on: ubuntu-latest
: Pekerjaan berjalan pada runner Ubuntu terbaru.steps
: Daftar langkah yang dijalankan dalam pekerjaan.uses: actions/checkout@v3
: Checkout kode dari repositori.name: Set up Python 3.9
: Mengatur Python 3.9.name: Install Dependencies
: Menginstal dependensi darirequirements.txt
.name: Run Tests
: Menjalankan pengujian.name: Deploy to Server
: Menerapkan ke server menggunakan tindakan SSH.
7.4 Menambahkan Rahasia GitHub
Anda perlu menambahkan rahasia berikut ke repositori GitHub Anda:
SSH_HOST
: Alamat IP server Anda.SSH_USER
: Nama pengguna SSH.SSH_PRIVATE_KEY
: Kunci pribadi SSH.
Untuk menambahkan rahasia, buka repositori GitHub Anda, buka Settings, klik Secrets, dan klik New repository secret. Pastikan anda menggunakan private key dengan aman dan enkripsi.
8. Mengamankan Aplikasi Django Anda
Keamanan sangat penting. Bagian ini membahas beberapa praktik terbaik untuk mengamankan aplikasi Django Anda.
8.1 Konfigurasi Keamanan
Pastikan Anda memiliki konfigurasi keamanan yang kuat di settings.py
Anda:
DEBUG = False
: Jangan pernah aktifkan debug dalam produksi.SECRET_KEY
: Gunakan kunci rahasia yang kuat dan unik.ALLOWED_HOSTS
: Tentukan host yang diizinkan.
8.2 Menggunakan Variabel Lingkungan
Simpan informasi sensitif (misalnya, kunci database, kunci API) di variabel lingkungan. Anda dapat menggunakan pustaka seperti python-dotenv
untuk mengelola variabel lingkungan.
Instal python-dotenv
:
pip install python-dotenv
Buat file .env
di direktori proyek Anda dan tambahkan variabel lingkungan Anda:
DATABASE_URL=postgres://user:password@host:port/database
SECRET_KEY=your_secret_key
Muat variabel lingkungan di settings.py
Anda:
import os
from dotenv import load_dotenv
load_dotenv()
SECRET_KEY = os.environ.get('SECRET_KEY')
DATABASE_URL = os.environ.get('DATABASE_URL')
8.3 Mengonfigurasi HTTPS dengan Nginx
Untuk lalu lintas yang aman, konfigurasikan HTTPS dengan Nginx. Ini termasuk membeli sertifikat SSL/TLS (misalnya, melalui Let’s Encrypt) dan mengonfigurasi Nginx untuk menggunakan sertifikat tersebut.
Contoh konfigurasi Nginx:
server {
listen 80;
server_name your_domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
location /static/ {
root /home/django/myproject;
}
location / {
proxy_pass http://unix:/home/django/myproject/django.sock;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Pastikan anda mengganti your_domain.com
dengan nama domain anda, dan mengkonfigurasi path ke sertifikat SSL/TLS yang benar.
9. Penerapan Otomatis dengan GitHub Actions
Setelah Anda menyiapkan alur kerja CI/CD, setiap kali Anda mendorong perubahan ke cabang main
, GitHub Actions akan secara otomatis membuat, menguji, dan menerapkan aplikasi Anda ke server Anda.
10. Pengujian dan Validasi
Pengujian sangat penting untuk memastikan kualitas aplikasi Anda. Bagian ini membahas tentang menulis dan menjalankan pengujian di alur kerja CI/CD Anda.
10.1 Menulis Uji Unit
Tulis uji unit untuk aplikasi Django Anda. Uji unit harus mencakup berbagai aspek aplikasi Anda, seperti model, tampilan, dan formulir.
Contoh uji unit:
from django.test import TestCase
from .models import MyModel
class MyModelTest(TestCase):
def test_my_model_creation(self):
my_model = MyModel.objects.create(name="Test Model")
self.assertEqual(my_model.name, "Test Model")
10.2 Menjalankan Pengujian di Alur Kerja CI/CD
Tambahkan langkah untuk menjalankan pengujian di alur kerja CI/CD Anda. Contoh:
- name: Run Tests
run: python manage.py test
11. Pemantauan dan Pemeliharaan
Pemantauan dan pemeliharaan penting untuk memastikan aplikasi Anda berjalan dengan lancar. Bagian ini membahas beberapa praktik terbaik untuk pemantauan dan pemeliharaan.
11.1 Pencatatan dan Pemantauan Aplikasi
Gunakan alat pencatatan (misalnya, Sentry, Logstash) untuk memantau aplikasi Anda untuk mengetahui kesalahan dan masalah kinerja. Konfigurasikan pencatatan untuk menangkap pengecualian dan peristiwa penting.
11.2 Mengotomatiskan Pencadangan Database
Otomatiskan pencadangan database reguler untuk mencegah kehilangan data. Anda dapat menggunakan cron job atau alat pencadangan database untuk mengotomatiskan proses ini.
11.3 Update Berkala
Perbarui secara berkala dependensi dan sistem operasi server Anda untuk memperbaiki kerentanan keamanan dan meningkatkan kinerja. Gunakan alat otomatisasi (misalnya, Ansible) untuk mengotomatiskan proses pembaruan.
12. Pemecahan Masalah Umum
Berikut adalah beberapa masalah umum yang mungkin Anda temui dan cara memecahkannya:
- Masalah penerapan: Periksa log GitHub Actions dan log server untuk mengetahui kesalahan.
- Masalah database: Pastikan konfigurasi database Anda sudah benar dan database dapat diakses.
- Masalah server: Periksa status server dan pastikan semua dependensi yang diperlukan terinstal.
- Masalah konfigurasi Systemd: Periksa status layanan Systemd dan log untuk mengetahui kesalahan.
13. Praktik Terbaik untuk Alur Kerja CI/CD Django
Berikut adalah beberapa praktik terbaik untuk alur kerja CI/CD Django:
- Gunakan lingkungan virtual: Selalu gunakan lingkungan virtual untuk mengisolasi dependensi proyek Anda.
- Gunakan kontrol versi: Gunakan Git untuk mengelola kode Anda dan GitHub untuk hosting repositori.
- Otomatiskan pengujian: Tulis uji unit dan jalankan di alur kerja CI/CD Anda.
- Gunakan variabel lingkungan: Simpan informasi sensitif di variabel lingkungan.
- Pantau aplikasi Anda: Gunakan alat pencatatan dan pemantauan untuk memantau aplikasi Anda untuk mengetahui kesalahan dan masalah kinerja.
- Perbarui dependensi secara berkala: Perbarui dependensi dan sistem operasi server Anda secara berkala untuk memperbaiki kerentanan keamanan dan meningkatkan kinerja.
- Gunakan infrastruktur sebagai kode: Gunakan alat seperti Terraform atau CloudFormation untuk mengotomatiskan penyediaan dan konfigurasi infrastruktur Anda.
- Gunakan kontainerisasi: Gunakan Docker untuk mengemas aplikasi Anda dan dependensinya ke dalam kontainer. Ini dapat membantu Anda memastikan bahwa aplikasi Anda berjalan secara konsisten di berbagai lingkungan.
14. Kesimpulan
Menyiapkan alur kerja CI/CD untuk aplikasi Django Anda menggunakan GitHub Actions dan Systemd dapat meningkatkan efisiensi, keandalan, dan kualitas proses pengembangan Anda secara signifikan. Dengan mengotomatiskan proses pembuatan, pengujian, dan penerapan, Anda dapat membuat perubahan kode lebih sering dan andal. Panduan ini telah memberi Anda langkah-langkah dan praktik terbaik yang diperlukan untuk menyiapkan alur kerja CI/CD untuk aplikasi Django Anda. Selamat menerapkan!
“`