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

Herkesi selamlamaya ne dersiniz, bu benim <» alanındaki ilk yazım. DesdeLinux (taslaklarımda bulunan birkaç tanesinden xD), umarım işinize yarar 😀

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

Ve hepsi bu, sonunda o kadar da doğru değil miydi? bana basit göründü 😀

Umarım sizin için yararlıdır, selamlar 😉

GUnicorn belgeleri

Süpervizör belgeleri


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   f3niX dijo

    Django uygulamasının web sunucusu klasörünün (/ var / www) köküne yerleştirilmemesi gerektiğini anlıyorum? Güvenlik için yanılıyor muyum bilmiyorum.

    Selamlar.

    1.    ahh dijo

      Tamam !!! Tamamen farkında olmadığım bir şeydi, girişi güncelleyeceğim 😛 ve Pazartesi günü döner dönmez xD uygulamasında değişiklikler yapacağım
      teşekkürler

  2.   Rodrigo Bravo (Goidor) dijo

    Epale kardeş iyi öğretici. Son zamanlarda ben de aynıydım ama Debian 7'de az ya da çok aramak ve okumak zorunda kaldım. Virtualenv'in sanal ortamını kullanıcının evinde gizli bir klasörde oluşturmanızı tavsiye ederim.

    Selamlar!

  3.   Fenriz'e servis yapın dijo

    hahaha ctm Dün Django'yu belgeliyorum ve zaten galaksiden geçiyorsunuz 999999 Selamlar erkekler xD

  4.   daniel2ac dijo

    Çok iyi makale =) sadece bir hafta önce django uygulamamı kurdum ama uwsgi ve nginx ile yaptım, gunicorn'un ne gibi bir avantajı olduğunu biliyor musunuz? Çok bahsettiğini gördüm.
    Django'nun çok popüler hale geldiğini görmek güzel, gerçek şu ki gördüğüm en iyi çerçeve =)

  5.   Özkar dijo

    STATIC_ROOT için yaptığım şey global bir değişken tanımlamaktır. Bunun gibi bir şey:

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

    Arka uç, oluşturduğum bir uygulama. Bu yüzden projeyi konuşlandırdığım yerde küresel yolun aynı olduğundan emin oluyorum.

  6.   akıllı telefon dijo

    İlginç, gelecekte deneyeceğim.

    Bu arada, bir django uygulamasında aksanları ve ascii olmayan karakterleri nasıl etkinleştireceğini bilen var mı?

    Her yere baktım, aşağıdaki yöntemlerden hiçbiri benim için işe yaramıyor:
    sites.py içinde sys.setdefaultencoding ('utf-8') #

    # - * - kodlama: utf-8 - * - # her python dosyasında

    Site.py'yi düzenlemek ve ascii yerine utf-8 koymak işe yarayacak, ancak $ file models.py dosyamın hala bir ascii olduğunu bildiriyor.

    Herhangi bir öneri?

    1.    akıllı telefon dijo

      İşe yaradı!!!!

  7.   anime230 dijo

    çok iyi öğretici, ancak uygulamamı zaten üretimde olan bir web sunucusuna nasıl yükleyeceğimi yapabilirsiniz
    teşekkürler