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

Pokud používáte Internetová informační služba (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 v Pythonu tak, aby služba IIS správně zpracovávala kód Pythonu. Konfigurace se provádí prostřednictvím nastavení v web.config souboru pro webovou aplikaci Python. 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 pip install -r requirements.txt příkazu.

Nastavení web.config tak, aby odkazovat na interpret Pythonu

Soubor web.config pro vaši aplikaci v Pythonu dává webovému serveru SLUŽBY 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ší proveďte tyto úpravy automaticky. Pro Visual Studio 2017 a novější je nutné soubor upravit web.config ručně.

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

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 web.config souboru. Atribut processPath odkazuje na interpret Pythonu rozšíření webu. 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 poskytnout:

<?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 HTTP_PLATFORM_PORT proměnná prostředí obsahuje port, na který má 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.

Konfigurace obslužné rutiny 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:

Ke konfiguraci aplikací doporučujeme použít HttpPlatformHandler , protože projekt WFastCGI už není zachován.

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

Dále upravte soubor aplikace web.config tak, aby zahrnoval úplné cesty ke spustitelnému python.exe souboru a wfastcgi.py souboru v klíči PythonHandler . Následující kroky předpokládají, že python je 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. PythonHandler Upravte položku v web.config souboru tak, aby cesta odpovídala umístění instalace Pythonu. Další informace naleznete v tématu Referenční informace ke konfiguraci 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. <appSettings> V části web.config souboru 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 dostupné jako proměnné prostředí:

    • Hodnota PYTHONPATH klíče 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. WSGI_HANDLER Podle potřeby nastavte položku v web.config souboru pro architekturu, kterou používáte:

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

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: Změňte WSGI_HANDLER hodnotu na místo, kde <project_name>.app<project_name> odpovídá názvu projektu. Přesný identifikátor najdete tak, že se podíváte na from <project_name> import app příkaz v runserver.py souboru. Pokud je projekt například pojmenovaný 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 projekty Django jsou potřeba web.config dvě změny.

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

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

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Pouze aplikace Django: Do souboru projektu settings.py Django přidejte do položky doménu adresy URL webu nebo IP adresu 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 settings.py souboru 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 ho publikovat do počítače se spuštěnou službou IIS z Průzkumník řešení. Klikněte pravým tlačítkem myši na projekt, vyberte Publikovat a 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.