WindowsのIISでdjangoを起動する

Windowsのインターネット インフォメーション サービス(IIS)でdjangoを常時起動する方法を記載しています。

設定方法

  1. Windowsメニューで「Windowsの機能の有効化または無効化」を検索して開きます。
  1. 「インターネット インフォメーション サービス」にチェックを入れ、同フォルダ内の「CGI(World Wide Web サービス > アプリケーション開発機能)」にもチェックを入れてOKをクリックします。「必要な変更が完了しました」と表示されたら「閉じる」をクリックします。
  1. ブラウザで以下のURLにアクセスし、IISの青い画像が表示されたら正常に有効化されています。
http://localhost/
  1. WindowsにPythonがインストールされていなければ公式サイトからダウンロードしてインストールします。
  1. Git bashを管理者として実行し、任意のフォルダに仮想環境を作成し、仮想環境を起動します。
python -m venv 環境名
source 環境名/Scripts/activate
  1. 仮想環境にdjangoとwfastcgiとその他必要なライブラリをインストールします。==でバージョンを指定できます。
pip install django==2.2.*
pip install wfastcgi
  1. IISにwfastcgiを登録します。この時に出力される"ファイルパス" can not be used as a FastCGI script processor"ファイルパス"は後で使うのでメモしておきます。
環境名/Scripts/wfastcgi-enable.exe
  1. 任意のディレクトリにdjangoプロジェクトを作成します。
django-admin startproject プロジェクト名
  1. Windowsメニューから「インターネット インフォメーション サービス(IIS)マネージャー」を開きます。画面左側の「サイト」一覧に既に存在する「Default Web Site」は停止または削除します。「サイト」右クリックして「Webサイトの追加」を選択します。適当な「サイト名」を入力し、物理パスはdjangoプロジェクトのフォルダを選択します(manage.pyのあるフォルダ)。
  1. 作成したWebサイトの「構成エディター」をダブルクリックし、セクション「system.webServer/handlers」を開き、画面右側の「セクションのロックを解除」をクリックします。
  1. 作成したWebサイトの「認証」をダブルクリックし、「匿名認証」を右クリックして編集を選択します。匿名ユーザーIDを「アプリケーション プール ID」に変更してOKをクリックします。
  1. 作成したWebサイトの「ハンドラーマッピング」をダブルクリックし、画面右側の「スクリプトマップの追加」をクリックします。「要求パス」に*.pyを入力し、「実行可能ファイル」は仮想環境のScriptsフォルダ内のpython.exeを選択します。選択後はパスの前後に"を付け、末尾に %s %sを付け加えます。適当な「名前」を入力し、OKをクリックします。
例:
"C:\Users\user\env\Scripts\python.exe" %s %s
  1. 拡張子が.pyのファイルはPythonで開かれるように既定のプログラムを変更します。たまにエディタで開くように設定されている場合があります。
  1. djangoプロジェクトのmanage.pyがあるフォルダにweb.configがなければ作成し、エディタで開いて中身を下記に設定します。WSGI_HANDLERDJANGO_SETTINGS_MODULEにはプロジェクト内のsettings.pyがあるフォルダ名を指定します。PYTHONPATHにはmanage.pyのあるプロジェクトフォルダパスを指定します。はscriptProcessorにはIISにwfastcgiを登録したときに表示されたファイルパスを代入します。
<configuration>
  <appSettings>
    <add key="WSGI_HANDLER" value="プロジェクト内のサブフォルダ.wsgi.application" />
    <add key="PYTHONPATH" value="C:\Users\django_project" />
    <add key="DJANGO_SETTINGS_MODULE" value="プロジェクト内のサブフォルダ.settings" />
  </appSettings>
  <system.webServer>
    <handlers>
        <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Users\env\Scripts\python.exe|C:\Users\env\lib\site-packages\wfastcgi.py" resourceType="Unspecified" />
    </handlers>
  </system.webServer>
</configuration>
  1. 開発環境と異なり、画像などの静的ファイルは別途構成する必要があります。djangoプロジェクトのsettings.pyをエディタで開き、プロジェクトフォルダパスに/staticを付け加えた以下の行を追加します。(バックスラッシュまたは円記号ではなくスラッシュにしないとエラーになります)
STATIC_ROOT = 'C:/Users/django_project/static'

# DEBUGもFalseにしておく
DEBUG = False

Git bashで以下のコマンドを実行し、静的ファイルを上記で指定したフォルダに集積します。

python manage.py collectstatic

集積後はstaticフォルダ内に新たにweb.configファイルを作成し、エディタで開いて中身を下記に設定します。

<configuration>
  <system.webServer>
    <handlers>
      <remove name="Python FastCGI" />
    </handlers>
  </system.webServer>
</configuration>
  1. 仮想環境のフォルダとdjangoプロジェクトのフォルダに対してIISがアクセスできるように権限を付与します。エクスプローラーで各フォルダを右クリックし、「プロパティ」を開き、「セキュリティ」タブで「編集」をクリックし、「追加」をクリックします。「選択するオブジェクト名」にIIS AppPool\サイト名を入力し、「名前の確認」をクリックし、OKをクリックします。「アクセス許可」はフルコントロールにし、OKをクリックします。
  1. 「インターネット インフォメーション サービス(IIS)マネージャー」でWebサイトを再起動し、ブラウザで以下のURLにアクセスしてサイトが開けば正常にサイトが稼働しています。
http://localhost/