Bagaimana cara menyebarkan aplikasi Django:

Bagaimana salam semuanya, ini adalah artikel pertama saya di <» DesdeLinux (dari beberapa yang saya punya di draft saya xD), semoga bermanfaat bagi anda 😀

Nah, dalam pekerjaan saya yang baru dan saat ini, pada saat migrasi beberapa sistem ke Django sedang dilakukan (betapa aneh eh ?? xD) dan salah satu tugas saya, selain pengembangan, adalah memasukkan ke dalam produksi ini, lalu sebagai magang yang baik, karena ini adalah pertama kalinya saya menempatkan aplikasi ke dalam produksi di server nyata: $ Saya mulai membaca dokumen resmi dari masing-masing paket tumpukan yang diperlukan (Gunicorn dan Supervisord lebih dari semuanya), dan melihat tutorial itu Dalam bahasa Spanyol mereka tidak terlalu jelas bagi saya dalam beberapa aspek, saya memutuskan untuk membuat panduan mini dengan langkah-langkah yang saya ikuti untuk memasukkan aplikasi ke dalam produksi, berdasarkan tumpukan Django, Gunicorn, Supervisord, Nginx dan Postgresql.

Dalam kasus di mana saya bekerja, server masih menjalankan Debian Squeeze, tetapi panduannya harus sepenuhnya valid untuk distribusi lain ... jadi mari kita langsung ke intinya dan memulai:

Saya akan bekerja sebagai pengguna super. Pertama-tama, paket berikut diperlukan:

PIP -> Alat untuk menginstal dan mengelola paket untuk Python
aptitude install python-pip

Nginx -> Server web (kami akan menggunakannya sebagai proxy terbalik dan untuk menyimpan file statis 'img, js, css') Kami menginstalnya dengan:
aptitude install nginx

Supervisord -> Aplikasi untuk mengelola dan memantau aplikasi kita, meskipun digunakan lebih banyak lagi. Kami menginstalnya dengan:
aptitude install supervisor

virtualenv -> Ini membantu kami membuat lingkungan eksekusi virtual yang disesuaikan untuk aplikasi kami. Kami menginstalnya dengan:
aptitude install python-virtualenv

gunicorn -> server web untuk python (kami belum menginstal ini)

Saya berasumsi mereka seharusnya sudah menginstal dan mengkonfigurasi postgresql

psycopg2.dll -> Konektor Postgresql untuk python (kami juga belum akan menginstalnya)

Buat lingkungan virtual dengan virtualenv:

Pertama kita akan pindah ke direktori kerja yang akan kita gunakan untuk produksi:
cd /var/www/

Kemudian di direktori ini kita akan membuat lingkungan virtual:
virtualenv ENV-nombreApp

Kami pindah ke direktori yang baru saja saya buat virtualenv
cd ENV-nombreAPP

Kami menyalin aplikasi di direktori ini dan sekarang kami melanjutkan untuk mengaktifkan lingkungan dengan:
source bin/activate

Prompt sekarang akan terlihat seperti (ENV)usuario@host:

Ini sekarang akan membuat semua yang kita lakukan disimpan di direktori / var / www / ENV-appname / tanpa mempengaruhi paket sistem

Sekarang kita pindah ke direktori aplikasi:
cd nombreApp

Kami melanjutkan untuk menginstal daftar dependensi aplikasi (jika perlu), di mana mereka ditentukan dalam file requirement.txt:
pip install -r requirements.txt

Kami juga dapat menginstal paket satu per satu, misalnya, untuk menginstal konektor postgresql:
pip install psycopg2

Instalasi dan konfigurasi GUnicorn:

Untuk menginstalnya kami melakukannya dengan cara yang sama:
pip install gunicorn

Sekarang kita akan mengkonfigurasinya, untuk ini kita akan membuat file bernama gunicorn-deploy.py di root aplikasi kita, (walaupun namanya bisa apa saja) dengan konten berikut:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

Konfigurasi supervisord:

Sekarang mari kita atur pengawas, untuk itu kita menghasilkan file konfigurasi dengan

echo_supervisord_conf > /etc/supervisord.conf

Sekarang kami mengedit file konfigurasi:
vim /etc/supervisord.conf

Dan kami menghapus tanda komentar pada baris berikut dengan menghapus; (titik koma):

[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] perintah = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py direktori = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Nama pengguna redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Sekarang kita akan membuat skrip untuk supervisord untuk memulai dengan sistem, untuk itu kita akan membuat file:
vim /etc/init.d/supervisord

Dan kami menambahkan konten berikut:

 # Supervisord mulai otomatis # # deskripsi: Supervisord mulai otomatis # nama proses: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 di awal) echo -n "Pengawas awal:" $ SUPERVISORD echo ;; stop) echo -n "Menghentikan supervisord:" $ SUPERVISORCTL shutdown echo ;; restart) echo -n "Menghentikan supervisord:" $ SUPERVISORCTL shutdown echo echo -n "Memulai supervisord:" $ SUPERVISORD echo ;; itu C

Dan sekarang kami memberikan izin eksekusi file sehingga dapat dimulai dengan sistem:
sudo chmod +x /etc/init.d/supervisord

Kami memperbarui tautan untuk memulai layanan:
sudo update-rc.d supervisord defaults

Kami memulai layanan:
sudo /etc/init.d/supervisord start

Menyiapkan nginx:

Langkah ini juga cukup sederhana, kita akan membuat file konfigurasi berikut nginx untuk aplikasi kita:

vim /etc/nginx/sites-enabled/nombreApp

Dan kami akan menambahkan konten berikut untuk Anda

server {dengarkan 9001; # port di mana mereka ingin nginx server_name mendengarkan www.domain.com; # atau 192.168.0.100, alamat yang akan kita akses access_log /var/log/nginx/Appname.access.log; # di mana kita akan memiliki lokasi log aplikasi / {# di mana nginx akan menelepon saat mengakses www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } location / static / {# di mana nginx akan mengakses ketika kita memasuki www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

Dan kami memulai ulang nginx:
service nginx restart

Menyiapkan Django:

Mari modifikasi file konfigurasi django:
vim nombreApp/settings.py

Kami mencari baris yang bertuliskan DEBUG = Benar dan kami mengubah nilainya, tersisa DEBUG = Salah

Kami menambahkan parameter DB:

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # atau mysql, atau apapun yang mereka gunakan 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'password DB', 'HOST': 'localhost', # atau yang mereka butuhkan 'PORT': '', # atau yang mereka gunakan}}

Kami mencari garis ALLOWED_HOSTS = [] dan kami menambahkan domain atau alamat yang akan kami akses, meninggalkan sesuatu seperti ALLOWED_HOSTS = ['www.domain.com']

Kami mengkonfigurasi direktori untuk file statis, kami mencari baris yang bertuliskan STATIC_ROOT = ' ' dan kami mengubah nilainya, menempatkan jalur absolut di mana kami ingin file statis kami berada, dalam kasus saya, saya membiarkannya kurang lebih seperti ini STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Hampir selesai, kami menjalankan perintah berikut:
./manage.py collectstatic

Ini akan membuat folder dengan nama 'statika di jalur yang kami tentukan di file settings.py ', di situlah semua file statis kami berada.

Dan akhirnya kami memulai ulang supervisor untuk mengambil perubahan baru:
supervisorctl restart nombreApp

Dan itu saja, pada akhirnya tidak terlalu buruk? menurutku itu sederhana 😀

Semoga bermanfaat untuk bapak ibu salam 😉

Dokumentasi GUnicorn

Dokumentasi pengawas


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   f3niX dijo

    Saya memahami bahwa aplikasi Django tidak boleh ditempatkan di akar folder server web (/ var / www)? Demi keamanan, saya tidak tahu apakah saya salah.

    Salam.

    1.    urKh dijo

      Baiklah !!! Itu adalah sesuatu yang sama sekali tidak saya sadari, saya akan memperbarui entri 😛 dan segera setelah saya kembali pada hari Senin saya akan membuat perubahan dalam aplikasi xD
      terima kasih

  2.   Rodrigo Bravo (goidor) dijo

    Tutorial bagus saudara epale. Baru-baru ini saya juga berada di tempat yang sama tetapi di Debian 7, saya harus mencari dan membaca lebih atau kurang. Saya menyarankan Anda membuat lingkungan virtual virtualenv di rumah pengguna di folder tersembunyi.

    Salam!

  3.   Servis Fenriz dijo

    hahaha ctm saya kemarin mendokumentasikan Django dan Anda sudah melalui galaksi 999999 Salam men xD

  4.   daniel2ac.dll dijo

    Artikel yang sangat bagus =) hanya seminggu yang lalu saya menerapkan aplikasi django saya tetapi saya melakukannya dengan uwsgi dan nginx, apakah Anda tahu keuntungan apa yang dimiliki gunicorn? Saya telah melihatnya disebutkan banyak.
    Sangat menyenangkan melihat django menjadi sangat populer, kenyataannya adalah kerangka kerja terbaik yang pernah saya lihat =)

  5.   adalah ozkan dijo

    Untuk STATIC_ROOT yang saya lakukan adalah menentukan variabel global. Sesuatu seperti ini:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

    Dimana backend adalah aplikasi yang saya buat. Dengan cara ini saya memastikan bahwa di mana saya menerapkan proyek, jalur globalnya sama.

  6.   pintar dijo

    Menarik, saya akan mencoba di masa depan.

    Ngomong-ngomong, apakah ada yang tahu cara mengaktifkan aksen dan karakter non-ascii dalam aplikasi django?

    Saya telah mencari ke mana-mana, tidak ada metode berikut yang berhasil untuk saya:
    sys.setdefaultencoding ('utf-8') # di sites.py

    # - * - coding: utf-8 - * - # di setiap file python

    Mengedit site.py, dan meletakkan utf-8 daripada ascii seharusnya berfungsi, tetapi $ file models.py memberi tahu saya bahwa file saya masih ascii.

    Ada Saran?

    1.    pintar dijo

      Berhasil !!!!

  7.   anime230 dijo

    tutorial yang sangat bagus tetapi Anda dapat melakukan salah satu cara mengunggah aplikasi saya di server web yang sudah diproduksi
    terima kasih