En çok hangi "kurulumun" işe yaradığını gördünüz? Virtualenv kullandım ve django projemi bu ortama taşıdım, ancak sanal ortamlar ve diğer projeler için klasörlerin olduğu başka bir kurulum gördüm.
virtualenv, Python ortamlarını izole etmenin bir yoludur; bu nedenle, dağıtımda oynayacak büyük bir rolü yoktur - ancak geliştirme ve test sırasında , şiddetle tavsiye edilmiyorsa bir gerekliliktir.
Virtualenv'den alacağınız değer, uygulama için kitaplıkların doğru sürümlerinin kurulduğundan emin olmanızı sağlamasıdır. Yani sanal çevrenin kendisini nereye yapıştırdığınız önemli değil. Bunu kaynak kodu versiyonlama sisteminin bir parçası olarak eklemediğinizden emin olun.
Dosya sistemi düzeni kritik değildir. Dizin düzenlerinin erdemlerini ve hatta başlangıç noktası olarak klonlayabileceğiniz iskelet projelerini yücelten birçok makale göreceksiniz. Bunun zor bir gereklilikten çok kişisel bir tercih olduğunu düşünüyorum. Elbette olması güzel; ancak nedenini bilmiyorsanız , dağıtım sürecinize herhangi bir değer katmaz - öyleyse bunu yapmayın çünkü senaryonuz için mantıklı gelmedikçe bazı bloglar öneriyor. Örneğin setup.py
, dağıtım iş akışınızın parçası olan özel bir PyPi sunucunuz yoksa bir dosya oluşturmanıza gerek yoktur .
İşleri birkaç sitenin tek bir sunucuda barındırılmasına izin verecek şekilde nasıl kurabilirim?
Birden çok site kurulumu yapmanız gereken iki şey vardır:
- SSL'niz varsa bağlantı noktası 80 ve / veya bağlantı noktası 443'teki genel IP'yi dinleyen bir sunucu.
- Gerçek django kaynak kodunu çalıştıran bir grup "işlem".
İnsanlar # 1 için nginx kullanıyor çünkü çok hızlı bir proxy ve Apache gibi kapsamlı bir sunucunun ek yüküyle gelmiyor. Rahatsanız Apache'yi kullanmakta özgürsünüz. "Birden fazla site için nginx kullanın" şartı yoktur; sadece o bağlantı noktasında dinleyen, gerçek django kodunu çalıştıran süreçlerinize nasıl yönlendirileceğini (proxy) bilen bir hizmete ihtiyacınız var.
# 2 için bu işlemleri başlatmanın birkaç yolu var. gevent / uwsgi en popüler olanlardır. Burada hatırlanması gereken tek şey , üretimde runserver kullanmamaktır .
Bunlar mutlak minimum gereksinimlerdir. Tipik olarak insanlar, çalışan tüm "django sunucularını" (# 2) kontrol etmek için bir çeşit işlem yöneticisi ekler. Burada göreceksiniz upstart
ve supervisor
bahsedeceksiniz. Tüm sistemi devralması gerekmediği için süpervizörü tercih ederim (upstart'ın aksine). Ancak, yine - bu zor bir gereklilik değildir . Bir sürü screen
seansı mükemmel bir şekilde yürütebilir ve onları ayırabilirsiniz. Olumsuz tarafı, sunucunuz yeniden başlatılırsa, ekran oturumlarını yeniden başlatmanız gerekmesidir.
Şahsen şunları tavsiye ederim:
- # 1 için Nginx
- Uwsgi ve gunicorn arasında seçim yap - ben uwsgi kullanıyorum.
- arka uç süreçlerini yönetmek için gözetmen .
- Barındırdığınız her uygulama için ayrı sistem hesapları (kullanıcılar).
# 4'ü önermemin nedeni izinleri izole etmektir; yine, bir gereklilik değil.
Neden bazı insanlar gunicorn_django -b 0.0.0.0:8000 kullanmanızı önerirken diğerleri gunicorn_django -b 127.0.0.1:8000'i önermektedir? İkincisini bir Amazon EC2 bulut sunucusunda test ettim, ancak eski sorunsuz çalışırken işe yaramadı.
0.0.0.0
"tüm IP adresleri" anlamına gelir - bir meta adres (yani, bir yer tutucu adresi). 127.0.0.1
her zaman yerel makineyi gösteren ayrılmış bir adrestir. Bu nedenle "localhost" olarak adlandırılır. Yalnızca aynı sistem üzerinde çalışan işlemlere erişilebilir.
Genelde genel IP adresini dinleyen ön uç sunucunuz (yukarıdaki listede 1 numara) vardır. Sen should açıkça sunucunun bağlamak biri IP adresine .
Bununla birlikte, herhangi bir nedenle DHCP üzerindeyseniz veya IP adresinin ne olacağını bilmiyorsanız (örneğin, yeni sağlanan bir sistem), nginx / apache / diğer herhangi bir işleme bağlanmasını söyleyebilirsiniz 0.0.0.0
. Bu geçici bir geçici önlem olmalıdır .
Üretim sunucuları için statik bir IP'ye sahip olacaksınız. Dinamik bir IP'niz (DHCP) varsa, içeri girebilirsiniz 0.0.0.0
. Yine de üretim makineleriniz için DHCP'ye sahip olmanız çok nadirdir.
Üretimde gunicorn / uwsgi'nin bu adrese bağlanması tavsiye edilmemektedir . Arka uç sürecinizi (gunicorn / uwsgi) ile bağlarsanız 0.0.0.0
, ön uç proxy'nizi (nginx / apache / vb.) Atlayarak "doğrudan" erişilebilir hale gelebilir; özellikle ön uç sunucunuz (nginx) ve arka uç işleminiz (django / uwsgi / gevent) aynı makinede çalışıyorsa, birisi http://your.public.ip.address:9000/
uygulamanızı doğrudan isteyebilir ve ona erişebilir .
Yine de bir ön uç proxy sunucusu çalıştırma zorluğuna sahip olmak istemiyorsanız, bunu yapmakta özgürsünüz.
Nginx'in yapılandırma dosyasının arkasındaki mantık nedir? Büyük ölçüde farklı yapılandırma dosyalarını kullanan o kadar çok öğretici var ki hangisinin daha iyi olduğu konusunda kafam karıştı. Örneğin, bazı kişiler "takma ad / yol / / statik / klasör" ve diğerleri "kök / yol / / statik / klasör" kullanır. Belki tercih ettiğiniz konfigürasyon dosyasını paylaşabilirsiniz.
Nginx hakkında bilmeniz gereken ilk şey, bunun Apache veya IIS gibi bir web sunucusu olmamasıdır . Bu bir vekildir. Dolayısıyla, "yukarı akış" / "aşağı akış" ve birden çok "sunucu" gibi farklı terimlerin tanımlandığını göreceksiniz. Biraz zaman ayırın ve önce nginx kılavuzunu gözden geçirin.
Nginx'i kurmanın birçok farklı yolu vardır; ama burada sorunuzun bir cevaptır alias
vs. root
. root
nginx'in belge kökünü ("ev dizini") bağlayan açık bir yönergedir. Bu, yolu olmayan bir istek verdiğinizde bakacağı dizindir.http://www.example.com/
alias
"bir ismi bir dizine eşle" anlamına gelir. Adlandırılmış dizinler , belge kökünün bir alt dizini olamaz .
Neden / etc / nginx içinde site kullanılabilir ve siteler arasında bir sembolik bağlantı oluşturuyoruz?
Bu, debian'a (ve ubuntu gibi debian benzeri sistemlere) özgü bir şeydir. sites-available
sistemdeki tüm sanal ana bilgisayarlar / siteler için yapılandırma dosyalarını listeler. A sembolik link sites-enabled
için sites-available
sitenin veya sanal konak "aktive". Yapılandırma dosyalarını ayırmanın ve ana bilgisayarları kolayca etkinleştirmenin / devre dışı bırakmanın bir yoludur.