IIS 用に Python Web アプリを構成する
インターネット インフォメーション サービス (IIS) を Windows コンピューター上の Web サーバー (Azure 上の Windows 仮想マシン含む) として使用する場合は、IIS が Python コードを適切に処理できるように Python Web アプリケーションを構成する必要があります。 この構成は、Python Web アプリの web.config
ファイルの設定によって実現されます。 この記事では、必要な設定を構成する方法について説明します。
前提 条件
インストールされている Windows 上の Python。 Web アプリを実行するには、まず、必要なバージョンの Python を Windows ホスト コンピューターに直接インストールします。詳細については、「Python インタープリターをインストール。
python.exe
インタープリターの場所を特定します。 便宜上、その場所を PATH 環境変数に追加できます。
必要なパッケージがインストールされています。 専用ホストの場合は、仮想環境ではなく、グローバル Python 環境を使用してアプリを実行できます。 したがって、
pip install -r requirements.txt
コマンドを実行して、アプリのすべての要件をグローバル環境にインストールできます。
Python インタープリターを指す web.config を設定する
Python アプリケーションの web.config
ファイルは、Windows で実行されている IIS Web サーバー (バージョン 7 以降) に、HttpPlatformHandler (推奨) または FastCGI を介した Python 要求の処理方法を指示します。 Visual Studio バージョン 2015 以前では、これらの変更は自動的に行います。 Visual Studio 2017 以降では、web.config
ファイルを手動で変更する必要があります。
プロジェクトに web.config
ファイルがまだ含まれていない場合は、プロジェクト ディレクトリを右クリックし、[新しい項目の追加]> 選択して、web.config
を検索するか、空の web.config
XML ファイルを作成して追加できます。
オプション 1: HttpPlatformHandler を構成する
HttpPlatform モジュールは、スタンドアロンの Python プロセスにソケット接続を直接渡します。 このパススルーを使用すると、任意の Web サーバーを実行できますが、ローカル Web サーバーを実行するスタートアップ スクリプトが必要です。 このアプローチは、通常、Flask や Django などの Python Web フレームワークを使用して行われます。 スクリプトは、web.config
ファイルの <httpPlatform>
要素で指定します。 processPath
属性は、サイト拡張機能の Python インタープリターを指します。 arguments
属性は、ローカル Web サーバーを実行するスタートアップ スクリプト (この場合は runserver.py
) と、あなたが提供したい任意の引数を指します。
<?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>
この例では、HTTP_PLATFORM_PORT
環境変数には、ローカル サーバーが localhost
からの接続をリッスンする必要があるポートが含まれています。 この例では、SERVER_PORT
別の環境変数を作成する方法も示します。 必要に応じて環境変数を作成して割り当てることができます。
オプション 2: FastCGI ハンドラーを構成する
または、FastCGI を使用してアプリを構成することもできます。 FastCGI は、要求レベルで動作するインターフェイスです。 IIS は受信接続を受信し、1 つ以上の永続的な Python プロセスで実行されている WSGI アプリに各要求を転送します。
手記
FastCGI を使用してプロジェクトをセットアップできますが、WFastCGI プロジェクトは維持されなくなり、バグが発生する可能性があるため、httpPlatformHandler を使用してアプリを構成することをお勧めします。
FastCGI を使用するには、最初に wfastcgi パッケージをインストールし、pypi.org/project/wfastcgi/で説明されているように構成します。
次に、アプリケーションの web.config
ファイルを変更して、python.exe
実行可能ファイルへの完全なパスと wfastcgi.py
ファイルを PythonHandler
キーに含めます。 次の手順では、python が c:\python36-32 フォルダーにインストールされ、アプリ コードが c:\home\site\wwwroot フォルダーにあると仮定します。 それに応じて、パスに合わせてこれらの値を調整します。
パスが Python のインストール場所と一致するように、
web.config
ファイルのPythonHandler
エントリを変更します。 詳細については、「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>
web.config
ファイルの<appSettings>
セクションで、WSGI_HANDLER
、WSGI_LOG
(省略可能)、および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>
これらの
<appSettings>
値は、環境変数としてアプリで使用できます。PYTHONPATH
キーの値は自由に拡張できますが、アプリのルートを含める必要があります。WSGI_HANDLER
キーは、アプリからインポート可能な WSGI アプリを指している必要があります。WSGI_LOG
キーは省略可能ですが、アプリのデバッグにはキーをお勧めします。
使用しているフレームワークに応じて、
web.config
ファイルのWSGI_HANDLER
エントリを設定します。Bottle: 次の例に示すように、
app.wsgi_app
値の後に丸括弧を追加します。 オブジェクトが変数ではなく関数であるため、かっこが必要です。 構文は、app.py
ファイルで確認できます。<!-- Bottle apps only --> <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
Flask:
<project_name>
がプロジェクトの名前と一致する場合は、WSGI_HANDLER
の値を<project_name>.app
に変更します。runserver.py
ファイル内のfrom <project_name> import app
ステートメントを調べることで、正確な識別子を見つけることができます。 たとえば、プロジェクトの名前がFlaskAzurePublishExample
の場合、エントリは次のように表示されます。<!-- Flask apps only: Change the project name to match your app --> <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
Django: Django プロジェクトの
web.config
ファイルに 2 つの変更が必要です。WSGI_HANDLER
の値をdjango.core.wsgi.get_wsgi_application()
に変更します。 オブジェクトはwsgi.py
ファイル内にあります。<!-- Django apps only --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
WSGI_HANDLER
キーのエントリの直後に、次のエントリを追加します。DjangoAzurePublishExample
値をプロジェクトの名前に置き換えます。<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Django アプリのみが: Django プロジェクトの
settings.py
ファイルで、サイトの URL ドメインまたは IP アドレスをALLOWED_HOSTS
エントリに追加します。 '1.2.3.4' を URL または IP アドレスに置き換えます。# Change the URL or IP address to your specific site ALLOWED_HOSTS = ['1.2.3.4']
配列の結果に URL を追加しないと、次のエラーが表示されます。
DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
配列が空の場合、Django は自動的にホストとして 'localhost'
と '127.0.0.1'
を許可します。 運用 URL を追加した場合、これらのホスト サイトは自動的には許可されません。 このため、settings.py
ファイルの開発と運用のコピーを個別に保持するか、環境変数を使用してランタイム値を制御することができます。
IIS または Windows 仮想マシンにデプロイする
プロジェクトに正しいweb.config
ファイルがある場合、ソリューション エクスプローラーからIISを実行中のコンピューターに発行できます。 プロジェクトを右クリックし、発行を選択し、IIS、FTP などを選択します。 この状況では、Visual Studio はプロジェクト ファイルのみをサーバーにコピーします。 すべてのサーバー側の構成は、お客様が担当します。
関連コンテンツ
- IIS 構成リファレンス (iis.net)
- Python インタープリター をインストールする
- Azure での Windows 仮想マシン