Django

Django

Django adalah web framework berbasis Python yang bersifat open-source, dirancang untuk memudahkan pengembangan aplikasi web yang cepat, aman, dan skalabel. Django menawarkan pendekatan “batteries included,” menyediakan berbagai fitur bawaan seperti ORM (Object-Relational Mapping), sistem autentikasi, panel admin, routing URL, dan sistem template yang kuat. Framework ini mengikuti pola arsitektur Model-View-Template (MVT), memisahkan logika bisnis, data, dan presentasi untuk mempermudah pengelolaan kode. Django terkenal karena keamanannya, mendukung praktik terbaik untuk melindungi aplikasi dari ancaman seperti SQL injection, XSS, dan CSRF. Framework ini cocok untuk membangun berbagai jenis aplikasi, mulai dari website sederhana hingga platform kompleks seperti e-commerce dan media sosial.

1. Persyaratan Sistem

System requirements untuk Django 4.2:

  • Python 3.8-3.12
  • Database PostgreSQL, MySQL, MariaDB, Oracle, atau SQLite
  • Web server Nginx atau Apache dengan mod_wsgi
  • Application server uWSGi atau Gunicorn
  • Virtual environment virtualenv atau venv

Sebelum memulai deploy, siapkan:

  • VPS atau server dengan OS Ubuntu 24.04
  • Akses SSH ke server
  • Domain yang sudah diarahkan ke server

2. Persiapan Server

Update sistem

sudo apt update
sudo apt upgrade -y

Install dependensi umum Python

sudo apt install python3 python3-pip python3-dev python3-venv libpq-dev -y

Install PostgreSQL

sudo apt install postgresql postgresql-contrib -y

Install Nginx

sudo apt install nginx -y

Install certbot

sudo apt install certbot python3-certbot-nginx -y

3. Buat Database

Login ke PostgreSQL

sudo -u postgres psql

Buat database dan user

CREATE DATABASE db_django;
CREATE USER user_django WITH PASSWORD 'rahasia';
ALTER DATABASE db_django OWNER TO user_django;
ALTER ROLE user_django SET client_encoding TO 'utf8';
ALTER ROLE user_django SET default_transaction_isolation TO 'read committed';
ALTER ROLE user_django SET timezone TO 'Asia/Jakarta';
GRANT ALL PRIVILEGES ON DATABASE db_django TO user_django;
\c db_django
GRANT ALL ON SCHEMA public TO user_django;
\q

Buka file konfigurasi autentikasi PostgreSQL

sudo nano /etc/postgresql/16/main/pg_hba.conf

Tambahkan

local   db_django     user_django     md5

Restart PostgreSQL

sudo systemctl restart postgresql

4. Install Django

Buat direktori untuk Django

mkdir contoh.com
cd contoh.com

Buat virtual environment dan aktifkan

python3 -m venv venv
source venv/bin/activate

Install Django 4.2.* dan requirements lainnya

pip install 'Django==4.2.*' 'psycopg[binary]' gunicorn

Buat project

django-admin startproject project .

Konfigurasi settings.py

Buka file konfigurasi project/settings.py

nano project/settings.py

Atur ALLOWED_HOST, hostname untuk akses Django (IP localhost, IP Public, domain)

ALLOWED_HOSTS = ['127.0.0.1', '170.64.201.33', 'contoh.com']

Atur koneksi database

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'db_django',
        'USER': 'user_django',
        'PASSWORD': 'rahasia',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

Atur time zone dan tambah static root

TIME_ZONE = 'Asia/Jakarta'

import os
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Collectstatic dan Migrate Jalankan collectstatic

python manage.py collectstatic 

Migrate database

python manage.py makemigrations
python manage.py migrate

Buat superuser

python manage.py createsuperuser

Uji coba development server

python manage.py runserver 0.0.0.0:8000

Akses http://IP-server:8000/admin, uji coba login.

Jika tidak ada masalah lanjut ke tahap deployment.

5. Deployment

Konfigurasi Gunicorn

Buat file konfigurasi service Gunicorn

sudo nano /etc/systemd/system/gunicorn_contoh.service

Masukkan konfigurasinya

[Unit]
Description=Gunicorn Django contoh.com
After=network.target

[Service]
User=user
Group=www-data
WorkingDirectory=/home/user/contoh.com
ExecStart=/home/user/contoh.com/venv/bin/gunicorn \
  --access-logfile log/gunicorn_access.log \
  --error-logfile log/gunicorn_error.log \
  --workers 3 \
  --bind unix:/home/user/contoh.com/contoh.sock project.wsgi:application

[Install]
WantedBy=multi-user.target

Buat direktori untuk log Gunicorn

mkdir -p ~/contoh.com/log

Masukkan user www-data ke group $USER

sudo usermod -aG $USER www-data

Ubah ownership dan permission direktori Django

sudo chown -R $USER:www-data ~/contoh.com
sudo chmod -R 775 ~/contoh.com

Jalankan dan aktifkan service

sudo systemctl daemon-reload
sudo systemctl start gunicorn_contoh
sudo systemctl enable gunicorn_contoh
sudo systemctl status gunicorn_contoh

Konfigurasi Nginx

Buat file konfigurasi untuk reverse proxy

sudo nano /etc/nginx/sites-available/contoh.com.conf

Masukkan konfigurasinya

server {
    listen 80;
    server_name www.contoh.com contoh.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user/contoh.com;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/user/contoh.com/contoh.sock;
    }

    access_log /home/user/contoh.com/log/nginx_access.log;
    error_log /home/user/contoh.com/log/nginx_error.log;        
}

Aktifkan konfigurasi dan restart Nginx

sudo ln -s /etc/nginx/sites-available/contoh.com.conf /etc/nginx/sites-enabled
sudo systemctl restart nginx

Install SSL

sudo certbot --non-interactive \
    -m [email protected] \
    --agree-tos \
    --no-eff-email \
    --nginx -d contoh.com -d www.contoh.com \
    --redirect

6. Pengujian

Akses halaman depan https://www.contoh.com dan https://www.contoh.com/admin untuk dashboard admin.

  • CSS, JS, dan images harus bisa di-load
  • Bisa login ke dashboard

Jika tidak ada masalah, nonaktifkan DEBUG Buka file settings.py

nano project/settings.py

Atur DEBUG menjadi False

DEBUG = False

Restart gunicorn

sudo systemctl restart gunicorn_contoh

Django deployment has been completed and is ready to use.