Sdílet prostřednictvím


Konfigurace webových aplikací v Pythonu pro službu IIS

Pokud používáte internetovou informační službu (IIS) jako webový server na počítači s Windows (včetně virtuálních počítačů s Windows v Azure), musíte nakonfigurovat webovou aplikaci Python tak, aby služba IIS správně zpracovávala kód Pythonu. Konfigurace se provádí prostřednictvím nastavení v souboru web.config webové aplikace v Pythonu. Tento článek popisuje, jak nakonfigurovat potřebná nastavení.

Požadavky

  • Python je nainstalovaný ve Windows. Pokud chcete spustit webovou aplikaci, nejprve nainstalujte požadovanou verzi Pythonu přímo na hostitelský počítač s Windows, jak je popsáno v tématu Instalace interpretů Pythonu.

    • Určete umístění interpreta python.exe. Pro usnadnění můžete toto umístění přidat do proměnné prostředí PATH.
  • Nainstalované požadované balíčky. Pro vyhrazeného hostitele můžete ke spuštění aplikace místo virtuálního prostředí použít globální prostředí Pythonu. Proto můžete nainstalovat všechny požadavky vaší aplikace do globálního prostředí spuštěním příkazu pip install -r requirements.txt.

Nastavte web.config tak, aby odkazoval na interpret Pythonu.

Soubor web.config vaší aplikace v Pythonu dává webovému serveru IIS (verze 7 nebo novější) ve Windows pokyn, jak by měl zpracovávat požadavky Pythonu prostřednictvím HttpPlatformHandler (doporučeno) nebo FastCGI. Visual Studio verze 2015 a starší tyto úpravy provádějí automaticky. Pro Visual Studio 2017 a novější je nutné soubor web.config upravit ručně.

Pokud projekt ještě neobsahuje soubor web.config, můžete ho přidat tak, že kliknete pravým tlačítkem na adresář projektu, vyberete Přidat > Nová položka a vyhledáte web.config nebo vytvoříte prázdný soubor web.config XML.

Možnost 1: Konfigurace obslužné rutiny HttpPlatformHandler

Modul HttpPlatform předává připojení soketů přímo do samostatného procesu Pythonu. Tento průchod umožňuje spustit libovolný webový server, který se vám líbí, ale vyžaduje spouštěcí skript, který spouští místní webový server. Tento přístup se běžně provádí pomocí webové architektury Pythonu, jako je Flask nebo Django. Skript zadáte v <httpPlatform> elementu souboru web.config. Atribut processPath odkazuje na interpret Pythonu webového rozšíření. Atribut arguments odkazuje na spouštěcí skript, který spouští místní webový server, v tomto případě runserver.pya všechny argumenty, které chcete zadat:

<?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>

V tomto příkladu proměnná prostředí HTTP_PLATFORM_PORT obsahuje port, na který má váš místní server naslouchat pro připojení z localhost. Tento příklad také ukazuje, jak vytvořit jinou proměnnou prostředí SERVER_PORT. Proměnné prostředí můžete vytvářet a přiřazovat podle potřeby.

Možnost 2: Konfigurace obslužné rutiny FastCGI

Případně můžete ke konfiguraci aplikací použít FastCGI. FastCGI je rozhraní, které funguje na úrovni požadavku. Služba IIS přijímá příchozí připojení a předává každý požadavek do aplikace WSGI spuštěné v jednom nebo více trvalých procesech Pythonu.

Poznámka

I když můžete projekt nastavit pomocí FastCGI, doporučujeme ke konfiguraci aplikací použít HttpPlatformHandler, protože WFastCGI projekt už není zachován a může vést k chybám.

Chcete-li použít FastCGI, nejprve nainstalujte a nakonfigurujte balíček wfastcgi, jak je popsáno v pypi.org/project/wfastcgi/.

Dále upravte soubor web.config aplikace tak, aby zahrnoval úplné cesty ke spustitelnému souboru python.exe a souboru wfastcgi.py v klíči PythonHandler. Následující kroky předpokládají, že je Python nainstalovaný ve složce c:\python36-32 a kód aplikace je ve složce c:\home\site\wwwroot. Upravte tyto hodnoty pro cesty odpovídajícím způsobem.

  1. Upravte položku PythonHandler v souboru web.config tak, aby cesta odpovídala umístění instalace Pythonu. Další informace naleznete v referenční dokumentaci konfigurace služby 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. V <appSettings> části souboru web.config přidejte klíče pro WSGI_HANDLER, WSGI_LOG (volitelné) a 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>
    

    Tyto <appSettings> hodnoty jsou pro vaši aplikaci k dispozici jako proměnné prostředí:

    • Hodnota klíče PYTHONPATH se dá volně rozšířit, ale musí obsahovat kořen aplikace.
    • Klíč WSGI_HANDLER musí odkazovat na aplikaci WSGI, která se dá importovat z vaší aplikace.
    • Klíč WSGI_LOG je volitelný, ale pro ladění aplikace se doporučuje klíč.
  3. Nastavte položku WSGI_HANDLER v souboru web.config podle toho, jakou architekturu používáte:

    • Bottle: Přidejte závorky za hodnotu app.wsgi_app, jak je ukázáno v tomto příkladu. Závorky jsou nezbytné, protože objekt je funkce spíše než proměnná. Syntaxi můžete zobrazit v souboru app.py.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: Změňte hodnotu WSGI_HANDLER na <project_name>.app, kde <project_name> odpovídá názvu projektu. Přesný identifikátor najdete tak, že se podíváte na příkaz from <project_name> import app v souboru runserver.py. Pokud má projekt například název FlaskAzurePublishExample, položka se zobrazí takto:

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django: Pro soubory projektů Django jsou potřeba dvě změny web.config.

      • Změňte hodnotu WSGI_HANDLER na django.core.wsgi.get_wsgi_application(). Objekt je v souboru wsgi.py.

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Následující položku přidejte hned za položku pro klíč WSGI_HANDLER. Nahraďte hodnotu DjangoAzurePublishExample názvem projektu:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Pouze pro aplikace Django: V souboru projektu Django settings.py přidejte doménu nebo IP adresu URL vašeho webu do záznamu ALLOWED_HOSTS. Nahraďte 1.2.3.4 adresou URL nebo IP adresou:

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

    Pokud adresu URL nepřidáte do výsledků pole, zobrazí se následující chyba:

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

Když je pole prázdné, Django automaticky povolí 'localhost' a '127.0.0.1' jako hostitele. Pokud přidáte produkční adresu URL, nebudou tyto hostitelské weby automaticky povolené. Z tohoto důvodu můžete chtít udržovat samostatné vývojové a produkční kopie souboru settings.py nebo pomocí proměnných prostředí řídit hodnoty modulu runtime.

Nasazení do služby IIS nebo virtuálního počítače s Windows

Pokud máte v projektu správný web.config soubor, můžete publikovat na počítač, který má spuštěnou službu IIS, z Průzkumníka řešení. Klikněte pravým tlačítkem myši na projekt, vyberte Publikovata pak vyberte IIS, FTP atd.. V takovém případě visual Studio kopíruje pouze soubory projektu na server. Zodpovídáte za veškerou konfiguraci na straně serveru.