Wednesday

18-06-2025 Vol 19

How to Set Up CI/CD for Your Django App Using GitHub Actions and Systemd

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

  1. Pendahuluan: Apa itu CI/CD dan Mengapa Itu Penting?
  2. Prasyarat
  3. Menyiapkan Aplikasi Django Anda
    1. Membuat Proyek Django Baru
    2. Mengatur Lingkungan Virtual
    3. Menginstal Ketergantungan
    4. Konfigurasi Proyek
  4. Membuat Repositori GitHub
  5. Menyiapkan Server
    1. Memprovisikan Server (AWS, DigitalOcean, dll.)
    2. Menginstal Dependensi yang Diperlukan (Python, Pip, Git)
    3. Mengatur Firewall (UFW)
    4. Membuat Pengguna Systemd Khusus
  6. Mengonfigurasi Systemd untuk Aplikasi Django Anda
    1. Membuat File Unit Systemd
    2. Mengaktifkan dan Memulai Layanan Systemd
    3. Mengelola Log dengan Systemd
  7. Menyiapkan GitHub Actions untuk CI/CD
    1. Memahami GitHub Actions
    2. Membuat Alur Kerja CI/CD (.github/workflows/deploy.yml)
    3. Menjelaskan Alur Kerja YAML
    4. Menambahkan Rahasia GitHub
  8. Mengamankan Aplikasi Django Anda
    1. Konfigurasi Keamanan
    2. Menggunakan variabel environment
    3. Mengonfigurasi HTTPS dengan Nginx
  9. Penerapan Otomatis dengan GitHub Actions
  10. Pengujian dan Validasi
    1. Menulis Uji Unit
    2. Menjalankan Pengujian di Alur Kerja CI/CD
  11. Pemantauan dan Pemeliharaan
    1. Pencatatan dan Pemantauan Aplikasi
    2. Mengotomatiskan Pencadangan Database
    3. Update berkala
  12. Pemecahan Masalah Umum
  13. Praktik Terbaik untuk Alur Kerja CI/CD Django
  14. 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 branch main.
  • jobs: deploy: Mendefinisikan pekerjaan bernama deploy.
  • 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 dari requirements.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!

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *