DjangoをローカルIISにデプロイして動かす

「PythonとWindows…?」という疑問が生じましたが、仕事での要件なので仕方ありません。

調査しながら進めましたが、思っていた以上に情報が少なくて苦労したのでメモ。

環境
  • Windows11 Home
  • VisualStudio2022
  • django>=3.2.14(requirements.txtより)

Pythonのインストール

Djangoアプリケーションを動かすためにはPythonのインストールが必要です。

Pythonのインストールについては以下を参照ください。

Stable Diffusionのローカル環境構築

VisualStudio2022のインストール

本記事ではDjangoプロジェクト作成および一部ファイルのテンプレート利用のためにVisualStudioを使用しました。

VisualStudio2022のインストール方法については以下を参照ください。

VisualStudio2022のインストール

IISの有効化とHttpPlatformHandlerのセットアップ

デプロイ先であるIISはWindowsの機能ですが、デフォルトでは有効化されていません。

IIS有効化の方法については以下を参照ください。

IISの有効化

また、IIS上でアプリケーションを動かすためのインターフェースが必要になります。

よく使われていたのがFastCGIでしたが、現在推奨されているのはHttpPlatformHandler。

FastCGIはWindowsの機能で有効化できましたが、HttpPlatformHandlerはインストーラーが必要になります。

詳しいセットアップについては以下を参照ください。

httpPlatformHandlerの有効化

Djangoプロジェクトの作成

Python開発だとVisualStudioCodeやPyCharmが一般的かと思います。

ですが今回はIISが絡んでいることもあって「VisualStudioの方が良いんじゃね?」と思い、VisualStudioでプロジェクト作成から実施しました。

VisualStudioでのDjangoプロジェクト作成(および実行までの)方法については以下を参照ください。

VisualStudioでDjango

IISでDjangoを動かす

前置きが長くなりました。本題です。

IISでDjangoを動かす手順はざっくり以下の通りです。

  1. web.configの作成
  2. Djangoプロジェクトの静的ファイル収集
  3. IISの公開フォルダ作成(デプロイ)
    1. プロジェクトの移動
    2. ログフォルダの作成
  4. サイトバインド
  5. IISユーザーへの権限付与

順番に詳しく説明していきます。

web.configの作成

HttpPlatformHandler用の設定ファイルになります。

VisualStudioを使用する場合、テンプレートが利用可能です。

プロジェクトを右クリックし、「追加」から「新しい項目」をクリックします。

ポップアップしたダイアログから「すべてのテンプレートの表示」をクリックします。

「Azure web.config(HttpPlatformHandler)」を選んで「追加」をクリックします。

作成されたweb.configの中身は以下の通り。

<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="D:\home\Python35\python.exe"
                  arguments="D:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="D:\home\LogFiles\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="PYTHONPATH" value="" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

これを以下の通り書き換えます。

<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="(Python実行ファイルのパス)"
                  arguments=".\manage.py runserver %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile=".\logs\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="PYTHONPATH" value="" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

(Python実行ファイルのパス)については、先述の記事と同様にセットアップしている場合、「”C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python310\python.exe”」となります。

Djangoプロジェクトの静的ファイル収集

Djangoアプリケーションを公開するには、静的ファイル群をstaticフォルダにまとめて配置する必要があるらしいです。

一般的にはコマンドでやる手順らしいですが、VisualStudioでは以下の通りできます。

上記を実行すると、プロジェクトルートにstaticフォルダが作成されます。

IISの公開フォルダ作成(デプロイ)

IISの公開フォルダを作成します。

作成場所はどこでも行けると思いますが、今回はIISのフォルダを使います。

「C:\inetpub」配下に「Django」フォルダを作成。

プロジェクトの移動

プロジェクトフォルダから以下のフォルダおよびファイルを、先ほど作成したDjangoフォルダ配下にコピーします。

ログフォルダの作成

Django配下に「logs」フォルダを作成します。

サイトバインド

作成したフォルダをIISで公開するように設定します。

「インターネットインフォメーションサービス(IIS)マネージャー」を開き、左ペインの「サイト」を右クリックし、「Webサイトの追加」をクリックします。(SS取り忘れましたごめんなさい)

以下の通り設定します。

設定が完了するとIISマネージャー上でサイトが追加されたことが確認できます。

IISユーザーへの権限付与

最後に、Djangoアプリケーションを実行する権限を付与していきます。

権限を追加するユーザー
  • IUSR
  • IIS_IUSRS
権限を追加するフォルダ
  • Python実行ファイル
  • Djangoアプリケーションフォルダ

Djangoアプリケーションフォルダを例に手順を説明します。

まず、対象となるフォルダを右クリックし「プロパティ」をクリック、「セキュリティ」タブから「編集」をクリックします。

「追加」をクリックします。

開いたウィンドウで対象ユーザーを入力します。

「IUSR」と入力してEnterを押すと上記の様な表示(下線あり)になります。

同様にIIS_IUSRSも追加し、「OK」をクリックします。

適切なアクセス許可を設定して完了。(Pythonは実行できればOK、IISは書き込みも)

ローカルIISのDjangoアプリケーションを実行

ここまで完了したら「http://localhost:8080/」にアクセスしてみましょう。

ローカルIISにデプロイしたDjangoアプリケーションが開きます。

まとめ

IISでDjangoを動かす手順(完全版)
  1. Pythonインストール
  2. IIS有効化
  3. HttpPlatformHandlerの有効化
  4. Djangoアプリケーションの作成
  5. IISにデプロイする準備
    1. web.configの作成
    2. Djangoプロジェクトの静的ファイル収集
  6. IISの公開フォルダ作成(デプロイ)
    1. プロジェクトの移動
    2. ログフォルダの作成
  7. サイトバインド
  8. IISユーザーへの権限付与

珍しく頑張ったと思う部類でした。

以上です。