Windows7 + IIS + virtualenv + wfastcgiで、Djangoをホストする

Windows7 + IISDjangoをホストする方法がないかを調べたところ、以下にてwfastcgiを知りました。
Python アプリケーション WSGIサーバ for Windows - NAVER まとめ

また、production環境でもvirtualenvを使ったほうが良さそうだったため、virtualenv + wfastcgiでのDjangoホストを試してみました。
python - Is virtualenv recommended for django production server? - Stack Overflow

 

環境

 
また、今回のディレクトリ構成は以下となります。

 

IISのインストール

wfastcgiを使うために、Windows7IISおよびFastCGIをインストールします。

  1. コントロールパネル > プログラムと機能 > Windowsの機能の有効化または無効化
  2. インターネット インフォメーション サービス にチェックを入れる
  3. 追加で、 World Wide Webサービス > アプリケーション開発機能 > CGI にもチェックを入れる

 
IISのバージョンや制限、およびインストール方法は以下を参考にしました。

 

IISの動作ポート変更

管理ツールのインターネット インフォメーション サービス(IIS) マネージャーにて、IISの動作ポートを変更します。

なお、管理ツールが存在しない場合、以下を参考に管理ツールを表示させます。
Windows 7 の [スタート] メニューに管理ツールを表示する - TechNet

 
インターネット インフォメーション サービス(IIS) マネージャーでは、以下の操作を行います。

  1. 左にある接続ペインより、 コンピュータ名 > サイト > Default Web Site を選択
  2. 右にある操作ペインより、バインド...をクリック
  3. httpのバインドを、80から9999に変更
  4. 操作ペインのWebサイトの管理より、開始をクリック
  5. http://localhost:9999/ にアクセスし、IIS7の画面が表示されればOK

 

Pythonのダウンロードとインストール

Python3.4.3のダウンロードとインストールを行います。

  • インストール対象: Windows x86 MSI installer
  • インストール先: C:\Python34\
  • Customize Python 3.4.3 Window: Add python.exe to Pathにチェックを入れる

 

グローバルのPythonパッケージについて

pipのアップデート
# 最初にインストールされているものを確認
C:\>pip list
You are using pip version 6.0.8, however version 7.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
pip (6.0.8)
setuptools (12.0.5)

# pipが古くて出た警告のため、pipをアップデート
C:\>pip install --upgrade pip
...
C:\>pip list
pip (7.1.2)
setuptools (12.0.5)

 

virtualenvのインストール
# インストール
C:\>pip install virtualenv
Collecting virtualenv
  Downloading virtualenv-13.1.2-py2.py3-none-any.whl (1.7MB)
    100% |################################| 1.7MB 145kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-13.1.2

# 確認
C:\>pip list
pip (7.1.2)
setuptools (12.0.5)
virtualenv (13.1.2)

 

virtualenv環境にDjangoとwfastcgiをインストール

# フォルダ作成と移動
C:\>mkdir django_iis
C:\>cd django_iis

# env以下に、virtualenv環境を作成
C:\django_iis>virtualenv env
Using base prefix 'c:\\python34'
New python executable in env\Scripts\python.exe
Installing setuptools, pip, wheel...done.

# Activate
C:\django_iis>env\Scripts\activate
(env) C:\django_iis>

# Djangoのインストール
(env) C:\django_iis>pip install django
Collecting django
  Using cached Django-1.8.5-py2.py3-none-any.whl
Installing collected packages: django
Successfully installed django-1.8.5

# wfastcgiのインストール
(env) C:\django_iis>pip install wfastcgi
Collecting wfastcgi
  Using cached wfastcgi-2.2-py2.py3-none-any.whl
Installing collected packages: wfastcgi
Successfully installed wfastcgi-2.2

# 確認
(env) C:\django_iis>pip list
Django (1.8.5)
pip (7.1.2)
setuptools (18.2)
wfastcgi (2.2)
wheel (0.24.0)

 

Djangoプロジェクトの作成と動作確認

# Djangoプロジェクトの作成
(env) C:\django_iis>django-admin.py startproject hello
(env) C:\django_iis>cd hello
(env) C:\django_iis\hello>python manage.py migrate
Operations to perform:
...
  Applying sessions.0001_initial... OK

# 動作確認
# http://localhost:8000/ にアクセスし、It worked!が出ればOK
(env) C:\django_iis\hello>python manage.py runserver
...
Django version 1.8.5, using settings 'hello.settings'
Starting development server at http://127.0.0.1:8000/

 

IISの設定

以下を参考に、IISにおけるwfastcgiの設定を行います。
Django を使用した Python Web アプリケーション | Microsoft Azure

 

# ロックの解除
(env) C:\django_iis\hello>%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers
構成パス "MACHINE/WEBROOT/APPHOST" のセクション "system.webServer/handlers" のロックを解除しました。

# wfastcgi-enableの実行
# PyPIの説明(https://pypi.python.org/pypi/wfastcgi)に従って、wfastcgi-enableを実行
(env) C:\django_iis\hello>wfastcgi-enable
構成変更を構成コミット パス "MACHINE/WEBROOT/APPHOST" の "MACHINE/WEBROOT/APPHOST" のセクション "system.webServer/fastCgi" に適用しました
"c:\django_iis\env\scripts\python.exe|c:\django_iis\env\lib\site-packages\wfastcgi.py" can now be used as a FastCGI script processor
   
# Default Web Siteのパスを変更
(env) C:\django_iis\hello>%windir%\system32\inetsrv\appcmd set vdir "Default Web Site/" -physicalPath:"C:\django_iis\hello"
VDIR オブジェクト "Default Web Site/" は変更されました

 

web.configファイルの作成

上記のAzureの資料を参考に、web.configファイル(C:\django_iis\hello\web.config)を作成します。

ファイルで指定する内容は以下の通りです。

 
ファイル全体は以下の通りです。

なお、ファイル中にコメント(<-- -->)を入れたところ、構成ファイルは整形式の xml ではありませんというエラーが発生したため、コメント入れていません。

<configuration>
  <appSettings>
    <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
    <add key="PYTHONPATH" value="C:\django_iis" />
    <add key="DJANGO_SETTINGS_MODULE" value="hello.settings" />
  </appSettings>
  <system.webServer>
    <handlers>
        <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="c:\django_iis\env\scripts\python.exe|c:\django_iis\env\lib\site-packages\wfastcgi.py" resourceType="Unspecified" />
    </handlers>
  </system.webServer>
</configuration>

 

動作確認

  1. IISマネージャーの左の接続ペインで Default Web Site を選択
  2. 右の操作ペインで再起動をします。
  3. http://localhost:9999/ にアクセスし、Djangoが動作していることを確認します。

f:id:thinkAmi:20151025215534p:plain