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ą w języku Python, aby umożliwić usługom IIS prawidłowe przetwarzanie kodu języka Python. Konfiguracja jest realizowana za pomocą ustawień w web.config pliku aplikacji internetowej w języku Python. W tym artykule opisano sposób konfigurowania niezbędnych ustawień.

Wymagania 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 pip install -r requirements.txt polecenie .

Ustaw plik 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) uruchomiony w systemie Windows o tym, jak powinien obsługiwać żądania języka Python za pośrednictwem programu HttpPlatformHandler (zalecane) lub FastCGI. Program Visual Studio w wersji 2015 lub starszej automatycznie wprowadza te modyfikacje. W przypadku programu Visual Studio 2017 lub nowszego web.config należy ręcznie zmodyfikować plik.

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

Konfigurowanie programu HttpPlatformHandler

Moduł HttpPlatform przekazuje połączenia gniazd bezpośrednio do autonomicznego procesu języka Python. To przekazywanie umożliwia uruchamianie dowolnego serwera internetowego, ale wymaga skryptu uruchamiania, który uruchamia lokalny serwer internetowy. 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>web.config pliku. Atrybut processPath wskazuje interpreter języka Python rozszerzenia witryny. Atrybut arguments wskazuje skrypt uruchamiania, który uruchamia lokalny serwer internetowy, w tym przypadku runserver.pyi 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 HTTP_PLATFORM_PORT środowiskowa zawiera port, na którym serwer lokalny powinien nasłuchiwać połączeń z programu 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.

Konfigurowanie programu obsługi FastCGI

FastCGI to interfejs, który działa na poziomie żądania. Usługi IIS odbierają połączenia przychodzące i przekazują każde żądanie do aplikacji WSGI działającej w co najmniej jednym trwałym procesie języka Python.

Uwaga

Zalecamy skonfigurowanie aplikacji przy użyciu programu HttpPlatformHandler , ponieważ projekt WFastCGI nie jest już utrzymywany.

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

Następnie zmodyfikuj plik aplikacji web.config , aby uwzględnić pełne ścieżki do python.exe pliku wykonywalnego i wfastcgi.py pliku 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 ścieżek.

  1. Zmodyfikuj PythonHandlerweb.config wpis w pliku, tak aby ścieżka odpowiadała lokalizacji instalacji języka Python. Aby uzyskać więcej informacji, zobacz Dokumentacja konfiguracji usług IIS (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 web.config pliku 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 <appSettings> wartości są dostępne dla aplikacji jako zmienne środowiskowe:

    • Wartość PYTHONPATH klucza może być bezpłatnie rozszerzona, ale musi zawierać katalog główny aplikacji.
    • Klucz WSGI_HANDLER musi wskazywać aplikację WSGI importowalne z aplikacji.
    • Klucz WSGI_LOG jest opcjonalny, ale klucz jest zalecany do debugowania aplikacji.
  3. WSGI_HANDLER Ustaw wpis w web.config pliku zgodnie z potrzebami dla używanej platformy:

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

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: zmień wartość na WSGI_HANDLER<project_name>.app gdzie <project_name> jest zgodna z nazwą projektu. Dokładny identyfikator można znaleźć, przeglądając instrukcję from <project_name> import apprunserver.py w pliku. Jeśli na przykład projekt ma nazwę FlaskAzurePublishExample, wpis pojawia się 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 dla projektów Django potrzebne web.config są dwie zmiany.

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

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

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Tylko aplikacje Django: w pliku projektu settings.py 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 'localhost' na hosty i '127.0.0.1' jako hosty. Jeśli dodasz adres URL środowiska produkcyjnego, te witryny hosta nie będą automatycznie dozwolone. Z tego powodu możesz chcieć zachować oddzielne kopie settings.py programistyczne i produkcyjne pliku lub użyć zmiennych środowiskowych do kontrolowania wartości środowiska uruchomieniowego.

Wdrażanie w usługach IIS lub maszynie wirtualnej z systemem Windows

Jeśli masz prawidłowy web.config plik w projekcie, możesz opublikować go na komputerze z uruchomionymi usługami IIS z Eksplorator 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.