Bir Django uygulaması nasıl dağıtılır:

Herkese selamlar, bu benim <» FromLinux'daki ilk makalem (taslaklarımdaki birkaç makaleden xD), umarım sizin için faydalıdır 

Pekala, yeni ve şu anki işimde, şu anda birkaç sistemin Django'ya taşınması gerçekleştiriliyor (ne kadar garip eh ?? xD) ve geliştirme dışında görevlerimden biri de bunların üretimine sokulması, o zaman iyi bir çırak olarak, gerçek bir sunucuda ilk kez bir uygulamayı üretime koyduğumdan beri: $ Yığın gerekli paketlerinin her birinin resmi belgesini okumaya başladım (Gunicorn ve Supervisord hepsinden çok) ve öğreticiler İspanyolca'da bazı açılardan benim için çok net değillerdi, Django, Gunicorn, Supervisord, Nginx ve Postgresql yığınına dayalı olarak uygulamayı üretime geçirmek için izlediğim adımları içeren bir mini kılavuz oluşturmaya karar verdim.

Çalıştığım durumda, sunucular hala Debian Squeeze üzerinde çalışıyor, ancak kılavuz diğer dağıtımlar için tamamen geçerli olmalı ... bu yüzden doğrudan konuya gelelim ve başlayalım:

Süper kullanıcı olarak çalışacağım. Öncelikle aşağıdaki paketler gereklidir:

PIP -> Python için paketleri kurmak ve yönetmek için araç
aptitude install python-pip

nginx -> Web sunucusu (bunu bir ters proxy olarak kullanacağız ve 'img, js, css' statik dosyalarını önbelleğe alacağız):
aptitude install nginx

Süpervizör -> Çok daha fazlası için kullanılmasına rağmen uygulamamızı yönetmek ve izlemek için uygulama. Şununla kuruyoruz:
aptitude install supervisor

sanal ortam -> Uygulamamız için özelleştirilmiş bir sanal yürütme ortamı oluşturmamıza yardımcı olur. Şununla kuruyoruz:
aptitude install python-virtualenv

gunicorn -> python için web sunucusu (bunu henüz yüklemeyeceğiz)

Zaten postgresql kurulu ve yapılandırılmış olması gerektiğini varsayıyorum

psikopg2 -> python için Postgresql konektörü (henüz kurmayacağız)

Virtualenv ile sanal ortam oluşturun:

Öncelikle üretime sokmak için kullanacağımız çalışma dizinine geçeceğiz:
cd /var/www/

Daha sonra bu dizinde sanal ortamı oluşturacağız:
virtualenv ENV-nombreApp

Virtualenv'i yeni oluşturduğum dizine taşıyoruz
cd ENV-nombreAPP

Uygulamayı bu dizine kopyalıyoruz ve şimdi ortamı etkinleştirmeye devam ediyoruz:
source bin/activate

İstem şimdi şöyle görünmelidir (ENV)usuario@host:

Bu şimdi yaptığımız her şeyin dizinde saklanmasını sağlayacak / var / www / ENV-uygulamaadı / sistem paketlerini etkilemeden

Şimdi uygulama dizinine geçiyoruz:
cd nombreApp

Dosyada belirtilen uygulama bağımlılıkları listesini (gerekirse) kurmaya devam ediyoruz. gereksinimler.txt:
pip install -r requirements.txt

Örneğin, paketleri tek tek kurabiliriz. postgresql:
pip install psycopg2

GUnicorn kurulumu ve yapılandırması:

Kurmak için aynı şekilde yapıyoruz:
pip install gunicorn

Şimdi onu yapılandıracağız, bunun için adında bir dosya oluşturacağız gunicorn-deploy.py uygulamamızın kökünde (adı herhangi bir şey olabilir) aşağıdaki içerikle:

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

Süpervizör yapılandırması:

Şimdi ayarlayalım gözetmenbunun için konfigürasyon dosyasını oluşturuyoruz

echo_supervisord_conf > /etc/supervisord.conf

Şimdi konfigürasyon dosyasını düzenliyoruz:
vim /etc/supervisord.conf

Ve aşağıdaki satırları kaldırarak; (noktalı virgül):

[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = hata ayıklama 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] command = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Kullanıcı adı redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Şimdi denetleyicinin sistemle başlaması için komut dosyasını oluşturacağız, bunun için dosyayı oluşturacağız:
vim /etc/init.d/supervisord

Ve aşağıdaki içeriği ekliyoruz:

 # Denetleyici otomatik başlatma # # açıklama: Denetleyiciyi otomatik başlatır # işlem adı: denetimci # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl durumu $ 1 başlangıçta) echo -n "Başlangıç ​​yöneticisi:" $ SUPERVISORD echo ;; stop) echo -n "Denetleyici durduruluyor:" $ SUPERVISORCTL kapatma echo ;; yeniden başlatma) echo -n "Denetleyici durduruluyor:" $ SUPERVISORCTL kapatma echo echo -n "Başlatma yöneticisi:" $ SUPERVISORD echo ;; bu C

Ve şimdi dosyaya sistemle başlayabilmesi için yürütme izinleri veriyoruz:
sudo chmod +x /etc/init.d/supervisord

Hizmeti başlatmak için bağlantıları güncelliyoruz:
sudo update-rc.d supervisord defaults

Hizmeti başlatıyoruz:
sudo /etc/init.d/supervisord start

Nginx kurulumu:

Bu adım da oldukça basittir, aşağıdaki yapılandırma dosyasını oluşturacağız. nginx uygulamamız için:

vim /etc/nginx/sites-enabled/nombreApp

Ve size aşağıdaki içeriği ekleyeceğiz

sunucu {listen 9001; # nginx server_name'in www.domain.com'u dinlemesini istedikleri port; # veya 192.168.0.100, access_log /var/log/nginx/Appname.access.log'a erişeceğimiz adres; # uygulama günlük konumuna sahip olacağımız yer / {# burada nginx, www.dominio.com/ proxy_pass'a erişirken arayacaktır http://127.0.0.1:8001; proxy_set_header Ana Bilgisayar $ http_host; } location / static / {# www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles / girdiğimizde nginx erişecektir; }}

Ve nginx'i yeniden başlatıyoruz:
service nginx restart

Django'yu kurma:

Django yapılandırma dosyasını değiştirelim:
vim nombreApp/settings.py

Diyen çizgiyi arıyoruz DEBUG = Doğru ve değeri değiştiririz, kaldı DEBUG = Yanlış

DB parametrelerini ekliyoruz:

VERİTABANLARI = {'varsayılan': {'MOTOR': 'django.db.backends.postgresql_psycopg2', # veya mysql veya her ne olursa olsun 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD': 'şifre DB ',' HOST ':' localhost ', # veya ihtiyaç duydukları' PORT ':' ', # veya kullandıkları}}

Çizgiyi arıyoruz ALLOWED_HOSTS = [] ve erişim sağlayacağımız alanı veya adresi ekleyerek, ALLOWED_HOSTS = ['www.domain.com']

Statik dosyalar için dizini yapılandırıyoruz, yazan satırı arıyoruz STATIC_ROOT = ' ' ve değeri değiştiriyoruz, statik dosyalarımızın olmasını istediğimiz mutlak yolu yerleştiriyoruz, benim durumumda aşağı yukarı böyle bıraktım STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Neredeyse bitti, aşağıdaki komutu uyguluyoruz:
./manage.py collectstatic

Bu, 'adında bir klasör oluşturacaktır.statik belirttiğimiz yolda ayarlar.py ', tüm statik dosyalarımızın olacağı yer burasıdır.

Ve son olarak, yeni değişiklikleri almak için süpervizörü yeniden başlatıyoruz:
supervisorctl restart nombreApp

Sonuçta o kadar da önemli bir şey değildi, değil mi? Bana basit geldi 

Umarım işinize yarar, selamlar 

GUnicorn belgeleri

Süpervizör belgeleri


Google'da tercih edilen kaynak olarak ekleyin.