Która „konfiguracja” działa najlepiej? Użyłem virtualenv i przeniosłem projekt django do tego środowiska, jednak widziałem inne konfiguracje, w których jest folder dla środowisk wirtualnych i inny dla projektów.
virtualenv to sposób na izolowanie środowisk Pythona; jako taka nie ma dużej roli do odegrania podczas wdrażania - jednak podczas programowania i testowania jest to wymóg, jeśli nie jest wysoce zalecany.
Wartość, jaką można uzyskać od virtualenv, polega na tym, że pozwala upewnić się, że zainstalowano poprawne wersje bibliotek dla aplikacji. Więc nie ma znaczenia, gdzie umieścisz samo wirtualne środowisko. Tylko upewnij się, że nie dołączasz go jako części systemu wersjonowania kodu źródłowego.
Układ systemu plików nie jest krytyczny. Zobaczysz wiele artykułów wychwalających zalety układów katalogów, a nawet szkieletowych projektów, które możesz sklonować jako punkt wyjścia. Czuję, że to bardziej osobiste preferencje niż trudne wymagania. Na pewno miło jest mieć; ale jeśli nie wiesz dlaczego , nie dodaje to żadnej wartości do procesu wdrażania - więc nie rób tego, ponieważ niektóre blogi to zalecają, chyba że ma to sens w Twoim scenariuszu. Na przykład - nie ma potrzeby tworzenia setup.py
pliku, jeśli nie masz prywatnego serwera PyPi, który jest częścią przepływu pracy podczas wdrażania.
Jak mogę skonfigurować rzeczy w sposób, który pozwala na hostowanie kilku witryn na jednym serwerze?
Aby skonfigurować wiele witryn, musisz wykonać dwie czynności:
- Serwer, który nasłuchuje na publicznym adresie IP na porcie 80 i / lub porcie 443, jeśli masz SSL.
- Kilka "procesów", które wykonują rzeczywisty kod źródłowy django.
Ludzie używają nginx jako nr 1, ponieważ jest to bardzo szybki serwer proxy i nie wiąże się z kosztami kompleksowego serwera, takiego jak Apache. Możesz używać Apache, jeśli czujesz się z nim swobodnie. Nie ma wymogu, aby „w przypadku witryn wielopunktowych używać nginx”; potrzebujesz tylko usługi, która nasłuchuje na tym porcie, wie, jak przekierować (proxy) do procesów, w których działa rzeczywisty kod django.
W przypadku # 2 istnieje kilka sposobów rozpoczęcia tych procesów. gevent / uwsgi to najpopularniejsze. Jedyne, o czym należy pamiętać, to nie używać serwera uruchomieniowego w produkcji .
To są absolutnie minimalne wymagania. Zazwyczaj ludzie dodają pewnego rodzaju menedżera procesów, który kontroluje wszystkie działające "serwery django" (# 2). Tutaj zobaczysz upstart
i supervisor
wspomnisz. Wolę nadzorcę, ponieważ nie musi on przejmować całego systemu (w przeciwieństwie do upstartu). Jednak znowu - nie jest to trudny wymóg . Możesz doskonale uruchomić kilka screen
sesji i je wyłączyć. Wadą jest to, że jeśli serwer się zrestartuje, będziesz musiał ponownie uruchomić sesje ekranu.
Osobiście polecam:
- Nginx dla # 1
- Wybierz między uwsgi i gunicorn - ja używam uwsgi.
- kierownik ds. zarządzania procesami backendu.
- Indywidualne konta systemowe (użytkownicy) dla każdej hostowanej aplikacji.
Powodem, dla którego zalecam # 4, jest izolowanie uprawnień; znowu nie jest to wymóg.
Dlaczego niektórzy sugerują użycie gunicorn_django -b 0.0.0.0:8000, a inni sugerują gunicorn_django -b 127.0.0.1:8000? Testowałem to drugie w instancji Amazon EC2, ale nie działało, podczas gdy pierwszy działał bez problemu.
0.0.0.0
oznacza „wszystkie adresy IP” - jest to adres meta (czyli adres zastępczy). 127.0.0.1
to zarezerwowany adres, który zawsze wskazuje na komputer lokalny. Dlatego nazywa się to „localhost”. Jest osiągalny tylko dla procesów działających w tym samym systemie.
Zwykle serwer frontonu (nr 1 na powyższej liście) nasłuchuje na publicznym adresie IP. Państwo powinno wyraźnie wiążą serwera do jednego adresu IP .
Jeśli jednak z jakiegoś powodu korzystasz z DHCP lub nie wiesz, jaki będzie adres IP (na przykład jest to nowo zainicjowany system), możesz powiedzieć nginx / apache / jakiemukolwiek innemu procesowi, z którym ma się powiązać 0.0.0.0
. Powinien to być tymczasowy środek zapobiegawczy .
W przypadku serwerów produkcyjnych będziesz mieć statyczny adres IP. Jeśli masz dynamiczny adres IP (DHCP), możesz go zostawić 0.0.0.0
. Jednak bardzo rzadko będziesz mieć DHCP na swoich maszynach produkcyjnych.
Powiązanie gunicorn / uwsgi z tym adresem nie jest zalecane w produkcji. Jeśli powiążesz swój proces backendu (gunicorn / uwsgi) z 0.0.0.0
, może on stać się dostępny „bezpośrednio”, z pominięciem frontendowego proxy (nginx / apache / etc); ktoś mógłby po prostu zażądać http://your.public.ip.address:9000/
i uzyskać bezpośredni dostęp do Twojej aplikacji, zwłaszcza jeśli Twój serwer frontonu (nginx) i proces zaplecza (django / uwsgi / gevent) działają na tej samej maszynie .
Możesz to zrobić, jeśli nie chcesz mieć kłopotów z uruchamianiem frontowego serwera proxy.
Jaka jest logika pliku konfiguracyjnego nginx? Jest tak wiele samouczków wykorzystujących drastycznie różne pliki konfiguracyjne, że nie wiem, który z nich jest lepszy. Na przykład niektórzy używają „alias / ścieżka / do / statyczny / folder”, a inni „katalog główny / ścieżka / do / statyczny / folder”. Może możesz udostępnić swój preferowany plik konfiguracyjny.
Pierwszą rzeczą, którą powinieneś wiedzieć o nginx, jest to, że nie jest to serwer WWW, taki jak Apache lub IIS. To jest proxy. Zobaczysz więc różne terminy, takie jak „upstream” / „downstream” i definiowanych jest wiele „serwerów”. Poświęć trochę czasu i zapoznaj się najpierw z instrukcją nginx.
Istnieje wiele różnych sposobów konfiguracji nginx; ale tutaj jest jedna odpowiedź na swoje pytanie na alias
wersetach root
. root
jest jawną dyrektywą, która wiąże katalog główny („katalog domowy”) nginx. To jest katalog, na który będzie patrzeć, gdy podasz żądanie bez ścieżki takiej jakhttp://www.example.com/
alias
oznacza „zamapuj nazwę na katalog”. Katalogi z aliasami mogą nie być podkatalogami katalogu głównego dokumentu.
Dlaczego w / etc / nginx tworzymy dowiązanie symboliczne między dostępnymi dla witryn a witrynami włączonymi?
Jest to coś unikalnego dla Debiana (i systemów podobnych do Debiana, takich jak ubuntu). sites-available
zawiera listę plików konfiguracyjnych dla wszystkich wirtualnych hostów / witryn w systemie. Dowiązanie symboliczne od sites-enabled
do sites-available
„aktywuje” tę witrynę lub hosta wirtualnego. Jest to sposób na oddzielenie plików konfiguracyjnych i łatwe włączanie / wyłączanie hostów.