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ユーザーへの権限付与

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

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA