Django adalah kerangka kerja pengembangan web sumber terbuka dan gratis yang ditulis dengan Python. Ini digunakan untuk mengembangkan aplikasi Python yang kompleks dan berbasis database. Muncul dengan satu set skrip Python untuk membuat proyek Python. Itu dapat dijalankan pada sistem operasi apa pun yang dapat menjalankan Python termasuk, Windows, macOS, Linux/Unix, dan Solaris. Ini membantu pengembang untuk menulis lebih sedikit kode dan membuat situs web baru dalam waktu singkat.
Dalam tutorial ini, saya akan menjelaskan cara mengatur Django di lingkungan virtual Python menggunakan database PostgreSQL pada Debian 11. Kami kemudian akan menginstal dan mengkonfigurasi Nginx sebagai proxy terbalik untuk Django.
Prasyarat
- Server yang menjalankan Debian 11.
- Nama domain valid yang ditunjukkan dengan IP server Anda.
- Kata sandi root dikonfigurasi di server.
Memulai
Sebelum memulai, sebaiknya perbarui paket sistem Anda ke versi terbaru. Anda dapat melakukannya dengan menggunakan perintah berikut:
apt-get update -y
Setelah semua paket diperbarui, instal alat Python dan paket Nginx lainnya dengan perintah berikut:
apt-get install python3-pip python3-dev libpq-dev curl nginx -y
Setelah semua paket yang diperlukan terinstal, Anda dapat melanjutkan ke langkah berikutnya.
Instal Server Database PostgreSQL
Di sini, kita akan menggunakan PostgreSQL sebagai backend database. Jadi mari kita instal menggunakan perintah berikut:
apt-get install postgresql postgresql-contrib -y
Setelah PostgreSQL terinstal, sambungkan ke shell PostgreSQL dengan perintah berikut:
su - postgres
psql
Selanjutnya, buat database dan pengguna untuk Django dengan perintah berikut:
CREATE DATABASE django;
CREATE USER django WITH PASSWORD 'password';
Selanjutnya, berikan beberapa peran yang diperlukan dengan perintah berikut:
ALTER ROLE django SET client_encoding TO 'utf8';
ALTER ROLE django SET default_transaction_isolation TO 'read committed';
ALTER ROLE django SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE django TO django;
Selanjutnya, keluar dari shell PostgreSQL menggunakan perintah berikut:
\q
exit
Pada titik ini, database PostgreSQL siap untuk Django. Sekarang Anda dapat melanjutkan ke langkah berikutnya.
Buat Lingkungan Virtual Python
Selanjutnya, Anda perlu membuat lingkungan virtual Python untuk membuat proyek Django.
Pertama, upgrade paket PIP ke versi terbaru menggunakan perintah berikut:
pip3 install --upgrade pip
Selanjutnya, verifikasi versi PIP menggunakan perintah berikut:
pip --version
Contoh keluaran:
pip 21.2.4 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
Selanjutnya, instal paket lingkungan Virtual menggunakan perintah berikut:
pip3 install virtualenv
Selanjutnya, buat direktori untuk proyek Django dan buat lingkungan virtual Django:
mkdir ~/djangoapp
cd ~/djangoapp
virtualenv djangoenv
Selanjutnya, aktifkan lingkungan virtual Django menggunakan perintah di bawah ini:
source djangoenv/bin/activate
Selanjutnya, instal Django, Gunicorn, dan paket lainnya menggunakan perintah berikut:
pip install django gunicorn psycopg2-binary
Pada titik ini, Django dipasang di lingkungan virtual Python. Sekarang, Anda dapat melanjutkan ke langkah berikutnya.
Instal dan Konfigurasi Django
Django menyediakan django-admin.py skrip untuk membuat proyek. Anda dapat menjalankan perintah berikut untuk membuat proyek Django:
django-admin.py startproject djangoapp ~/djangoapp
Selanjutnya, Anda perlu mengedit settings.py dan menentukan pengaturan basis data Anda:
nano ~/djangoapp/djangoapp/settings.py
Ubah baris berikut dengan nama domain Anda:
ALLOWED_HOSTS = ['django.example.com', 'localhost']
Batalkan komentar pada backend database default dan tambahkan pengaturan database PostgreSQL:
#DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } #} DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'django', 'USER': 'django', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } }
Tambahkan baris berikut di akhir file:
STATIC_URL = '/static/' import os STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Simpan dan tutup file kemudian migrasikan skema database awal ke database PostgreSQL:
./manage.py makemigrations
./manage.py migrate
Contoh keluaranL:
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 auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK
Selanjutnya, buat akun superuser untuk Django dengan perintah berikut:
./manage.py createsuperuser
Atur nama pengguna dan kata sandi admin Anda seperti yang ditunjukkan di bawah ini:
Username (leave blank to use 'root'): dadmin Email address: [email protected] Password: Password (again): Superuser created successfully.
Selanjutnya, kumpulkan semua konten statis ke dalam direktori:
./manage.py collectstatic
Jalankan Server Pengembangan Django
Pada titik ini, Django diinstal dan dikonfigurasi. Anda sekarang dapat memulai server pengembangan Django menggunakan perintah berikut:
./manage.py runserver 0.0.0.0:8000
Jika semuanya baik-baik saja, Anda akan mendapatkan output berikut:
Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). August 27, 2021 - 10:02:05 Django version 3.2.6, using settings 'djangoapp.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
Sekarang, buka browser web Anda dan akses proyek Django Anda menggunakan URL http://django.example.com:8000/admin/ . Anda akan diarahkan ke halaman login Django:
Berikan nama pengguna, kata sandi admin Anda, dan klik Masuk . Anda akan melihat dasbor Django pada halaman berikut:
Sekarang, kembali ke terminal Anda dan tekan CTRL + C untuk menghentikan server pengembangan Django.
Verifikasi Django dengan Gunicorn
Selanjutnya, Anda juga perlu menguji apakah Gunicorn dapat melayani Django atau tidak. Anda dapat memulai Django menggunakan server Gunicorn dengan perintah berikut:
gunicorn --bind 0.0.0.0:8000 djangoapp.wsgi
Jika semuanya baik-baik saja, Anda akan mendapatkan output berikut:
[2021-08-27 10:04:22 +0000] [47383] [INFO] Starting gunicorn 20.1.0 [2021-08-27 10:04:22 +0000] [47383] [INFO] Listening at: http://0.0.0.0:8000 (47383) [2021-08-27 10:04:22 +0000] [47383] [INFO] Using worker: sync [2021-08-27 10:04:22 +0000] [47384] [INFO] Booting worker with pid: 47384
Tekan CTRL + C untuk menghentikan server Gunicorn.
Selanjutnya, nonaktifkan dari lingkungan virtual Python dengan perintah berikut:
deactivate
Buat File Layanan Systemd untuk Gunicorn
Selanjutnya, Anda perlu membuat file layanan systemd untuk Gunicorn untuk memulai dan menghentikan server aplikasi Django.
Anda dapat membuat Gunicorn dengan perintah berikut:
nano /etc/systemd/system/gunicorn.socket
Tambahkan baris berikut:
[Unit] Description=gunicorn socket [Socket] ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target
Simpan dan tutup file kemudian buat file layanan untuk Gunicorn:
nano /etc/systemd/system/gunicorn.service
Tambahkan baris berikut yang cocok dengan jalur proyek Django Anda:
[Unit] Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=root Group=www-data WorkingDirectory=/root/djangoapp ExecStart=/root/djangoapp/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock djangoapp.wsgi:application [Install] WantedBy=multi-user.target
Simpan dan tutup file kemudian atur izin yang tepat ke direktori proyek Django:
chown -R www-data:root ~/djangoapp
Selanjutnya, muat ulang daemon systemd dengan perintah berikut:
systemctl daemon-reload
Selanjutnya, mulai layanan Gunicorn dan aktifkan untuk memulai saat reboot sistem:
systemctl start gunicorn.socket
systemctl enable gunicorn.socket
Selanjutnya, periksa status Gunicorn menggunakan perintah di bawah ini:
systemctl status gunicorn.socket
Anda akan mendapatkan output berikut:
? gunicorn.socket - gunicorn socket Loaded: loaded (/etc/systemd/system/gunicorn.socket; disabled; vendor preset: enabled) Active: active (listening) since Fri 2021-08-27 10:05:46 UTC; 6s ago Triggers: ? gunicorn.service Listen: /run/gunicorn.sock (Stream) CGroup: /system.slice/gunicorn.socket Aug 27 10:05:46 debian11 systemd[1]: Listening on gunicorn socket.
Konfigurasikan Nginx sebagai Proxy Terbalik Untuk Django
Selanjutnya, Anda perlu mengonfigurasi Nginx sebagai proxy terbalik untuk melayani Django.
Untuk melakukannya, buat file konfigurasi Nginx:
nano /etc/nginx/conf.d/django.conf
Tambahkan baris berikut:
server { listen 80; server_name django.example.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /root/djangoapp; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }
Simpan dan tutup file kemudian verifikasi Nginx untuk kesalahan konfigurasi apa pun:
nginx -t
Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Terakhir, restart layanan Nginx untuk menerapkan perubahan:
systemctl restart nginx
Untuk memeriksa status Nginx, jalankan:
systemctl status nginx
Contoh keluaran:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2021-08-27 10:06:59 UTC; 6s ago Docs: man:nginx(8) Process: 47494 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 47495 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 47496 (nginx) Tasks: 2 (limit: 2341) Memory: 2.5M CPU: 49ms CGroup: /system.slice/nginx.service ??47496 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??47497 nginx: worker process Aug 27 10:06:59 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server... Aug 27 10:06:59 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Aug 27 10:06:59 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.
Sekarang, Anda dapat mengakses aplikasi Django menggunakan URL http://django.example.com/admin . Anda juga dapat mengakses aplikasi Django menggunakan URL http://django.example.com/ .
Kesimpulan
Selamat! anda telah berhasil menginstal aplikasi Django dengan Gunicorn dan Nginx sebagai proxy terbalik. Anda sekarang dapat mulai menyebarkan aplikasi Python Anda menggunakan kerangka kerja Django.