Jak wyjaśnić instalację Django / Python Python-nowicjuszowi korzystającemu z udostępnionego serwera IIS [zamknięty]

9

Z przyczyn ode mnie niezależnych nasza witryna jest hostowana przez dostawcę hostingu, który korzysta z usług IIS na swoich serwerach. Obecnie oferują PHP i ASP, a także Python i Perl za pomocą skryptów cgi.

Chcę zrobić przeprojektowanie, ponownie napisać naszą stronę internetową i chcę zmienić z PHP na konfigurację Python / Django. Dostawca hostingu jest otwarty na sugestie, ale jest jasne, że „tak naprawdę nie wiemy, czym jest Python ani jak to działa, ale jeśli możesz nam to wyjaśnić, postaramy się skonfigurować wszystko, czego potrzebujesz” .

Mogę jednak wiedzieć, jak skonfigurować Django we współdzielonym środowisku hostingowym na apache / mod_python, ale nie mam pojęcia, jak to będzie skonfigurowane w IIS, a na pewno nie w jaki sposób byłoby skonfigurowane dla współdzielonego środowiska hostingowego. Trochę googlowałem, ale większość zasobów, które znalazłem, zakłada, że ​​sysadmin 1) wie, że Python / Django i 2) używa dedykowanego hostingu IIS dla swojej witryny.

Czy ktoś mógłby wyjaśnić, w jaki sposób mogę wyjaśnić ten proces mojemu dostawcy usług hostingowych, lub przekazać mi wskazówki na temat dobrych, szczegółowych zasobów, które mogę przekazać mojemu dostawcy usług hostingowych? Pamiętaj, że osoby prowadzące hosting mogą wiedzieć „wszystko” na temat IIS, ale nie mają pojęcia, jak radzić sobie z Pythonem.

Epcylon
źródło

Odpowiedzi:

8

Jeśli masz problem z używaniem usług IIS, użyj PyISAPIe zamiast CGI, jeśli możesz. Instrukcje i linki do PyISAPIe są poniżej. Twój hosting będzie wiedział dużo więcej o rozszerzeniach ISAPI, jeśli będą zarządzać usługami IIS niż o Pythonie, i nie będzie musiał wiele wiedzieć o Pythonie za pomocą PyISAPIe.

DUŻO LEPSZY SPOSÓB WYKORZYSTANIA TO ZA POMOCĄ PyISAPIE, ROZSZERZENIA ISAPI . PyISAPIe jest znacznie szybszy niż CGI na IIS7. To działa podobnie do mod_python na Apache. Strona główna projektu PyISAPIe zawiera instrukcje dotyczące konfigurowania Django z WSGI przez PyISAPIe. Spowoduje to zwiększenie wydajności do rozsądnych prędkości dla witryny publicznej / o dużym natężeniu ruchu.

Konfiguracja Django w Pythonie IIS + za pośrednictwem środowiska CGI będzie strasznie powolna w przypadku dowolnego zastosowania produkcyjnego. Nigdy nie należy tego używać w przypadku witryny, w której oczekuje się obsługi więcej niż kilku żądań na minutę. Ogranicza to również poważnie to, co można buforować w pamięci w ramach buforowania Django, ponieważ proces aplikacji Django jest restartowany przy każdym nowym żądaniu.

Na zdrowym serwerze WWW, takim jak Apache, lighttpd itp., Z mod_python interpreter Pythona uruchamiający proces Django pozostaje w pamięci i jest inicjowany z każdym nowym wątkiem roboczym Apache, który obsługuje wiele żądań w miarę upływu czasu. Oznacza to, że Python + Django nie jest zamykany i restartowany dla każdego nowego żądania. W konfiguracji FastCGI serwer WWW (na przykład Apache lub lighttpd) tworzy gniazdo (domena UNIX lub TCP), przez które komunikuje się z aplikacją FastCGI (twoją aplikacją internetową Django) za pośrednictwem protokołu FastCGI. To samo dotyczy konfiguracji proxy HTTP (mówią HTTP zamiast FastCGI). W środowisku CGI wywoływany jest interpreter Pythona, który uruchamia aplikację Django, całkowicie od nowa dla każdego żądania, więc aplikacja nie może utrzymywać stanu między żądaniami w pamięci i nie może buforować poprawnie nigdzie poza bazą danych.

Dość rantingu, jeśli musisz użyć IIS + CGI + Django, oto jak wykonać tę okropną okropną rzecz: Użyj następującego kodu, aby utworzyć własny skrypt CGI, który uruchamia twoją aplikację Django (tłumaczy między CGI a WSGI). Musisz trochę zmodyfikować skrypt, aby wskazywał na Twoją aplikację i kod Django. To jest skrypt CGI, do którego musisz przekazywać żądania. Następnie musisz przekazać / przepisać wszystkie żądania do skryptu CGI ...

W IIS6 będziesz potrzebować odpowiednika mod_rewrite, takiego jak IISRewrite, który moim zdaniem nie jest darmowy i jest zamkniętym źródłem. W ramach IIS7 Microsoft w końcu dołączył moduł przepisywania adresów URL. Dokumentacja do tego znajduje się tutaj . Instrukcje tworzenia reguł przepisywania w IIS7 są tutaj . Będziesz chciał przekazać wszystko pod docelowym podstawowym adresem URL do obsługi przez skrypt CGI.

użytkownik6281
źródło
Ponieważ hosting jest współdzielony, głównym problemem jest to, w jaki sposób dostawca hostingu skonfigurowałby PyISAPIe, aby pasował do moich potrzeb, a także różnych potrzeb innych klientów. Nie mogłem znaleźć instrukcji dotyczących konfigurowania Django z WSGI na stronie głównej ... Jeśli wszystko inne zawiedzie, skorzystam z metody CGI. Przy mniej niż 400 żądaniach tygodniowo myślę, że możemy żyć z rozwiązaniem CGI, dopóki nie zdecydujemy się na zmianę hostingu.
Epcylon
1

Jak skonfigurować Python na FastCGI na IIS

Oto, jak skonfigurować Python na FastCGI IIS 7+ z, otwiera drogę do przyzwoitej konfiguracji DJango

... i być w stanie podłączyć debugera do procesu, umożliwiając przejście przez kod Pythona

W tym przykładzie nie użyto konsoli zarządzania IIS, ale wymieniono zawartość wynikowych plików konfiguracji

Krok 1

Zainstaluj Python + dobry debugger (w tym przykładzie użyto WingIDE, które znalazłem doskonałe narzędzie) W tym przykładzie założono folder c: \ python27

Krok 2

Utwórz folder internetowy, np. Na localhost c: \ inetpub \ wwwroot \ mypythonfolder i umieść w nim następujący plik web.config:

Uwaga | znak potoku w dyrektywie scriptProcessor. Jest to używane przez IIS do mapowania skryptu na aplikację fastCgi (krok 3). Powinien pasować znak po znaku pełna ścieżka + znak potoku + ustawienia argumentów z kroku 3 poniżej.

Krok 3

W pliku applicationHost.config w folderze c: \ windows \ system32 \ inetsrc \ config umieść w sekcji:

    <fastCgi>
        <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
    </fastCgi>

Krok 4

W c: \ python27 \ lib \ mylib \ myfcgi.py wstaw następujący kod:

import wingdbstub

import os, io, sys ret = "środowisko: \ r \ n" dla param w os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" for arg in sys.argv: ret = ret + arg uchwyt = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()

Krok 5

Upewnij się, że IUSR ma prawa do zapisu w twoim folderze c: \ temp

Krok 6

Umieść wingdbstub.py i wingdebugpw w folderze c: \ python27 \ lib \ mylib \. Umożliwi to debugowanie w Wingide. Te pliki są dostarczane wraz z instalacją skrzydła. Uwaga: jeśli Python musi również skompilować kod do wingstub.pyc, IUSR potrzebuje praw do zapisu w tym folderze, ponieważ proces python zostanie uruchomiony na tym koncie przez IIS

Krok 6

Otwórz wingdb i ustaw punkt przerwania w linii „import os, io, sys”

Krok 7

Kliknij w przeglądarce http: // localhost / mypythonfolder

Jeśli wszystko działa poprawnie, należy teraz uruchomić Wingide, aby wyświetlić działający kod w punkcie przerwania. Jeśli nie: - istnieje problem z zaporą ogniową. Proces python komunikuje się z interfejsem WingIDE przez połączenie TCP - lub występuje problem z bezpieczeństwem w Wingide. Potrzebuje odpowiedniej wersji pliku wingdebugpw, który zasadniczo zawiera hasło lub token, który weryfikuje dostęp do twojej instalacji wingide. Gdyby tak nie było, każdy, kto ma dostęp tcp do twojego komputera, mógłby debugować kod.

Krok 8

Sprawdź, czy w c: \ temp plik dziennika został utworzony. Powinno to również działać, jeśli nie możesz rozpocząć kroku 7

Krok 9

Zauważ, że ta strona uruchamia debugger, ale nie zwraca żadnej strony do przeglądarki. Trochę tła: serwer sieciowy komunikuje się fastcgi poprzez tak zwane „rekordy”. Oznacza to, że każde żądanie użytkownika przychodzi do aplikacji spakowane w wielu osobnych „rekordach”. Każdy rekord jest strukturą danych, która wskazuje początek żądania, kwerendę, zmienne pocztowe itp. Rozpakowanie tych rekordów do pojedynczego żądania jest dość kłopotliwe, postępuje zgodnie ze specyfikacją fastcgi http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1

Jako zawartość c: \ python27 \ lib \ mylib \ myfcgi.py właśnie wrzuciłem kopię pliku zoofcgi.py dostarczonego przez helicontech. Ten plik python jest w stanie dekodować te rekordy i wyświetlać stronę i jest całkiem interesujący do debugowania. Zauważ też, że helicontech opcjonalnie dostarcza dll, który znajduje się pomiędzy IIS a zoofcgi.py, ale ta dll nie jest absolutnie konieczna. Wierzę, że implementuje nieco ulepszoną i ogólną wersję implementacji fastcgi, którą zapewnia msft. Jednak gdy używasz ich biblioteki dll, gdy chcesz przejść przez kod, proces zostaje dość szybko zakończony, a biblioteka IIS / DLL zabija proces Pythona, gdy stwierdza, że ​​odpowiedź nie wraca w ciągu sekundy lub 2.

Otóż ​​to. Zasadniczo komunikacja między IIS a kodem Pythona odbywa się za pomocą nazwanych potoków. Powinieneś być w stanie skonfigurować go za pomocą gniazd Tcp, ale nie byłem w stanie dowiedzieć się, który port jest używany (uważam, że stdin powinien zostać przekształcony w port, który można następnie wybrać () ed, ale tego nie dałem każda próba)

Robert van Geel
źródło
0

Nie próbowałem tego z Pythonem, ale działało świetnie jako CGI z Perlem. Produkty ActiveState bez trudu integrują się z IIS. Miałem wielki sukces z ActivePerl. Mają także ActivePython, który może (prawdopodobnie) również załatwi sprawę . Więc myślę, że po prostu pobierz Django i zainstaluj go .

EDYCJA: Ok, więc zarysuj pozorną integrację z IIS ... JEDNAK, oto artykuł o tym, jak zintegrować z IIS . Możesz również rozważyć Iron Python jako swoją dystrybucję dla systemu Windows.

W przypadku dostawcy wątpiłbym, aby musieli wiedzieć więcej niż jest to platforma programistyczna, taka jak ASP / ASP.NET, i że Python jest językiem używanym do jej tworzenia.

Jeśli chodzi o instalację, o której wspomniałem powyżej, spróbuję tego i zobaczę, jak sobie poradzi. Zamieszczę na nim notatki, jeśli zadziała poprawnie!

squillman
źródło