Django adalah high-level web framework yang free dan open-source dan digunakan untuk mengembangkan Aplikasi Web Python. Django datang dengan seperangkat alat yang membantu Anda untuk membangun aplikasi web yang aman dan scalable. Tujuan utamanya adalah untuk memudahkan pembuatan aplikasi yang kompleks dan menjaga struktur internal.

Dalam tutorial ini, kita akan belajar cara menginstal Django dan mengkonfigurasi Nginx sebagai reverse proxy untuk Django di CentOS 8.

Prasyarat

  • Server dengan sistem operasi CentOS 8.
  • Masuk sebagai root atau user dengan hak sudo

Instal Paket yang Diperlukan

Django adalah framework berbasis Python, sehingga Anda perlu menginstal Python dan PIP di sistem. Untuk dapat menginstalnya, jalankan perintah berikut:

dnf install python36 python3-pip -y

Setelah kedua paket diinstal, lanjutkan ke langkah berikutnya.

Install Django

Anda dapat install Django dengan perintah PIP seperti yang ditunjukkan di bawah ini:

pip3 install Django

Setelah menginstal Django, periksa versi Django dengan perintah berikut:

django-admin --version

Anda akan melihat versi Django di output berikut:

3.0.3

pada saat penulisan artikel ini, versi Django adalah versi 3.0.3

Membuat Project Django

Pada poin ini, Django telah berhasil diinstal. Sekarang, saatnya membuat aplikasi Django.

Anda dapat membuat aplikasi Django menggunakan perintah django-admin di dalam direktori /opt seperti yang ditunjukkan di bawah ini:

cd /opt
 django-admin startproject djangoproject

Setelah proyek django dibuat, ubah direktori menjadi djangoproject dan migrasikan perubahan dengan perintah berikut:

cd djangoproject
 python3 manage.py migrate

Anda akan mendapatkan output berikut:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

Selanjutnya, Anda perlu membuat akun user admin untuk mengelola proyek Django dengan perintah berikut:

python3 manage.py createsuperuser

Anda akan diminta memberikan nama user, email, dan kata sandi. Anda dapat memberikannya sesuai pilihan Anda seperti yang ditunjukkan di bawah ini:

Username (leave blank to use 'root'): dadmin
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Mulai Aplikasi Django

Secara default, aplikasi Django hanya dapat di akses dari localhost saja, untuk membuat Django terhubung dengan internet, Anda harus mengizinkan Django untuk host eksternal. Anda dapat melakukannya dengan menambahkan IP server Anda di settings.py:

nano /opt/djangoproject/djangoproject/settings.py

Ubah baris berikut:

ALLOWED_HOSTS = ['ip_server_Anda']

Simpan dan tutup file. Kemudian, jalankan aplikasi Django dengan perintah berikut:

cd /opt/djangoproject
 python3 manage.py runserver 0.0.0.0:8000

Anda akan melihat output berikut:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
March 03, 2020 - 02:31:19
Django version 3.0.3, using settings 'djangoproject.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Django application is now started and runs on port 8000. 

Pada poin ini, aplikasi Django sekarang dimulai dan berjalan pada port 8000. Sekarang Anda dapat melanjutkan ke langkah berikutnya.

Konfigurasikan SELinux dan Firewall

Selanjutnya, Anda harus mengizinkan port 8000 dan 80 melalui firewalld. Anda dapat mengizinkan mereka dengan perintah berikut:

firewall-cmd --permanent --add-port=8000/tcp
 firewall-cmd --permanent --add-port=80/tcp
 firewall-cmd --reload

Selanjutnya, konfigurasikan SELinux dengan perintah berikut:

setsebool httpd_can_network_connect on -P

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Akses Aplikasi Django

Anda dapat mengakses aplikasi Django dengan mengunjungi URL http://your-server-ip:8000. Anda akan melihat halaman berikut:

Install Django di CentOS 8

Anda juga dapat mengakses admin interface Django menggunakan URL http://server-ip:8000/admin. Anda akan melihat halaman berikut:

Django Administration di CentOS 8

Berikan nama pengguna admin, kata sandi, dan klik tombol Log in. Anda akan melihat halaman berikut:

halaman web Admin Django

Instal Nginx dan Gunicorn

Di bagian ini, kita akan menginstal Gunicorn untuk membuat dan mengelola layanan Django, dan Nginx untuk melayani aplikasi Django.

Pertama, instal Nginx dengan perintah berikut:

dnf install nginx -y

Selanjutnya, instal Gunicorn menggunakan perintah PIP seperti yang ditunjukkan di bawah ini:

pip3 install gunicorn

Setelah kedua paket diinstal, mulai layanan Nginx dan aktifkan untuk memulai setelah sistem reboot dengan perintah berikut:

systemctl start nginx
 systemctl enable nginx

Selanjutnya, ubah kepemilikan direktori /opt/djangoproject ke Nginx seperti yang ditunjukkan di bawah ini:

chown -R nginx:nginx /opt/djangoproject

Buat File Systemd Service Untuk Django

Selanjutnya, buat file systemd service untuk mengelola layanan Django dengan perintah berikut:

nano /etc/systemd/system/django.service

Tambahkan baris berikut:

[Unit]
Description=django daemon
After=network.target

[Service]
User=nginx
Group=nginx
WorkingDirectory=/opt/djangoproject
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application

[Install]
WantedBy=multi-user.target

Simpan dan tutup file kemudian reload daemon systemd dengan perintah berikut:

systemctl daemon-reload

Selanjutnya, mulai layanan Django dan aktifkan untuk memulai setelah sistem reboot dengan perintah berikut:

systemctl start django
 systemctl enable django

Anda sekarang dapat memeriksa status layanan Django dengan perintah berikut:

systemctl status django

Anda akan melihat output berikut:

? django.service - django daemon
   Loaded: loaded (/etc/systemd/system/django.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-02 22:27:51 UTC; 3min 32s ago
 Main PID: 960 (django)
    Tasks: 4 (limit: 25028)
   Memory: 95.2M
   CGroup: /system.slice/django.service
           ??960 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??964 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??965 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??966 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>

Mar 02 22:27:51 centos8 systemd[1]: Started django daemon.
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Starting django 20.0.4
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Listening at: unix:/opt/djangoproject/djangoproject.sock (960)
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Using worker: sync
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [964] [INFO] Booting worker with pid: 964
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [965] [INFO] Booting worker with pid: 965
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [966] [INFO] Booting worker with pid: 966
h pid: 966

Konfigurasikan Nginx untuk Django

Selanjutnya, mengkonfigurasi Nginx sebagai reverse proxy untuk Django. Untuk melakukannya, buat file konfigurasi Nginx baru dengan perintah berikut:

nano /etc/nginx/conf.d/django.conf

Tambahkan baris berikut:

server {
    listen 80;
    server_name your-server-ip

    location =https://cdn.linuxid.net/favicon.ico?x61338 { access_log off; log_not_found off; }
    location /static/ {
        root /opt/djangoproject;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/opt/djangoproject/djangoproject.sock;
    }
}

Simpan dan tutup file setelah selesai. Kemudian, uji nginx untuk setiap kesalahan sintaks dengan perintah berikut:

nginx -t

Jika tidak ada kesalahan, maka akan muncul output berikut:

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

Selanjutnya, restart layanan Nginx untuk mengimplementasikan perubahan:

systemctl start nginx

Anda juga dapat memverifikasi Nginx dengan perintah berikut:

systemctl status nginx

Anda akan mendapatkan output berikut:

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-02 22:28:13 EST; 4min 14s ago
  Process: 984 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 982 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 980 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 985 (nginx)
    Tasks: 3 (limit: 25028)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??985 nginx: master process /usr/sbin/nginx
           ??986 nginx: worker process
           ??987 nginx: worker process

Mar 02 22:28:12 centos8 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 02 22:28:12 centos8 nginx[982]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Mar 02 22:28:12 centos8 nginx[982]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Mar 02 22:28:13 centos8 systemd[1]: Started The nginx HTTP and reverse proxy server.

Anda sekarang dapat mengakses aplikasi Django menggunakan URL http://alamat_IP_server.

Kesimpulan

Dalam panduan ini, kita belajar cara menginstal Django di CentOS 8. kita juga belajar cara menggunakan Gunicorn untuk membuat dan mengelola layanan Django dan mengonfigurasi Nginx sebagai reverse proxy untuk melayani aplikasi Django.