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 djangoItu -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-pipSekarang kita memiliki pip, mari kita buat lingkungan virtual. Lingkungan virtual membantu menghindari konflik dengan paket Python yang digunakan oleh Linux.
pip3 instal virtualenvcd /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.
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/djangosumber env/bin/aktifkan
pip install django
tutorial proyek awal django-admin
Verifikasi semuanya berfungsi dengan menjalankan:
tutorial cdpython 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:
'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 postgresqlKemudian luncurkan psql, shell database. Secara default, hanya pengguna postgres yang dapat terhubung ke database, jadi pertama-tama kita harus mengautentikasi sebagai pengguna tersebut:
su - postgrespsql
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 -WSaat 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-binaryKalau begitu, mari kita buka /home/django/tutorial/tutorial/settings.py
dan 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/tutorialpython 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 nginxSekarang, 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 huluserver 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/tutorialpython 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 gunicornSelanjutnya, kita dapat memulai gunicorn sebagai berikut:
cd /home/django/tutorialtutorial 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:
- Jika kita menutup sesi SSH, proses gunicorn akan berhenti.
- Jika server reboot, proses gunicorn tidak akan dimulai.
- 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/djangomkdir bin
cd /home/django/bin
sentuh server awal.SH
Di server awal.SH:
cd /home/djangosumber env/bin/aktifkan
tutorial cd
tutorial gunicorn.wsgi
Sekarang Anda dapat menguji skrip:
cd /home/django/binserver 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 gunicornsystemctl mulai gunicorn
Anda seharusnya dapat melihat situs web Anda saat ini.
Kita dapat mematikan gunicorn sebagai berikut:
systemctl stop gunicornDan Anda akan melihat 502 Bad Gateway.
Akhirnya, mari kita periksa siklus boot:
systemctl mulai gunicornnyalakan 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/djangomkdir 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/djangosumber 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 huluserver 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!