Django

Membuat Aplikasi Django di Pelayan Ubuntu

Membuat Aplikasi Django di Pelayan Ubuntu
Django adalah platform umum untuk mengembangkan laman web, aplikasi web dan API web. Terdapat banyak kelebihan menggunakan kerangka Django untuk projek anda sebagai alat anda dan jika anda tidak pasti ia sesuai, anda hanya perlu melihat banyak jenama nama besar yang menggunakan Django di timbunannya.

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 django

The -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-pip

Sekarang kita mempunyai pip, mari buat persekitaran maya. Persekitaran maya membantu mengelakkan konflik dengan pakej Python yang digunakan oleh Linux.

pip3 pasang virtualenv
cd / 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.

sumber / rumah / django / env / bin / aktifkan

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 / django
sumber env / bin / aktifkan
pip pasang django
tutorial django-admin startproject

Sahkan perkara berjalan dengan berjalan:

tutorial cd
python 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:

DIBENARKAN_HOSTS = [
'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 postgresql

Kemudian 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 - postgres
psql

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 -W

Pada 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-binary

Kemudian, mari kita buka / rumah / django / tutorial / tutorial / tetapan.pydan 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 / tutorial
python 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 nginx

Sekarang, 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 django
pelayan 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 / tutorial
python 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 gunicorn

Seterusnya, kita boleh memulakan gunicorn seperti berikut:

cd / rumah / django / tutorial
tutorial 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:

  1. Sekiranya kita menutup sesi SSH, proses gunicorn akan berhenti.
  2. Sekiranya pelayan reboot, proses gunicorn tidak akan bermula.
  3. 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 / django
bin mkdir
cd / rumah / django / tong
sentuh mula-pelayan.sh

Dalam pelayan permulaan.sh:

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

Sekarang anda boleh menguji skripnya:

cd / rumah / django / tong
pelayan 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 gunicorn
systemctl mula gunicorn

Anda semestinya dapat melihat laman web anda pada masa ini.

Kita boleh mematikan gunicorn seperti berikut:

systemctl stop gunicorn

Dan anda mesti melihat 502 Bad Gateway.

Akhirnya, mari kita periksa kitaran boot:

systemctl mula gunicorn
but 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 / django
mkdir 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 / django
sumber 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 django
pelayan 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!

Cara Mengubah Tetapan Tetikus dan Pad Sentuh Menggunakan Xinput di Linux
Sebilangan besar pengedaran Linux dihantar dengan perpustakaan "libinput" secara lalai untuk menangani peristiwa input pada sistem. Ia dapat memproses...
Buat semula butang tetikus anda secara berbeza untuk perisian yang berbeza dengan X-Mouse Button Control
Mungkin anda memerlukan alat yang dapat mengubah kawalan tetikus anda dengan setiap aplikasi yang anda gunakan. Sekiranya ini berlaku, anda boleh menc...
Kajian Tetikus Tanpa Wayar Microsoft Sculpt Touch
Saya baru-baru ini membaca mengenai Sentuhan Microsoft Sculpt tetikus tanpa wayar dan memutuskan untuk membelinya. Setelah menggunakannya sebentar, sa...