Cara Deploy Django 3 di Ubuntu 18.04

Sebelumnya saya sudah pernah membahas tentang bagaimana cara install Django 3 di Ubuntu 18.04 dan menjalankannya dengan menggunakan development server. Saya sekarang membahas tentang bagaimana cara deploy Django 3 di Ubuntu 18.04 dan menjalankannya dengan menggunakan Nginx HTTP server dikombinasikan dengan Gunicorn WSGI server.

*0.Persyaratan sistem*

Perangkat lunak yang dibutuhkan yaitu:

· Ubuntu Server 18.04 LTS (IP 216.158.228.175) · Django app · Nginx (HTTP server) · Gunicorn (WSGI server) · Domain (django.getbox.xyz)

Arsitektur Deployment Django

HTTP request dari client (web browser) akan dilayani oleh Nginx, jika request yang diminta adalah script Django (Python) maka Nginx mengirimkan request tersebut (reverse proxy) ke Gunicorn (Green Unicorn – WSGI server). Lalu dari Gunicorn mengakses Django, lalu hasilnya (response) dikirim kembali dari Django->Gunicorn->Nginx->Web Browser.

*1.Install Django app*

Menyiapkan Django app untuk demo, jika sebelumnya sudah memiliki aplikasi Django lewati langkah ini, lanjutkan ke instalasi Gunicorn.

Install pip, virtualenv, dan django.

[INPUT]

1 2 3 4 5 6 7 8 9 sudo apt install python3-pip -y sudo su pip3 install virtualenv exit cd; mkdir mydjango; cd mydjango virtualenv env source env/bin/activate pip install Django==3.0 django-admin startproject myproject .

Konfigurasi project.

[INPUT]

1 vi myproject/settings.py

Ubah opsi ALLOWED_HOSTS dan tambahkan opsi STATIC_ROOT.

[INPUT]

1 2 ALLOWED_HOSTS = [‘django.getbox.xyz’, ‘127.0.0.1’] STATIC_ROOT = os.path.join(BASE_DIR, ‘static/’)

Jalankan collectstatic untuk mengumpulkan semua file static (gambar, css, js).

[INPUT]

1 python manage.py collectstatic

Hasilnya

[INPUT]

1 130 static files copied to ‘/home/musaamin/mydjango/static’.

Mencoba menjalankan dengan development server.

[INPUT]

1 python manage.py runserver

Hasilnya

[INPUT]

1 2 3 4 5 6 7 8 9 10 11 Performing system checks…   System check identified no issues ( silenced).   You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run ‘python manage.py migrate’ to apply them.   January 18, 2020 – 23:44:34 Django version 3.0, using settings ‘myproject.settings’ Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

Tekan CTRL+C untuk menghentikan development server.

*2.Install Gunicorn*

Install gunicorn via pip.

[INPUT]

1 pip install gunicorn

Jalankan Django dengan gunicorn.

[INPUT]

1 gunicorn –bind 127.0.0.1:8000 myproject.wsgi

Hasilnya

[INPUT]

1 2 3 4 [2020-01-18 23:48:07 +0000] [18863] [INFO] Starting gunicorn 20.0.4 [2020-01-18 23:48:07 +0000] [18863] [INFO] Listening at: http://127.0.0.1:8000 (18863) [2020-01-18 23:48:07 +0000] [18863] [INFO] Using worker: sync [2020-01-18 23:48:07 +0000] [18866] [INFO] Booting worker with pid: 18866

Tekan CTRL+C untuk menghentikan gunicorn.

Keluar dari virtual environment.

[INPUT]

1 deactivate

-Membuat Gunicorn service-

Membuat Gunicorn service agar Gunicorn tidak perlu dijalankan secara manual, tetap berjalan di background (daemon), dan secara default aktif saat boot (autostart).

Membuat file konfigurasi service.

[INPUT]

1 sudo vi /etc/systemd/system/mydjango.service

Isinya

[INPUT]

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [Unit] Description=Gunicorn mydjango After=network.target   [Service] User=musaamin Group=www-data WorkingDirectory=/home/musaamin/mydjango ExecStart=/home/musaamin/mydjango/env/bin/gunicorn \   –access-logfile log/gunicorn/mydjango.access.log \   –error-logfile log/gunicorn/mydjango.error.log \   –workers 3 \   –bind unix:/home/musaamin/mydjango/mydjango.sock myproject.wsgi:application   [Install] WantedBy=multi-user.target  

Buat direktori log.

[INPUT]

1 mkdir -p ~/mydjango/log/gunicorn

Jalankan service dan cek statusnya.

[INPUT]

1 2 3 sudo systemctl start mydjango sudo systemctl enable mydjango   sudo systemctl status mydjango  

Hasilnya

[INPUT]

1 2 3 4 5 6 7 8 9 10 11 12 mydjango.service – Gunicorn mydjango    Loaded: loaded (/etc/systemd/system/mydjango.service; disabled; vendor preset: enabled)    Active: active (running) since Mon 2020-01-20 02:11:23 UTC; 53s ago Main PID: 10965 (gunicorn)     Tasks: 4 (limit: 4915)    CGroup: /system.slice/mydjango.service            “”œ””€10965 /home/musaamin/mydjango/env/bin/python3 /home/musaamin/mydjango/env/bin/gunicorn –access-logfile log/gunicorn/mydjango.access.log –error-logfile log/gunicorn/mydjango.error.log –workers 3 –bind unix:/home/musaamin/mydjango/mydjango.sock myproject.wsgi:application            “”œ””€10968 /home/musaamin/mydjango/env/bin/python3 /home/musaamin/mydjango/env/bin/gunicorn –access-logfile log/gunicorn/mydjango.access.log –error-logfile log/gunicorn/mydjango.error.log –workers 3 –bind unix:/home/musaamin/mydjango/mydjango.sock myproject.wsgi:application            “”œ””€10969 /home/musaamin/mydjango/env/bin/python3 /home/musaamin/mydjango/env/bin/gunicorn –access-logfile log/gunicorn/mydjango.access.log –error-logfile log/gunicorn/mydjango.error.log –workers 3 –bind unix:/home/musaamin/mydjango/mydjango.sock myproject.wsgi:application            “””””€10970 /home/musaamin/mydjango/env/bin/python3 /home/musaamin/mydjango/env/bin/gunicorn –access-logfile log/gunicorn/mydjango.access.log –error-logfile log/gunicorn/mydjango.error.log –workers 3 –bind unix:/home/musaamin/mydjango/mydjango.sock myproject.wsgi:application   Jan 20 02:11:23 intrsrv01.getbox.xyz systemd[1]: Started Gunicorn mydjango.

*3.Install Nginx*

Install Nginx web server.

[INPUT]

1 sudo apt install nginx

Membuat server block untuk django.getbox.xyz.

[INPUT]

1 sudo vi /etc/nginx/conf.d/django.getbox.xyz.conf

Isinya.

[INPUT]

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 server {     listen 80;     server_name django.getbox.xyz;       location = /favicon.ico { access_log off; log_not_found off; }     location /static/ {         root /home/musaamin/mydjango;     }       location / {         include proxy_params;         proxy_pass http://unix:/home/musaamin/mydjango/mydjango.sock;     }     access_log /var/log/nginx/django.getbox.xyz.access.log;   error_log /var/log/nginx/django.getbox.xyz.error.log warn; }

Test konfigurasi Nginx.

[INPUT]

1 sudo nginx -t

Pesan yang ditampilkan jika tidak ada kesalahan pada konfigurasi Nginx.

[INPUT]

1 2 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

Restart Nginx.

[INPUT]

1 2 sudo systemctl restart nginx sudo systemctl status nginx

*4.Pengujian*

Browsing domain aplikasi Django.

Django Default Page

Selamat mencoba 🙂

Leave a Reply

Your email address will not be published.