Udostępnij za pomocą


Konfigurowanie aplikacji internetowych języka Python dla usług IIS

W przypadku korzystania z usług Internet Information Services (IIS) jako serwera internetowego na komputerze z systemem Windows (w tym maszyn wirtualnych z systemem Windows na platformie Azure), należy skonfigurować aplikację internetową języka Python, aby umożliwić usługom IIS prawidłowe przetwarzanie kodu języka Python. Konfiguracja jest realizowana za pomocą ustawień w pliku web.config dla aplikacji internetowej w języku Python. W tym artykule opisano sposób konfigurowania niezbędnych ustawień.

Warunki wstępne

  • Zainstalowany język Python w systemie Windows. Aby uruchomić aplikację internetową, najpierw zainstaluj wymaganą wersję języka Python bezpośrednio na maszynie hosta z systemem Windows, zgodnie z opisem w temacie Instalowanie interpreterów języka Python.

    • Zidentyfikuj lokalizację interpretera python.exe . Dla wygody możesz dodać lokalizację do zmiennej środowiskowej PATH.
  • Zainstalowane wymagane pakiety. W przypadku dedykowanego hosta możesz użyć globalnego środowiska języka Python do uruchamiania aplikacji, a nie środowiska wirtualnego. W związku z tym można zainstalować wszystkie wymagania aplikacji w środowisku globalnym, uruchamiając polecenie pip install -r requirements.txt.

Ustaw web.config, aby wskazywał interpreter języka Python

Plik web.config dla aplikacji języka Python instruuje serwer internetowy USŁUG IIS (wersja 7 lub nowsza) działający w systemie Windows o tym, jak powinien obsługiwać żądania języka Python za pośrednictwem protokołu HttpPlatformHandler (zalecane) lub FastCGI. Program Visual Studio w wersji 2015 lub starszej automatycznie wprowadza te modyfikacje. W przypadku programu Visual Studio 2017 lub nowszego należy ręcznie zmodyfikować plik web.config .

Jeśli projekt nie zawiera jeszcze pliku web.config , możesz go dodać, klikając prawym przyciskiem myszy katalog projektu, wybierając pozycję Dodaj > nowy element i wyszukując web.config lub tworząc pusty plik web.config XML.

Opcja 1. Konfigurowanie programu HttpPlatformHandler

Moduł HttpPlatform przekazuje połączenia gniazd bezpośrednio do autonomicznego procesu języka Python. To przekierowanie umożliwia uruchamianie dowolnego serwera internetowego, ale wymaga skryptu uruchamiania, który uruchamia lokalny serwer WWW. Takie podejście jest często wykonywane przy użyciu platformy internetowej języka Python, takiej jak Flask lub Django. Skrypt należy określić w elemecie <httpPlatform> pliku web.config . Atrybut processPath wskazuje na interpreter Pythona rozszerzenia witryny. Atrybut arguments wskazuje skrypt uruchamiania, który uruchamia lokalny serwer internetowy, w tym przypadku runserver.py i wszelkie argumenty, które chcesz podać:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="c:\python36-32\python.exe"
                  arguments="c:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="c:\home\LogFiles\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

W tym przykładzie zmienna środowiskowa HTTP_PLATFORM_PORT zawiera port, na którym serwer lokalny powinien nasłuchiwać połączeń z localhost. W tym przykładzie pokazano również, jak utworzyć inną zmienną środowiskową SERVER_PORT. W razie potrzeby można tworzyć i przypisywać zmienne środowiskowe.

Opcja 2. Konfigurowanie programu obsługi FastCGI

Alternatywnie możesz użyć usługi FastCGI do skonfigurowania aplikacji. FastCGI to interfejs, który działa na poziomie żądania. Usługi IIS odbierają połączenia przychodzące i przesyłają dalej każde żądanie do aplikacji interfejsu bramy serwera sieci Web (WSGI) działającej w co najmniej jednym trwałym procesie języka Python.

Notatka

Mimo że projekt można skonfigurować przy użyciu standardu FastCGI, zalecamy skonfigurowanie aplikacji przy użyciu programu HttpPlatformHandler , ponieważ projekt WFastCGI nie jest już utrzymywany i może powodować błędy.

Aby użyć rozwiązania FastCGI, najpierw zainstaluj i skonfiguruj pakiet wfastcgi zgodnie z opisem w pypi.org/project/wfastcgi/.

Następnie zmodyfikuj plik web.config aplikacji, aby uwzględnić pełne ścieżki do pliku wykonywalnego python.exe i pliku wfastcgi.py w kluczu PythonHandler . W poniższych krokach założono, że język Python jest zainstalowany w folderze c:\python36-32, a kod aplikacji znajduje się w folderze c:\home\site\wwwroot. Odpowiednio dostosuj te wartości dla Twoich ścieżek.

  1. Zmodyfikuj PythonHandler wpis w pliku web.config , aby ścieżka odpowiadała lokalizacji instalacji języka Python. Aby uzyskać więcej informacji, zobacz Dokumentacja konfiguracji usług IIS w iis.net.

    <system.webServer>
       <handlers>
         <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
             scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
             resourceType="Unspecified" requireAccess="Script"/>
       </handlers>
    </system.webServer>
    
  2. <appSettings> W sekcji pliku web.config dodaj klucze dla WSGI_HANDLERelementu , WSGI_LOG (opcjonalnie) i PYTHONPATH:

    <appSettings>
       <add key="PYTHONPATH" value="c:\home\site\wwwroot"/>
       <!-- The handler here is specific to Bottle; see the next section. -->
       <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
       <add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/>
    </appSettings>
    

    Te wartości <appSettings> są dostępne dla aplikacji jako zmienne środowiskowe:

    • Wartość klucza PYTHONPATH można dowolnie rozszerzyć, ale musi zawierać główną ścieżkę aplikacji.
    • Klucz WSGI_HANDLER musi wskazywać na aplikację WSGI, którą można zaimportować z Twojej aplikacji.
    • Klucz WSGI_LOG jest opcjonalny, ale klucz jest zalecany do debugowania aplikacji.
  3. WSGI_HANDLER Ustaw wpis w pliku web.config odpowiednio dla używanej platformy:

    • Bottle: Dodaj nawiasy po wartości app.wsgi_app, jak pokazano na tym przykładzie. Nawiasy są niezbędne, ponieważ obiekt jest funkcją, a nie zmienną. Składnię można zobaczyć w pliku app.py .

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: zmień wartość WSGI_HANDLER na <project_name>.app, w której <project_name> odpowiada nazwie projektu. Dokładny identyfikator można znaleźć, przeglądając instrukcję from <project_name> import app w pliku runserver.py . Jeśli na przykład projekt ma nazwę FlaskAzurePublishExample, wpis będzie wyświetlany w następujący sposób:

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django: do pliku web.config dla projektów Django potrzebne są dwie zmiany.

      • Zmień wartość WSGI_HANDLER na django.core.wsgi.get_wsgi_application(). Obiekt znajduje się w pliku wsgi.py .

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Dodaj następujący wpis bezpośrednio po wpisie klucza WSGI_HANDLER. Zastąp wartość DjangoAzurePublishExample nazwą projektu:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Tylko aplikacje Django: w pliku settings.py projektu Django dodaj domenę adresu URL witryny lub adres IP do ALLOWED_HOSTS wpisu. Zastąp ciąg "1.2.3.4" adresem URL lub adresem IP:

    # Change the URL or IP address to your specific site
    ALLOWED_HOSTS = ['1.2.3.4']
    

    Jeśli nie dodasz adresu URL do wyników tablicy, zostanie wyświetlony następujący błąd:

    DisallowedHost at / Invalid HTTP_HOST header: '<site URL>'. You might need to add '<site URL>' to ALLOWED_HOSTS.
    

Gdy tablica jest pusta, platforma Django automatycznie zezwala na 'localhost' i '127.0.0.1' jako hosty. Jeśli dodasz adres URL środowiska produkcyjnego, te witryny hostujące nie będą automatycznie akceptowane. Z tego powodu możesz chcieć zachować oddzielne kopie programistyczne i produkcyjne pliku settings.py lub użyć zmiennych środowiskowych do kontrolowania wartości środowiska uruchomieniowego.

Wdrażanie do IIS lub na maszynie wirtualnej z systemem Windows

Jeśli masz prawidłowy plik web.config w projekcie, możesz opublikować go na komputerze z uruchomionymi usługami IIS z Poziomu Eksploratora rozwiązań. Kliknij prawym przyciskiem myszy projekt, wybierz pozycję Publikuj, a następnie wybierz pozycję IIS, FTP itp.. W takiej sytuacji program Visual Studio kopiuje tylko pliki projektu na serwer. Odpowiadasz za całą konfigurację po stronie serwera.