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.