Menyebarkan Django ke persekitaran produksi untuk pertama kalinya boleh menjadi tugas yang menakutkan. Selalunya, pembangun akan melancarkan contoh Linux di awan untuk persekitaran pengeluaran mereka.
Dalam tutorial ini, kami akan menunjukkan kepada anda bagaimana melancarkan Django dalam pengeluaran, menggunakan contoh Ubuntu yang baru.
Kami akan menganggap bahawa semua pengeditan anda dilakukan di pelayan, dan bahawa anda menjalankan perintah sebagai root.
Untuk tutorial ini, kami menggunakan Ubuntu 18.04.2 LTS
Membuat pengguna untuk projek tersebut
Kami akan membuat pengguna baru, django, untuk menjalankan aplikasi kami. Ini memberikan sedikit faedah keselamatan.
Untuk membuat pengguna baru:
useradd -m djangoThe -bendera m
membuat direktori rumah baru: / rumah / django.
Menyiapkan persekitaran Python
Perkara pertama yang pertama: kemas kini senarai pakej anda dengan apt-get kemas kini
Ubuntu 18.04 kapal dengan Python 3.6, tetapi ia tidak dihantar dengan pip, yang anda perlukan untuk memasang pergantungan anda.
apt-get install python3-pipSekarang kita mempunyai pip, mari buat persekitaran maya. Persekitaran maya membantu mengelakkan konflik dengan pakej Python yang digunakan oleh Linux.
pip3 pasang virtualenvcd / rumah / django
virtualenv env
Sekarang anda telah membuat Python 3 maya.6 persekitaran di / rumah / django / env
folder yang boleh diaktifkan dengan perintah berikut: Sekarang kita mempunyai pip, mari kita buat persekitaran maya. Persekitaran maya membantu mengelakkan konflik dengan pakej Python yang digunakan oleh Linux.
Menyiapkan projek Django
Untuk tutorial ini, kami akan membuat projek Django sementara. Sekiranya anda menggunakan kod anda sendiri, anda harus memuat naiknya ke pelayan. Kami akan beroperasi di direktori home, / home / django.Menyiapkan projek Django
Mari buat projek Django:
cd / rumah / djangosumber env / bin / aktifkan
pip pasang django
tutorial django-admin startproject
Sahkan perkara berjalan dengan berjalan:
tutorial cdpython menguruskan.py runerver 0.0.0.0:80
Instance Ubuntu kami berjalan pada 178.128.229.34 jadi kami akan menyambung ke http: // 178.128.229.34.Sahkan semuanya berfungsi dengan menjalankan:
Anda mungkin akan melihat sesuatu seperti ini:
Untuk memperbaikinya, kami akan mengedit / rumah / django / tutorial / tutorial / tetapan.py
. Cari DIBENARKAN_HOSTS = []
dan tetapkannya kepada:
'178.128.229.34 '# ganti ini dengan alamat IP pelayan anda
atau nama domain yang anda gunakan untuk menyambung
]
Sekarang mari kita kembali ke http: // 178.128.229.34:
Hebat! Kami sedang dalam talian!
Menyiapkan PostgreSQL, pangkalan data
Secara lalai, Django menggunakan pangkalan data SQLite3. Malangnya, SQLite3 tidak membenarkan penulisan serentak. Sekiranya laman web anda hanya mempunyai satu pengguna data penyuntingan, dan selebihnya pelawat hanya membaca halaman, maka ini mungkin sesuai. Tetapi jika anda mempunyai banyak orang mengedit data pada masa yang sama, anda mungkin ingin menggunakan backend yang berbeza.
Pilihan biasa adalah PostgreSQL dan Mysql. Kami akan menggunakan PostgreSQL untuk tutorial ini.
Mulakan dengan memasang PostgreSQL:
apt-get pasang postgresqlKemudian lancarkan psql, shell pangkalan data. Secara lalai, hanya pengguna postgres yang dapat menyambung ke pangkalan data sehingga pertama-tama kita harus mengesahkan sebagai pengguna tersebut:
su - postgrespsql
Seterusnya, kami memerlukan pangkalan data dan pengguna untuk mengakses pangkalan data tersebut:
buat tutorial pangkalan data;buat user_user pengguna dengan kata laluan yang dienkripsi 'tutorial_password';
berikan semua keistimewaan pada tutorial pangkalan data kepada tutorial_user;
Sekarang, ketik keluar atau tekan Ctrl-D dua kali: sekali untuk keluar dari psql, dan sekali untuk keluar dari cengkerang postgresuser.
Hebat! Sekarang kami telah menyediakan pangkalan data dan pengguna kami. Mari kita sahkan bahawa kita boleh log masuk ke pangkalan data kita.
Kami akan cuba membuka shell pangkalan data, kali ini log masuk ke pangkalan data yang kami buat dengan pengguna yang kami buat:
psql -Ututorial_user -dtutorial -h127.0.0.1 -WPada arahan, masukkan kata laluan yang kami buat: kata laluan_ tutorial.
Sekiranya anda melihat shell pangkalan data, anda sudah berjaya. Sekiranya anda melihat sebarang kesilapan, anda harus kembali dan mengetahui apa yang salah.
Menghubungkan Django ke pangkalan data
Untuk menyambung Django ke pangkalan data, pertama-tama kita perlu memasang penyesuai Python PostgreSQL:
pip pasang psycopg2-binaryKemudian, mari kita buka / rumah / django / tutorial / tutorial / tetapan.py
dan konfigurasikan sambungannya.
Cari sambungan pangkalan data semasa anda; jika anda tidak mengubahnya, ia mungkin kelihatan seperti ini:
DAPATAN ='lalai':
'ENGINE': 'django.db.bahagian belakang.sqlite3 ',
'NAMA': os.jalan.sertai (BASE_DIR, 'db.sqlite3 '),
Untuk menyambung ke PostgreSQL, kami akan menggantinya dengan yang berikut:
DATABASES ='lalai':
'ENGINE': 'django.db.bahagian belakang.postgresql_psycopg2 ',
'NAMA': 'tutorial',
'PENGGUNA': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'HOST': '127.0.0.1 ',
'PELABUHAN': '5432',
Mari kita uji sambungannya:
cd / home / django / tutorialpython menguruskan.py runerver 0.0.0.0:80
Anda sekali lagi boleh melayari laman web anda (untuk kami di http: // 178.128.229.34 /, tetapi ganti dengan IP atau nama host anda).
Sekiranya semuanya baik, kita boleh teruskan.
Menyiapkan nginx, pelayan web
Semasa anda berlari python menguruskan.pelari py
, anda menggunakan pelayan pembangunan Django. Ini bagus untuk pembangunan tempatan, tetapi seperti SQLite3, ia tidak begitu sesuai untuk pengeluaran.
Pilihan biasa untuk pelayan web pengeluaran adalah nginx dan Apache. Untuk tutorial ini, kami akan menggunakan nginx.
Pasang nginx menggunakan yang berikut:
apt-get install nginxSekarang, jika semuanya berfungsi dengan baik, nginx harus berjalan di port 80. Teruskan dan periksa laman web anda; awak patut lihat:
Hebat, jadi nginx terus berjalan! Seterusnya kita perlu mengkonfigurasinya untuk berkomunikasi dengan Django. Buka fail konfigurasi nginx, yang terdapat di / etc / nginx / sites-available / default. Mari ganti fail dengan yang berikut:
hulu djangopelayan 127.0.0.1: 8000;
pelayan
dengar 80;
lokasi /
cuba_files $ uri @send_to_django;
lokasi @send_to_django
proxy_set_header Host $ http_host;
proksi_redirect dimatikan;
proxy_pass http: // django;
Uji fail konfigurasi dengan menjalankan nginx -t. Sekiranya semuanya baik-baik saja, kita boleh memuat semula dengan menjalankan tambah nilai nginx -s.
Sekarang, jika anda melayari laman web anda, anda akan melihat perkara berikut:
Setiap kali anda melihat ini, ini bermaksud bahawa nginx tidak dapat menyampaikan permintaan tersebut ke proses hulu. Buat masa ini, ini kerana ia ingin menyampaikan permintaan ke 127.0.0.1: 8000 tetapi tidak ada proses mendengar di alamat itu.
Mari mulakan pelayan pengembangan Django dan cuba lagi:
cd / rumah / django / tutorialpython menguruskan.py runerver 127.0.0.1: 8000
dan sekali lagi lawati laman web anda. Anda mesti melihat aplikasi Django anda.
Memasang Django di Gunicorn
Ingat, kami tidak mahu menggunakan pelayan pengembangan Django kami dalam pengeluaran. Sebagai gantinya, kami akan menggunakan pelayan Web Server Gateway Interface (WSGI) untuk menjalankan Django. Nginx akan menyampaikan permintaan tersebut ke pelayan WSGI, yang menjalankan Django.
Pilihan biasa untuk pelayan WSGI adalah Gunicorn dan uWSGI. Untuk tutorial ini kita akan menggunakan Gunicorn.
Mari pasang Gunicorn:
pip pasang gunicornSeterusnya, kita boleh memulakan gunicorn seperti berikut:
cd / rumah / django / tutorialtutorial gunicorn.wsgi
Sekarang anda seharusnya dapat mengunjungi laman web anda dan melihat aplikasi anda berjalan dengan baik.
Menjalankan Gunicorn sebagai perkhidmatan
Terdapat beberapa masalah dengan menjalankan gunicorn seperti ini:
- Sekiranya kita menutup sesi SSH, proses gunicorn akan berhenti.
- Sekiranya pelayan reboot, proses gunicorn tidak akan bermula.
- Proses ini berjalan sebagai root. Sekiranya penggodam menemui eksploitasi dalam kod aplikasi kami, mereka akan dapat menjalankan perintah sebagai root. Kami tidak mahu ini; tapi itulah sebabnya kami mencipta djangouser!
Untuk menyelesaikan masalah ini, kami akan menjalankan Gunicorn sebagai perkhidmatan systemd.
cd / rumah / djangobin mkdir
cd / rumah / django / tong
sentuh mula-pelayan.sh
Dalam pelayan permulaan.sh:
cd / rumah / djangosumber env / bin / aktifkan
tutorial cd
tutorial gunicorn.wsgi
Sekarang anda boleh menguji skripnya:
cd / rumah / django / tongpelayan permulaan bash.sh
# lawati laman web anda, semestinya berjalan
Sekarang kami membuat perkhidmatan systemd untuk Gunicorn. Buat / etc / systemd / system / gunicorn.serviceas mengikuti:
[Unit]Huraian = Gunicorn
Selepas = rangkaian.sasaran
[Perkhidmatan]
Jenis = sederhana
Pengguna = django
ExecStart = / home / django / bin / start-server.sh
Mulakan semula = pada kegagalan
[Pasang]
WantedBy = berbilang pengguna.sasaran
Sekarang, mari aktifkan perkhidmatan & mulakannya
systemctl mengaktifkan gunicornsystemctl mula gunicorn
Anda semestinya dapat melihat laman web anda pada masa ini.
Kita boleh mematikan gunicorn seperti berikut:
systemctl stop gunicornDan anda mesti melihat 502 Bad Gateway.
Akhirnya, mari kita periksa kitaran boot:
systemctl mula gunicornbut semula sekarang
Apabila mesin anda kembali dalam talian, anda akan melihat laman web anda sudah habis.
Fail statik
Sekiranya anda melayari panel pentadbir Django di laman web anda di / admin / (untuk kami, ini adalah http: // 178.128.229.34 / admin /), anda akan melihat fail statik tidak dimuat dengan betul.
Kita perlu membuat folder baru untuk fail statik:
cd / rumah / djangomkdir statik
Kemudian, kami memberitahu Django di mana ia harus meletakkan fail statik dengan mengedit / home / django / tutorial / tutorial / tetapan.py, dan menambah:
STATIC_ROOT = '/ rumah / django / statik /'Sekarang kita dapat mengumpulkan fail statik:
cd / rumah / djangosumber env / bin / aktifkan
tutorial cd
python menguruskan.py collectstatic
Akhirnya, kita perlu memberitahu nginx untuk menyediakan fail statik tersebut.
Mari buka / etc / nginx / sites-available / default dan tambahkan yang berikut tepat di atas lokasi / blok anda:
lokasi / statik /akar / rumah / django;
try_files $ uri = 404;
Seluruh fail kini kelihatan seperti ini:
hulu djangopelayan 127.0.0.1: 8000;
pelayan
dengar 80;
lokasi / statik /
akar / rumah / django;
try_files $ uri = 404;
lokasi /
cuba_files $ uri @send_to_django;
lokasi @send_to_django
proxy_set_header Host $ http_host;
proksi_redirect dimatikan;
proxy_pass http: // django;
Kita boleh memuatkan semula fail menggunakan tambah nilai nginx -s
Dan voila! Fail statik anda sekarang akan berfungsi sepenuhnya.
Kesimpulannya
Pada ketika ini, aplikasi Django anda berfungsi dengan baik. Sekiranya anda mempunyai beberapa syarat khas, anda mungkin perlu menyediakan cache seperti Redis atau barisan mesej seperti Rabbit MQ. Anda mungkin juga ingin mengatur penerapan berterusan kerana prosedur penyebaran mungkin memerlukan beberapa saat.
Langkah penting lain adalah mengambil langkah yang sesuai untuk mengamankan mesin Ubuntu anda. Jika tidak, anda mungkin mendapati pelayan anda tidak berfungsi!
Semoga berjaya!