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:
Anda juga dapat mengakses admin interface Django menggunakan URL http://server-ip:8000/admin. Anda akan melihat halaman berikut:
Berikan nama pengguna admin, kata sandi, dan klik tombol Log in. Anda akan melihat halaman berikut:
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 = /favicon.ico { 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.