Cara menggunakan aplikasi Django:

Bagaimana dengan salam semua, ini adalah artikel pertama saya dalam <» DesdeLinux (de varios que tengo en mis borradores xD), espero les sea de utilidad 😀

Nah, dalam pekerjaan saya yang baru dan sekarang, pada masa ini penghijrahan beberapa sistem ke Django sedang dilakukan (betapa anehnya eh ?? xD) dan salah satu tugas saya, selain daripada pembangunan, adalah memasukkannya ke dalam produksi, jadi betapa baiknya perantis, kerana ini adalah kali pertama saya memasukkan aplikasi ke dalam pengeluaran pada pelayan yang sebenarnya: $ Saya mula membaca dokumen rasmi setiap pakej timbunan yang diperlukan (Gunicorn dan Supervisord yang paling penting), dan melihat bahawa tutorial di Sepanyol mereka tidak begitu jelas dalam beberapa aspek, saya memutuskan untuk membuat panduan mini dengan langkah-langkah yang saya ikuti untuk memasukkan aplikasi ke dalam produksi, berdasarkan timbunan Django, Gunicorn, Supervisord, Nginx dan Postgresql.

Sekiranya saya bekerja, pelayan masih menjalankan Debian Squeeze, tetapi panduannya mesti sah sepenuhnya untuk pengedaran lain ... jadi mari kita teruskan dan mulakan:

Saya akan bekerja sebagai pengguna super. Pertama sekali, pakej berikut diperlukan:

PIP -> Alat untuk memasang dan menguruskan pakej untuk Python
aptitude install python-pip

Nginx -> Pelayan web (kami akan menggunakannya sebagai proksi terbalik dan untuk menyimpan cache fail statik 'img, js, css') Kami memasangnya dengan:
aptitude install nginx

Supervisord -> Aplikasi untuk mengurus dan memantau aplikasi kami, walaupun digunakan untuk lebih banyak lagi. Kami memasangnya dengan:
aptitude install supervisor

virtualenv -> Ini membantu kita membuat persekitaran pelaksanaan maya yang disesuaikan untuk aplikasi kita. Kami memasangnya dengan:
aptitude install python-virtualenv

gunicorn -> pelayan web untuk python (kami belum memasangnya)

Saya menganggap mereka semestinya sudah memasang dan mengkonfigurasi postgresql

psikopg2 -> Penyambung Postgresql untuk python (kami juga tidak akan memasangnya)

Buat persekitaran maya dengan virtualenv:

Mula-mula kita akan beralih ke direktori kerja yang akan kita gunakan untuk dimasukkan ke dalam pengeluaran:
cd /var/www/

Kemudian di direktori ini kita akan membuat persekitaran maya:
virtualenv ENV-nombreApp

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

Kami menyalin aplikasi dalam direktori ini dan sekarang kami terus mengaktifkan persekitaran dengan:
source bin/activate

Permintaan sekarang akan kelihatan seperti (ENV)usuario@host:

Ini sekarang akan menjadikan semua yang kita lakukan disimpan dalam direktori / var / www / ENV-appname / tanpa menjejaskan pakej sistem

Sekarang kita beralih ke direktori aplikasi:
cd nombreApp

Kami terus memasang senarai kebergantungan aplikasi (jika perlu), di mana ia ditentukan dalam fail keperluan.txt:
pip install -r requirements.txt

Kita juga boleh memasang pakej secara individu, misalnya untuk memasang penyambung postgresql:
pip install psycopg2

Pemasangan dan konfigurasi GUnicorn:

Untuk memasangnya, kami melakukannya dengan cara yang sama:
pip install gunicorn

Sekarang kita akan mengkonfigurasinya, untuk ini kita akan membuat fail yang dipanggil gunicorn-deploy.py di akar aplikasi kami, (walaupun namanya boleh jadi apa-apa) dengan kandungan 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 penyelia:

Sekarang mari kita tetapkan penyelia, untuk itu kami menghasilkan fail konfigurasi dengan

echo_supervisord_conf > /etc/supervisord.conf

Sekarang kita mengedit fail konfigurasi:
vim /etc/supervisord.conf

Dan kami melepaskan baris berikut dengan membuang; (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 = minprocs palsu = 1024 = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] command = / var / www / ENV-appname / bin / django_unicorn -c / var / www / EN Direktori -Nama / appname / gunicorn-deploy.py = / 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 penyelia untuk memulakan dengan sistem, untuk itu kita akan membuat fail:
vim /etc/init.d/supervisord

Dan kami menambah kandungan berikut:

 # Supervisord auto-start # # description: Auto-begin supervisord # processname: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 dalam permulaan) echo -n "Memulakan penyelia:" $ SUPERVISORD echo ;; berhenti) echo -n "Menghentikan penyelia:" $ SUPERVISORCTL gema penutupan ;; mulakan semula) echo -n "Menghentikan penyelia:" $ SUPERVISORCTL shutdown echo echo -n "Memulakan penyelia:" $ SUPERVISORD gema ;; bahawa C

Dan sekarang kami memberikan izin pelaksanaan fail sehingga dapat dimulakan dengan sistem:
sudo chmod +x /etc/init.d/supervisord

Kami mengemas kini pautan untuk memulakan perkhidmatan:
sudo update-rc.d supervisord defaults

Kami memulakan perkhidmatan:
sudo /etc/init.d/supervisord start

Menyiapkan nginx:

Langkah ini juga cukup mudah, kami akan membuat fail konfigurasi berikut nginx untuk permohonan kami:

vim /etc/nginx/sites-enabled/nombreApp

Dan kami akan menambahkan kandungan berikut kepada anda

pelayan {dengar 9001; # port di mana mereka mahu 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 mempunyai lokasi log aplikasi / {# di mana nginx akan memanggil semasa mengakses www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } lokasi / statik / {# di mana nginx akan mengakses apabila kita memasukkan www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

Dan kami mulakan semula nginx:
service nginx restart

Menyiapkan Django:

Mari ubah fail konfigurasi django:
vim nombreApp/settings.py

Kami mencari garis yang mengatakan DEBUG = Betul dan kami menukar nilai, tinggal DEBUG = Salah

Kami menambah parameter DB:

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

Kami mencari talian DIBENARKAN_HOSTS = [] dan kami menambah domain atau alamat yang akan kami akses, meninggalkan sesuatu yang serupa ALLOWED_HOSTS = ['www.domain.com']

Kami mengkonfigurasi direktori untuk fail statik, kami mencari garis yang mengatakan STATIC_ROOT = ' ' dan kami mengubah nilainya, meletakkan jalan mutlak di mana kami mahu fail statik kami berada, dalam kes saya, saya meninggalkannya lebih kurang seperti ini STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

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

Ini akan membuat folder dengan nama 'statik di jalan yang kami tentukan di settings.py ', di situlah semua fail statik kami akan berada.

Dan akhirnya kami memulakan semula penyelia untuk mengambil perubahan baru:
supervisorctl restart nombreApp

Dan itu semua, pada akhirnya tidak begitu benar? nampaknya mudah bagi saya 😀

Saya harap ia berguna untuk anda, salam 😉

Dokumentasi GUnicorn

Dokumentasi penyelia


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   f3niX kata

    Saya faham bahawa aplikasi Django tidak boleh diletakkan di root folder pelayan web (/ var / www)? Untuk keselamatan, saya tidak tahu sama ada saya salah.

    Greetings.

    1.    urKh kata

      Baiklah !!! Itu adalah sesuatu yang saya tidak sedari, saya akan mengemas kini entri 😛 dan sebaik sahaja saya kembali pada hari Isnin, saya akan membuat perubahan dalam aplikasi xD
      Terima kasih

  2.   Rodrigo Bravo (goidor) kata

    Tutorial Epale abang baik. Baru-baru ini saya juga sama tetapi dalam Debian 7, saya terpaksa mencari dan membaca lebih kurang. Saya mengesyorkan agar anda membuat persekitaran virtualenv di rumah pengguna dalam folder tersembunyi.

    Salam!

  3.   Layan Fenriz kata

    hahaha ctm Saya semalam mendokumentasikan Django dan anda sudah melalui galaksi 999999 Salam lelaki xD

  4.   daniel2ac kata

    Artikel yang sangat bagus =) hanya seminggu yang lalu saya menggunakan aplikasi django saya tetapi saya melakukannya dengan uwsgi dan nginx, adakah anda tahu apa kelebihan yang dimiliki gunicorn? Saya telah melihatnya banyak disebut.
    Senang melihat bahawa django menjadi sangat popular, kebenaran adalah kerangka terbaik yang pernah saya lihat =)

  5.   ozkar kata

    Untuk STATIC_ROOT apa yang saya lakukan adalah menentukan pemboleh ubah global. Sesuatu seperti ini:

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

    Di mana backend adalah aplikasi yang saya buat. Oleh itu, saya memastikan bahawa di mana saya menggunakan projek ini, jalan globalnya sama.

  6.   pintar kata

    Menariknya, saya akan mencuba pada masa akan datang.

    Ngomong-ngomong, ada yang tahu Bagaimana mengaktifkan aksen dan watak bukan ascii dalam aplikasi django?

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

    # - * - pengekodan: utf-8 - * - # dalam setiap fail python

    Mengedit site.py, dan meletakkan utf-8 sebagai ganti ascii semestinya berfungsi, tetapi $ file models.py memberitahu bahawa fail saya masih merupakan ascii.

    Ada apa-apa cadangan?

    1.    pintar kata

      Ianya berhasil!!!!

  7.   anime230 kata

    tutorial yang sangat baik tetapi anda boleh melakukan salah satu cara memuat naik aplikasi saya di pelayan web yang sudah dihasilkan
    terima kasih