Django

Membuat Aplikasi Django di Server Ubuntu

Membuat Aplikasi Django di Server Ubuntu
Django adalah platform umum untuk mengembangkan situs web, aplikasi web, dan API web. Ada banyak keuntungan menggunakan kerangka kerja Django untuk proyek Anda sebagai alat Anda dan jika Anda tidak yakin itu cocok, Anda hanya perlu melihat ke banyak merek nama besar yang menggunakan Django di tumpukannya.

Menyebarkan Django ke lingkungan produksi untuk pertama kalinya bisa menjadi tugas yang menakutkan. Seringkali, pengembang akan meluncurkan instance Linux di cloud untuk lingkungan produksi mereka.

Dalam tutorial ini, kami akan menunjukkan kepada Anda bagaimana meluncurkan Django dalam produksi, menggunakan instance Ubuntu yang baru.

Kami akan menganggap bahwa semua pengeditan Anda selesai di server, dan Anda menjalankan perintah sebagai root.

Untuk tutorial ini, kami menggunakan Ubuntu 18.04.2 LTS

Membuat pengguna untuk proyek

Kami akan membuat pengguna baru, django, untuk menjalankan aplikasi kami. Ini memberikan sedikit manfaat keamanan.

Untuk membuat pengguna baru:

useradd -m django

Itu -m bendera membuat direktori home baru: /home/django.

Menyiapkan lingkungan Python

Hal pertama yang pertama: perbarui daftar paket Anda dengan pembaruan apt-get

Ubuntu 18.04 dikirimkan dengan Python 3.6, tetapi tidak dikirimkan dengan pip, yang Anda perlukan untuk menginstal dependensi Anda.

apt-get install python3-pip

Sekarang kita memiliki pip, mari kita buat lingkungan virtual. Lingkungan virtual membantu menghindari konflik dengan paket Python yang digunakan oleh Linux.

pip3 instal virtualenv
cd /home/django
virtualenv env

Sekarang Anda telah membuat virtual Python 3.6 lingkungan di /home/django/env folder yang dapat diaktifkan dengan perintah berikut: Sekarang kita memiliki pip, mari kita buat lingkungan virtual. Lingkungan virtual membantu menghindari konflik dengan paket Python yang digunakan oleh Linux.

sumber /home/Django/env/bin/activate

Menyiapkan proyek Django

Untuk tutorial ini, kita akan membuat proyek Django sementara. Jika Anda menggunakan kode Anda sendiri, Anda harus mengunggahnya ke server. Kami akan beroperasi di direktori home, /home/django.Menyiapkan proyek Django

Mari kita buat proyek Django:

cd /home/django
sumber env/bin/aktifkan
pip install django
tutorial proyek awal django-admin

Verifikasi semuanya berfungsi dengan menjalankan:

tutorial cd
python mengelola.py runserver 0.0.0.0:80

Instance Ubuntu kami berjalan pada 178.128.229.34 jadi kami akan terhubung ke http://178.128.229.34.Verifikasi semuanya berfungsi dengan menjalankan:

Anda mungkin akan melihat sesuatu seperti ini:

Untuk memperbaikinya, kami akan mengedit /home/django/tutorial/tutorial/settings.py. Temukan DIPERBOLEHKAN_HOSTS = [] dan atur ke:

DIPERBOLEHKAN_HOSTS = [
'178.128.229.34' # ganti ini dengan alamat IP server Anda
atau nama domain yang Anda gunakan untuk terhubung
]

Sekarang mari kembali ke http://178.128.229.34:

Bagus! Kami sedang online!

Menyiapkan PostgreSQL, database

Secara default, Django menggunakan database SQLite3. Sayangnya, SQLite3 tidak mengizinkan penulisan bersamaan. Jika situs web Anda hanya memiliki satu pengguna yang mengedit data, dan pengunjung lainnya hanya membaca halaman, maka ini mungkin tepat. Tetapi jika Anda memiliki banyak orang yang mengedit data secara bersamaan, Anda mungkin ingin menggunakan backend yang berbeda.

Pilihan umum adalah PostgreSQL dan Mysql. Kami akan menggunakan PostgreSQL untuk tutorial ini.

Mulailah dengan menginstal PostgreSQL:

apt-get install postgresql

Kemudian luncurkan psql, shell database. Secara default, hanya pengguna postgres yang dapat terhubung ke database, jadi pertama-tama kita harus mengautentikasi sebagai pengguna tersebut:

su - postgres
psql

Selanjutnya, kita membutuhkan database dan pengguna untuk mengakses database itu:

membuat tutorial basis data;
buat pengguna tutorial_user dengan kata sandi terenkripsi 'tutorial_password';
berikan semua hak istimewa pada tutorial database ke tutorial_user;

Sekarang, ketik exit atau tekan Ctrl-D dua kali: sekali untuk keluar dari psql, dan sekali untuk logout dari shell postgresuser.

Bagus! Sekarang kami memiliki database dan pengaturan pengguna kami. Mari kita verifikasi bahwa kita dapat masuk ke database kita.

Kami akan mencoba membuka shell basis data, kali ini masuk ke basis data yang kami buat dengan pengguna yang kami buat:

psql -Ututorial_user -dtutorial -h127.0.0.1 -W

Saat diminta, masukkan kata sandi yang kami buat: tutorial_password.

Jika Anda melihat shell database, Anda telah berhasil. Jika Anda melihat kesalahan, Anda harus kembali dan mencari tahu apa yang salah.

Menghubungkan Django ke database

Untuk menghubungkan Django ke database, pertama-tama kita perlu menginstal adaptor Python PostgreSQL:

pip install psycopg2-binary

Kalau begitu, mari kita buka /home/django/tutorial/tutorial/settings.pydan konfigurasikan koneksi.

Temukan koneksi database Anda saat ini; jika Anda tidak mengubahnya, mungkin terlihat seperti ini:

DATABASES =
'bawaan':
'MESIN': 'django.db.backend.sqlite3',
'NAMA': os.jalan.bergabung (BASE_DIR, 'db.sqlite3'),

Untuk terhubung ke PostgreSQL, kami akan menggantinya dengan yang berikut:

DATABASES =
'bawaan':
'MESIN': 'django.db.backend.postgresql_psycopg2',
'NAME': 'tutorial',
'USER': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'PEMASARAN': '127.0.0.1',
'PELABUHAN': '5432',

Mari kita uji koneksinya:

cd /home/django/tutorial
python mengelola.py runserver 0.0.0.0:80

Anda seharusnya dapat mengunjungi situs web Anda lagi (untuk kami di http://178.128.229.34/, tetapi ganti dengan IP atau nama host Anda).

Jika semuanya baik-baik saja, kita bisa melanjutkan.

Menyiapkan nginx, server web

Saat kamu berlari python mengelola.py runserver, Anda menggunakan server pengembangan Django. Ini bagus untuk pengembangan lokal, tetapi seperti halnya SQLite3, ini tidak terlalu cocok untuk produksi.

Pilihan umum untuk server web produksi adalah nginx dan Apache. Untuk tutorial ini, kita akan menggunakan nginx.

Instal nginx menggunakan yang berikut ini:

apt-get install nginx

Sekarang, jika semuanya telah bekerja dengan baik, nginx harus berjalan pada port 80. Silakan dan periksa situs web Anda; Anda harus melihat:

Bagus, jadi nginx aktif dan berjalan! Selanjutnya kita perlu mengonfigurasinya untuk berkomunikasi dengan Django. Buka file konfigurasi nginx, yang terletak di /etc/nginx/sites-available/default. Mari kita ganti file dengan yang berikut ini:

django hulu
server 127.0.0.1:8000;

server
mendengarkan 80;
lokasi /
try_files $uri @send_to_django;

lokasi @send_to_django
proxy_set_header Host $http_host;
proxy_redirect mati;
proxy_pass http://django;

Uji file konfigurasi dengan menjalankan nginx -t. Jika semuanya baik-baik saja, kita dapat memuat ulang dengan menjalankan nginx -s reload.

Sekarang, jika Anda mengunjungi situs Anda, Anda akan melihat yang berikut:

Setiap kali Anda melihat ini, itu berarti nginx tidak dapat meneruskan permintaan ke proses upstream. Saat ini, ini karena mencoba meneruskan permintaan ke 127.0.0.1:8000 tetapi tidak ada proses mendengarkan di alamat itu.

Mari kita mulai server pengembangan Django dan coba lagi:

cd /home/django/tutorial
python mengelola.py runserver 127.0.0.1:8000

dan kunjungi lagi situs web Anda your. Anda akan melihat aplikasi Django Anda.

Memasang Django di Gunicorn

Ingat, kami tidak ingin menggunakan server pengembangan Django kami dalam produksi. Sebagai gantinya, kami akan menggunakan server Web Server Gateway Interface (WSGI) untuk menjalankan Django. Nginx akan meneruskan permintaan ke server WSGI, yang menjalankan Django.

Pilihan umum untuk server WSGI adalah Gunicorn dan uWSGI. Untuk tutorial ini kita akan menggunakan Gunicorn.

Mari kita instal Gunicorn:

pip install gunicorn

Selanjutnya, kita dapat memulai gunicorn sebagai berikut:

cd /home/django/tutorial
tutorial gunicorn.wsgi

Sekarang Anda seharusnya dapat mengunjungi situs web Anda dan melihat aplikasi Anda berjalan dengan benar.

Menjalankan Gunicorn sebagai layanan

Ada beberapa masalah dengan menjalankan gunicorn seperti ini:

  1. Jika kita menutup sesi SSH, proses gunicorn akan berhenti.
  2. Jika server reboot, proses gunicorn tidak akan dimulai.
  3. Prosesnya berjalan sebagai root. Jika peretas menemukan eksploitasi dalam kode aplikasi kami, mereka akan dapat menjalankan perintah sebagai root. Kami tidak menginginkan ini; tapi itulah mengapa kami membuat djangouser!

Untuk mengatasi masalah ini, kami akan menjalankan Gunicorn sebagai layanan systemd.

cd /home/django
mkdir bin
cd /home/django/bin
sentuh server awal.SH

Di server awal.SH:

cd /home/django
sumber env/bin/aktifkan
tutorial cd
tutorial gunicorn.wsgi

Sekarang Anda dapat menguji skrip:

cd /home/django/bin
server awal bash.SH
# kunjungi situs web Anda, itu harus berjalan

Sekarang kami membuat layanan systemd untuk Gunicorn. Buat /etc/systemd/system/gunicorn.layanan sebagai berikut:

[Satuan]
Deskripsi=Gunicorn
Setelah = jaringan.target
[Layanan]
Jenis = sederhana
Pengguna=django
ExecStart=/home/Django/bin/start-server.SH
Mulai ulang = saat gagal
[Install]
WantedBy=multi-pengguna.target

Sekarang, mari aktifkan layanan & mulai

systemctl aktifkan gunicorn
systemctl mulai gunicorn

Anda seharusnya dapat melihat situs web Anda saat ini.

Kita dapat mematikan gunicorn sebagai berikut:

systemctl stop gunicorn

Dan Anda akan melihat 502 Bad Gateway.

Akhirnya, mari kita periksa siklus boot:

systemctl mulai gunicorn
nyalakan ulang

Ketika mesin Anda kembali online, Anda akan melihat situs web Anda sudah aktif.

File statis

Jika Anda mengunjungi panel admin Django di situs web Anda di /admin/ (bagi kami, ini adalah http://178.128.229.34/admin/), Anda akan melihat file statis tidak dimuat dengan benar.

Kita perlu membuat folder baru untuk file statis:

cd /home/django
mkdir statis

Kemudian, kami memberi tahu Django bahwa di situlah ia harus meletakkan file statis dengan mengedit /home/django/tutorial/tutorial/settings.py, dan menambahkan:

STATIC_ROOT = '/home/django/static/'

Sekarang kita dapat mengumpulkan file statis:

cd /home/django
sumber env/bin/aktifkan
tutorial cd
python mengelola.py collectstatic

Akhirnya, kita perlu memberi tahu nginx untuk menyajikan file statis itu.

Mari buka /etc/nginx/sites-available/default dan tambahkan kode berikut langsung di atas lokasi/ blok Anda:

lokasi /statis/
root /home/django;
try_files $uri =404;

Seluruh file sekarang akan terlihat seperti ini:

django hulu
server 127.0.0.1:8000;

server
mendengarkan 80;
lokasi /statis/
root /home/django;
try_files $uri =404;

lokasi /
try_files $uri @send_to_django;

lokasi @send_to_django
proxy_set_header Host $http_host;
proxy_redirect mati;
proxy_pass http://django;

Kami dapat memuat ulang file menggunakan nginx -s reload

Dan voila! File statis Anda sekarang akan berfungsi sepenuhnya.

Kesimpulan

Pada titik ini, aplikasi Django Anda bekerja dengan benar. Jika Anda memiliki beberapa persyaratan khusus, Anda mungkin perlu menyiapkan cache seperti Redis atau antrian pesan seperti Rabbit MQ. Anda mungkin juga ingin mengatur penerapan berkelanjutan karena prosedur penerapan mungkin memakan waktu cukup lama.

Langkah penting lainnya adalah mengambil langkah-langkah yang tepat untuk mengamankan mesin Ubuntu Anda. Jika tidak, Anda mungkin mendapati server Anda berperilaku tidak semestinya!

Semoga berhasil!

10 Game Teratas untuk Dimainkan di Ubuntu
Platform Windows telah menjadi salah satu platform yang mendominasi untuk bermain game karena persentase besar dari game yang berkembang saat ini untu...
5 Game Arkade Terbaik untuk Linux
Saat ini, komputer adalah mesin serius yang digunakan untuk bermain game. Jika Anda tidak bisa mendapatkan skor tinggi baru, Anda akan tahu apa yang s...
Pertempuran Untuk Wesnoth 1.13.6 Pengembangan Dirilis
Pertempuran Untuk Westnoth 1.13.6 dirilis bulan lalu, adalah rilis pengembangan keenam dalam 1.13.x series dan memberikan sejumlah peningkatan, teruta...