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 😉
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.
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
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!
hahaha ctm Saya semalam mendokumentasikan Django dan anda sudah melalui galaksi 999999 Salam lelaki xD
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 =)
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.
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?
Ianya berhasil!!!!
tutorial yang sangat baik tetapi anda boleh melakukan salah satu cara memuat naik aplikasi saya di pelayan web yang sudah dihasilkan
terima kasih