SORU
22 EKİM 2012, PAZARTESİ


Dağıtma gunicorn ve nginx ile Django

Bu geniş bir soru ama kurallı bir cevap almak istiyorum. Bir site kullanarak dağıtmaya çalışıyorumgunicornvenginxDjango. Öğreticiler ton okuduktan sonra başarılı oldum ama takip ettim adımlarını bir sitede sorun ya da belki de bunu yapmak için daha iyi yollar vardır olmadan çalıştırmak için yeterince iyi olduğundan emin olamıyorum. Bu belirsizlik can sıkıcı bir durum.

Bu yeni başlayanlar için çok ayrıntılı ve iyi açıklanmış bir cevap arıyorum. Çok şey biliyorum Ve bu cevaplar biraz çarpık olabilir çünkü bilmiyorum ne olduğunu açıklamak istemiyorum ve diğer insanların cevaplara göre daha az ölçüde yararlanabilir. Ancak, bazı imalarda görmek istiyorum

  • "Kur gördün mü" en iyi iş? Kullandımvirtualenvve benim taşındıDjangobu ortam içinde proje, ancak sanal ortamlar için bir klasör var başka bir kurulumları görülen ve projeler için başka şansım yok.

  • Nasıl bazı siteler tek bir sunucu barındırılması için izin veren bir şekilde Kur şeyler yapabilir miyim?

  • Neden bazı insanlar gunicorn_django -b 0.0.0.0:8000 ve diğerleri kullanarak Öner Öner gunicorn_django -b 127.0.0.1:8000? Amazon EC2 örneği ikinci test ettim ama eski sorun olmadan çalışırken işe yaramadı.

  • Config arkasındaki mantık nginx dosya nedir? Bu yüzden birçok dersler daha iyi olduğu konusunda kafam karıştı, bu büyük ölçüde farklı yapılandırma dosyaları kullanarak vardır. Örneğin, bazı insanlar alias /path/to/static/folder ve diğerleri root /path/to/static/folder kullanın. Belki de tercih edilen yapılandırma dosyanızı paylaşabilirsiniz.

  • Neden site-available /etc/nginx sites-enabled arasında sembolik bir bağ kurabiliriz?

  • Bazı en iyi uygulamaları her zaman bekliyoruz :-)

Teşekkürler

CEVAP
22 EKİM 2012, PAZARTESİ


"Kur gördün mü" en iyi iş? Virtualenv kullandım ve benim taşındı django bu ortam, ancak başka bir gördüm içinde proje sanal ortamlar için bir klasör olduğu kurulumları ve diğer projeler.

virtualenv Python ortamlarda izole etmek için bir yol olarak oynamak için büyük bir parçası yokdağıtım- ancak sırasındageliştirmevetestbir gereklilik değilse tavsiye edilir.

Virtualenv alacağı değeri kütüphaneler doğru sürümlerinin uygulamasının yüklü olduğundan emin olun olanak sağlamasıdır. Sanal envrionment kendisini sopa nerede olduğunun önemi yok. Sadece kaynak kodu sürüm sisteminin bir parçası olarak dahil değilsin.

Dosya sistemi düzeni çok önemli değildir. Makaleler başlangıç noktası olarak klon ki dizin düzenleri ve iskelet projeleri bile erdemlerini öven çok göreceksiniz. Bu zor bir şartı daha kişisel bir tercih daha fazla olduğunu hissediyorum. Tabii var; ama emin güzelneden olduğunudağıtım işlemi için herhangi bir değer eklemek değil , bu yüzden bazı blog senaryo için mantıklı sürece önerir çünkü bunu yapmayın. Eğer dağıtım iş akışınızın parçası olan özel PyPi bir server yok eğer doğru değilse örneğin - hayır setup.py Bir dosya oluşturmak gerekiyor.

Nasıl bazı siteler barındırılması için izin veren bir şekilde Kur şeyler yapabilirim tek bir sunucu?

Birden çok site kurulumları yapmanız gereken iki şey vardır:

  1. Eğer SSL varsa bağlantı noktası 80 üzerinde genel IP adresini dinleyen bir sunucu ve/veya bağlantı noktası 443.
  2. Bir sürü "" o gerçek django kaynağı çalışan kod. işlemler

İnsanlar çok hızlı bir proxy çünkü #1 için nginx kullanın ve Apache gibi kapsamlı bir sunucu yükü ile gelmiyor. Eğer rahat iseniz Apache kullanabilirsiniz. Yok gereklilik "için birden sitelerinin nginx"; sadece bir hizmet olduğunu dinlediği bağlantı noktası, bilir nasıl yönlendirme (vekil) için çalışan süreçleri gerçek django kodu.

#2 için bu işlemleri başlatmak için bir kaç yolu vardır. gevent/uwsgi en popüler olanlardır. Burada hatırlanması gereken tek şeyüretim runserver kullanmayın.

Bu mutlak minimum gereksinimleri vardır. İnsanlar süreç yöneticisi çeşit tüm denetimi Ekle "sunucular" (#2) çalışan. django genellikle Burada upstart supervisor belirtilen görürsünüz. Tüm sistem (sonradan görme aksine) almaya ihtiyacı yoktur amiri olarak tercih ederim. Ancak, tekrar etmek gerekirse, bu bir değilzor şartı. Mükemmel screen oturumları bir sürü çalıştırmak ve onları detatch. Dezavantajı, sunucunuzu yeniden başlatmalısınız, ekran oturumları yeniden başlatmak gerekir.

Şahsen tavsiye ederim:

  1. #1 için Nginx
  2. Uwsgi ve gunicorn arasında seçimini yap - uwsgi kullanıyorum.
  3. Arka uç süreçleri yönetmek için supervisor.
  4. Bireysel sistem hesapları (kullanıcı) her uygulama için ev sahipliği yapıyorsun.

#4 ben tavsiye nedeni izinleri izole etmek için; bir daha, bir gereklilik değil.

Neden bazı insanları kullanarak gunicorn_django-b 0.0.0.0:8000 ve önermek -b gunicorn_django öneririm Diğerleri:8000 127.0.0.1? İkinci test ettim Amazon EC2 örneği ama eski çalışsa da işe yaramadı sorun olmadan.

0.0.0.0 "IP adresi" - bir meta adresini (yer tutucu bir adres). anlamına gelir 127.0.0.1 her zaman yerel makine işaret eden ayrılmış bir adres. Onun adı bu yüzden"". localhost İşlemler aynı sistemde çalışan sadece ulaşılabilir.

Genellikle ön uç sunucu (yukarıdaki listede#1) ortak bir IP adresi dinlediği var. Sanabağlamak için sunucu lazım açıkçabirIP adresi.

Ancak, eğer başka bir sebebi vardır DHCP ya da ne olduğunu bilmiyorsunuz IP adresi olacaktır (örneğin, bir yeni hazırlanan sistem), anlat nginx/apache/başka bir işlem bağlamak 0.0.0.0.Bu bir olmalıdırgeçici boşluk bırak ölçün.

Üretim sunucuları için statik IP olacak. Eğer bir Dinamik IP (DHCP) varsa, 0.0.0.0 içinde bırakabilirsiniz. Üretim makineleri için olsa DHCP olacak çok nadirdir.

Bağlama gunicorn/bu adrese uwsgitavsiye değilüretim. Eğer bağlama ucu süreci (gunicorn/uwsgi) 0.0.0.0 olabilir erişilebilir "doğrudan", atlayarak ön proxy (nginx/apache/etc); birisi gelip istek http://your.public.ip.address:9000/ erişim uygulaması doğrudanözellikle ön uç sunucu (nginx) ve arka uç süreci (django/uwsgi/gevent) aynı makine üzerinde çalışıyorsa.

Eğer uç ön proxy sunucusu çalıştıran güçlük olmasını istemiyorsun ama bunu yapmak için ücretsiz olsa.

Config arkasındaki mantık nginx dosya nedir? O kadar çok var öğreticiler büyük ölçüde farklı yapılandırma kullanıyorum dosyaları hangisi daha iyi kafam karıştı. Örneğin, bazı insanlar "takma ad kullanın /statik//dizin /yolu" ve diğerleri "/static//dizin /yolu".kök Belki de tercih edilen yapılandırma dosyanızı paylaşabilirsiniz.

Nginx hakkında bilmeniz gereken ilk şey olduğudurbir Web sunucusugibi Apache veya IIS. Bir proxy. 'Akıntıya karşı'/'"aşağı" sunucular " olarak tanımlanan. birden fazla ve farklı şartlar bulacaksınız Biraz zaman ayırın ve nginx manuel.

Nginx kurmak için birçok farklı yolu vardır; ama burada root vs alias sorunuza bir cevap. root belge kök bağlayan açık bir Direktif ("giriş dizini") nginx. Bu http://www.example.com/ gibi bir yol olmadan bir istek verirken bakacağız dizin

alias anlamı, "bir dizin için bir isim göster". Yumuşatılmış dizinleriolmayabilirbelgenin bir alt dizin kök.

Neden site mevcut ve bu siteler etkin arasında bir sembolik bağ oluşturmak mı /etc/nginx?

Bu bir şey debian ve debian-ubuntu gibi sistemler) için benzersizdir. sites-available sistemdeki tüm sanal konak/siteler için yapılandırma dosyaları listeler. sites-available 23 *bir sembolik link "aktive" bu site beklenebilir. Yapılandırma dosyaları ayrı ve kolayca/devre dışı ana etkinleştirmek için bir yoldur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • atKristaBradford

    atKristaBrad

    4 Aralık 2010
  • EvilControllers

    EvilControll

    20 Ocak 2008
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007