Instalowanie Django w IIS: samouczek krok po kroku

Opublikowany: 2022-03-11

Chociaż wielu programistów Django może uznać to za bluźnierstwo, czasami rzeczywiście konieczne jest wdrożenie aplikacji Django w systemie Windows/IIS, zwłaszcza podczas pracy z klientem, który oparł swoją infrastrukturę na ekosystemie Windows. Część „bluźnierstwa” pochodzi z Django, który naprawdę był ukierunkowany na środowisko Unix, w dużej mierze polegając na funkcjach takich jak WSGI, FastCGI i narzędzia wiersza poleceń, z których wszystkie są obce dla systemu Windows. Na szczęście kompatybilność z Django/IIS poprawia się dzięki dodaniu funkcji (które w innym przypadku byłyby kłopotliwe) zarówno po stronie Windows, jak i Python + Django, pomagając w ten sposób rozwiązać problemy ze zgodnością między tymi dwoma różnymi technicznymi światami.

Ten krótki, skoncentrowany samouczek przeprowadzi Cię przez podstawową konfigurację projektu Django w systemie Windows. Obejmuje instalację Pythona, Django i powiązanych narzędzi, w tym uruchamianie projektu Django zarówno samodzielnie, jak i jako serwer FastCGI. Nawiasem mówiąc, to ostatnie jest coraz ważniejsze, ponieważ IIS oficjalnie obsługuje teraz FastCGI (w IIS 7+ wystarczy zainstalować funkcję CGI).

Uwaga: ten samouczek jest przeznaczony dla osób, które dobrze rozumieją system Windows i znają konsolę zarządzania usługami IIS. Wersja IIS używana w tym samouczku to 8.5, ale opisy i techniki są podobne we wcześniejszych wersjach. Samouczek jest oparty na Python 2.7 i Django 1.7, ponieważ są to wersje, których używam do moich projektów. Możesz znaleźć inny samouczek Django tutaj.

Wskazówka dla profesjonalistów: Jeśli zamierzasz wdrożyć wiele projektów Django (lub nawet zwykłego Pythona) lub jesteś programistą, powinieneś spojrzeć na virtualenv, narzędzie do tworzenia izolowanych środowisk Pythona.

Instalowanie Pythona w systemie Windows

Najpierw pobierz Pythona. Dostępne są zarówno 32-bitowe, jak i 64-bitowe instalatory MSI i należy wybrać ten, który jest odpowiedni dla komputera, na którym instalujesz.

Podstawy PIP

PIP to narzędzie, które instaluje i utrzymuje biblioteki Pythona (których Django jest tylko jednym przykładem). Jest wywoływany przez uruchomienie polecenia pip w wierszu polecenia. Implementuje kilka podkomend, z których dwie najbardziej przydatne to install i freeze . PIP zainstaluje również zależności projektu (dodatkowe biblioteki), jeśli projekt je posiada.

Uruchomienie pip install <package_name> spowoduje pobranie i zainstalowanie pakietu oraz wszystkich jego zależności (które mogą być zagnieżdżone i dość złożone). Uruchomienie pip install --upgrade <nazwa_pakietu> również zaktualizuje istniejący pakiet do jego najnowszej wersji. PIP obsługuje specjalną składnię do instalowania precyzyjnych wersji pakietu zamiast „najnowszej”. Odbywa się to poprzez dodanie operatora i numeru wersji do nazwy pakietu; np. "Jinja2==2.7.3" (aby zainstalować dokładną wersję) lub "sześć>=1.8" (aby zainstalować dowolną wersję równą lub większą od podanego numeru wersji).

Uruchomienie pip freeze po prostu pokazuje listę aktualnie zainstalowanych pakietów w formacie, który jest bezpośrednio używany przez pip install .

Zwróć uwagę, że niektóre pakiety Python/PIP są dostarczane z bibliotekami napisanymi w C, które muszą zostać skompilowane, aby pakiet działał. Jeśli nie skonfigurujesz swojego systemu tak, aby miał działający kompilator C, który jest również kompatybilny z plikami wykonywalnymi Pythona, nie będziesz w stanie zainstalować takich pakietów. Django jest czystą biblioteką Pythona, więc nie wymaga instalacji kompilatora C.

Ważne jest, aby zainstalować Python 2.7.9 lub nowszy, ponieważ wersje Pythona zaczynające się od 2.7.9 zawierają PIP, menedżera biblioteki/pakietu/oprogramowania Pythona, który jest używany do instalowania wszystkiego innego w tym samouczku.

Proces instalacji jest bardzo prosty i prosty. Zaproponuje zainstalowanie Pythona w katalogu C:\Python27 , który powinieneś zaakceptować, ponieważ później ułatwia to życie. Staraj się nie poddawać zwyczajowi Windows instalowania rzeczy w katalogach ze spacjami w ich nazwach.

Podstawowy katalog po instalacji będzie zawierał około 8 podkatalogów, kilka różnych plików i dwa pliki wykonywalne o nazwach Python.exe i PythonW.exe . Pierwszy z nich jest domyślnym interpreterem wiersza poleceń i powłoką Pythona, podczas gdy drugi jest tylko interpreterem, który nie będzie używał (ani nie tworzył) okna konsoli, jeśli zostanie wywołany, i dlatego jest odpowiedni do uruchamiania aplikacji GUI Pythona.

Następnie należy dodać Pythona do zmiennej środowiskowej PATH systemu. Odbywa się to w Zaawansowane ustawienia systemu (lub Właściwości systemu ), na karcie Zaawansowane , klikając przycisk Zmienne środowiskowe . Należy dodać dwa katalogi: C:\Python27 i C:\Python27\Scripts . Powinny one być dołączone do listy PATH, oddzielone średnikami ( ; ). Koniec zmiennej PATH powinien wyglądać tak ;C:\Python27;C:\Python27\Scripts .

Wskazówka dla profesjonalistów: Możesz także zainstalować GOW, lekką kolekcję narzędzi wiersza poleceń systemu Unix, podobną do Cygwin. Dostarczy Ci narzędzi takich jak ls , ale także bardziej interesujących , takich jak make , wget , curl , ssh , scp , gzip i tar .

Instalowanie Django w systemie Windows

Django można zainstalować za pomocą PIP za pomocą polecenia takiego jak pip install django . Proces może wciągnąć dodatkowe zależności, jeśli nie są one jeszcze obecne w twoim systemie. W przeciwnym razie po prostu zainstaluje tylko Django z wyjściem podobnym do następującego:

 Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...

Możesz sprawdzić, czy zarówno Python, jak i Django dla Windows działają, uruchamiając nowy wiersz poleceń systemu Windows, uruchamiając polecenie python i wprowadzając polecenie import django w wierszu poleceń Pythona. Jeśli działa poprawnie, po poleceniu import django nie powinno być żadnych danych wyjściowych ani komunikatów; tj:

 Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>>

Instalowanie projektu Django w systemie Windows

„Projekt” Django składa się z jednej lub więcej „aplikacji”. Katalog najwyższego poziomu projektu zwykle zawiera jeden specjalny podkatalog projektu, który zawiera ustawienia i niektóre ogólne informacje na poziomie projektu, jeden podkatalog na aplikację oraz skrypt wiersza polecenia o nazwie manage.py . Na przykład:

 C:\Devel\djangoproject\src>dir Volume in drive C is OS Volume Serial Number is 6A3D-C1B8 Directory of C:\Devel\djangoproject\src 22/12/2014 04:25 <DIR> . 22/12/2014 04:25 <DIR> .. 22/12/2014 04:19 <DIR> project 22/12/2014 04:58 <DIR> djangoapp 16/12/2014 03:30 <DIR> templates 16/12/2014 00:50 250 manage.py 1 File(s) 250 bytes 5 Dir(s) 23,552,929,792 bytes free

Projekty Django można po prostu dystrybuować, archiwizując cały katalog projektu i dekompresując go na innej maszynie. W powyższym przykładzie projekt zawiera podkatalog project , katalog aplikacji o nazwie djangoapp i pomocniczy podkatalog templates .

Skrypt manage.py to „szwajcarski scyzoryk” aplikacji Django. Robi wszystko, od tworzenia nowych aplikacji, przez migracje baz danych, po uruchamianie testowego (wbudowanego) serwera HTTP, a nawet serwera FastCGI.

Uruchamianie testowego serwera HTTP

Jeśli projekt i jego aplikacje działają, powinieneś być w stanie uruchomić domyślny serwer HTTP Django przeznaczony tylko do programowania, uruchamiając polecenie manage.py runserver , co powinno skutkować wynikiem podobnym do następującego:

 C:\Devel\djangoproject\src>manage.py runserver Performing system checks... System check identified no issues (0 silenced). December 23, 2014 - 01:19:02 Django version 1.7.1, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

Jak widać z wiadomości, uruchamia to serwer na hoście lokalnym, port 8000. Możesz uzyskać do niego natychmiastowy dostęp za pomocą przeglądarki internetowej.

Konfigurowanie i uruchamianie serwera FastCGI

Bardziej interesującą opcją jest włączenie serwera FastCGI. Dzięki FastCGI możesz używać usług IIS, Apache lub dowolnego innego serwera sieci Web do obsługi aplikacji w środowisku produkcyjnym. Aby to zadziałało, musisz pobrać fcgi.py (polecenie zarządzania Django do uruchamiania Django w systemie Windows z usługami IIS za pośrednictwem FastCGI) i umieścić je w podkatalogu management/commands w podkatalogu aplikacji Django (nie projektu!). Zarówno podkatalogi management , jak i commands muszą mieć pusty plik o nazwie __init__.py (który zamienia te katalogi w moduły Pythona).

fcgi.py to bardzo prosty i minimalistyczny adapter WSGI na FastCGI, który nie obsługuje nasłuchiwania w gnieździe TCP lub potoku i wykonuje wszystkie operacje za pomocą stdin i stdout`. W związku z tym nie nadaje się do użytku z nowoczesnymi serwerami sieciowymi, takimi jak nginx, ale będzie działać z usługami IIS.

Konfigurowanie usług IIS do uruchamiania aplikacji FastCGI

Jeśli moduł FastCGI jest załadowany w usługach IIS (lub po prostu moduł CGI w usługach IIS 7+), konsola zarządzania usługami IIS będzie miała dostępną ikonę „Ustawienia FastCGI”. Django to framework, który ma własny routing URL, więc aplikacje Django muszą być instalowane jako „obsługa” w IIS dla określonych ścieżek. Aby zainstalować aplikację Django w domyślnej witrynie sieci Web IIS, wybierz ją w konsoli zarządzania i otwórz funkcję konfiguracji mapowania obsługi. W nim kliknij akcję Dodaj mapowanie modułu… i wprowadź następujące informacje:

  • Ścieżka żądania : Ustaw ją na \* , aby obsługiwać wszystkie żądania z wewnętrznym routingiem Django
  • Moduł : Ustaw go na FastCgiModule , aby korzystać z modułu FastCGI IIS
  • Wykonywalny : w tym przypadku należy ustawić zarówno ścieżkę python.exe , jak i jej argumenty wiersza poleceń, używając znaku potoku ( | ) jako separatora. Przykładowa wartość tego ustawienia to: C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings . Zauważ, że musisz określić polecenie fcgi dla skryptu manage.py i ręcznie ustawić ścieżkę wyszukiwania interpretera Pythona dla projektu, a także nazwę modułu Pythona dla modułu ustawień projektu.
  • Nazwa : Możesz ustawić to, co chcesz.

Twoje okno konfiguracji powinno wyglądać mniej więcej tak:

okno konfiguracji ii

Następnie kliknij przycisk Zażądaj ograniczeń i edytuj kartę Mapowanie . Odznacz pole wyboru „Wywołaj program obsługi tylko wtedy, gdy żądanie jest mapowane do…” (w przeciwnym razie usługi IIS będą miały problemy z mapowaniem podkatalogów w żądaniu adresu URL):

ograniczenia żądań

Kliknij OK w oknie dialogowym z informacjami o obsłudze. IIS poprosi następnie o potwierdzenie utworzenia pasującego wpisu aplikacji FastCGI, który należy potwierdzić. Ten wpis będzie widoczny w funkcji Ustawienia FastCGI , dostępnej na ekranie głównym konsoli zarządzania IIS. Domyślny wpis utworzony przez sam IIS jest odpowiedni, ale dostępnych jest kilka opcjonalnych ustawień, z których możesz chcieć skorzystać:

  • Maksymalna liczba instancji : podejście, które stosujemy do uruchamiania aplikacji FastCGI, jest jednoprocesowe, jednowątkowe, co oznacza, że ​​dla każdego jednoczesnego żądania zostanie uruchomiony osobny proces interpretera Pythona. To ustawienie ogranicza liczbę jednoczesnych wystąpień aplikacji Django.
  • Monitoruj zmiany w pliku : domyślnie po uruchomieniu procesy aplikacji będą aktywne do momentu ręcznego wyłączenia lub do czasu obsługi żądań Instance MaxRequest . Korzystając z tego ustawienia, usługi IIS będą monitorować znacznik czasu dowolnego pliku, a jeśli ulegnie zmianie, zatrzymają i ponownie załadują wystąpienia aplikacji. Jest to wygodne zarówno dla programistów, jak i środowisk produkcyjnych, ponieważ umożliwia ponowne ładowanie aplikacji po zmianie. „monitorowanie znacznika czasu pliku pod kątem wskaźnika przeładowania” to dość dziwna koncepcja w systemie Windows, ale jest normalna w środowiskach uniksopodobnych, dlatego została przeniesiona tutaj z FastCGI.

dodaj aplikację FastCGI

Konfigurowanie statycznych katalogów zasobów i mediów

Nowoczesne aplikacje internetowe używają wielu plików zasobów, takich jak CSS, JavaScript i inne, a aplikacje Django nie są wyjątkiem. Django zapewnia bardzo wygodną funkcję, która pozwala programistom zintegrować potrzebne zasoby z drzewem katalogów aplikacji, ale które Django może wyodrębnić i skopiować do odpowiedniego, statycznego katalogu. Jest to zasadniczo funkcja kontrolowana przez programistów, a lokalizacje, w których Django będzie przechowywać pliki statyczne, są kontrolowane w pliku settings.py projektu. Dobrze wychowane projekty użyją do tego rozsądnej ścieżki, ale nie jest to ustandaryzowane.

Aplikacje obsługujące przesłane pliki przechowują je w podobnie zarządzanym katalogu, który w Django tradycyjnie nosi nazwę media . Katalogi static i media muszą zostać dodane do konfiguracji IIS jako katalogi wirtualne:

Konfigurowanie statycznych katalogów zasobów i mediów

Ważnym krokiem tutaj jest rekonfiguracja funkcji Handler Mappings dla każdego z katalogów i usunięcie obsługi aplikacji Django, pozostawiając obsługę StaticFile jako najważniejszą.

Zauważ, że katalog static musi być możliwy do odczytu przez IIS (jak również wszystkie inne pliki i katalogi w projekcie Django), ale katalog media musi być także zapisywalny przez IIS. Ostateczna konfiguracja witryny powinna wyglądać następująco:

iis przykład konfiguracji witryny

Uwaga o bazach danych

SQLite działa domyślnie w systemie Windows, podobnie jak w systemach uniksowych. Większość innych baz danych o otwartym kodzie źródłowym działa teraz w systemie Windows, nawet PostgreSQL, który polecam. Jednak w istniejących instalacjach Windows może być wymagane wdrożenie Django z MS SQL Server. Jest to możliwe za pomocą sterownika mostka ODBC lub natywnego sterownika MS SQL. W teorii oba działają, ale ich nie testowałem. Przynajmniej parametry połączenia z bazą danych (w pliku settings.py projektu) muszą zostać zmienione, aby przełączyć się na nową bazę danych. Migrację danych należy przeprowadzić ręcznie.

Zwróć uwagę, że jeśli używasz bazy danych SQLite, zarówno plik bazy danych, jak i katalog, w którym się znajduje, muszą umożliwiać zapis dla IIS.

Rozwiązywanie problemów

Opisana konfiguracja została przetestowana i okazała się działać, ale jeśli coś pójdzie nie tak, oto kilka podstawowych kroków, aby rozwiązać problem z instalacją Django dla Windows:

  1. Spróbuj samodzielnie uruchomić wiersz poleceń FastCGI. Jest to polecenie skonfigurowane w ustawieniach FastCGI i musi być zgodne z poleceniem skonfigurowanym w Mapowaniach obsługi dla witryny.
  2. Zainstaluj funkcję śledzenia dla usług IIS, a następnie skonfiguruj ją dla witryny Django w regułach śledzenia nieudanych żądań , aby śledzić całą zawartość ( ), kod stanu „500” i ważność zdarzenia „Błąd”. Ślady będą dostępne jako pliki XML (z dołączonym XSLT) w katalogu C:\inetpub\logs\FailedReqLogFiles (lub podobnym, w zależności od konfiguracji). Następnie należy włączyć śledzenie dla określonej witryny internetowej (lub katalogu wirtualnego) w akcji *Konfiguruj->Śledzenie nieudanych żądań… .

Wniosek

Oczywiście, Django jest dostosowane do środowiska uniksopodobnego, a najbardziej rozpowszechnionym i obsługiwanym sposobem uruchamiania Django jest system Linux (np. z uwsgi i nginx).

Jednak uruchomienie Django w systemie Windows nie wymaga wiele pracy, jak pokazano w tym samouczku. Niektóre z opisanych kroków mogą wydawać się sprzeczne z intuicją z perspektywy czystego Windowsa, ale są one konieczne i na szczęście wysiłek poświęcony na konfigurację jest jednorazowy. Po skonfigurowaniu aplikacja Django powinna zachowywać się w taki sam sposób, jak na platformie Linux.