Windows7 + IISでDjangoをホストする方法がないかを調べたところ、以下にてwfastcgiを知りました。
Python アプリケーション WSGIサーバ for Windows - NAVER まとめ
また、production環境でもvirtualenvを使ったほうが良さそうだったため、virtualenv + wfastcgiでのDjangoホストを試してみました。
python - Is virtualenv recommended for django production server? - Stack Overflow
環境
また、今回のディレクトリ構成は以下となります。
IISのインストール
wfastcgiを使うために、Windows7にIISおよびFastCGIをインストールします。
- コントロールパネル > プログラムと機能 > Windowsの機能の有効化または無効化
インターネット インフォメーション サービス
にチェックを入れる- 追加で、 World Wide Webサービス > アプリケーション開発機能 >
CGI
にもチェックを入れる
IISのバージョンや制限、およびインストール方法は以下を参考にしました。
- クライアント版Windowsに付属するIISの制限 - @IT
- Windows 7 Professional、Enterprise、または Ultimate への IIS 7.5 のインストール - TechNet
- IIS 7 で FastCGI を有効にする - TechNet
IISの動作ポート変更
管理ツールのインターネット インフォメーション サービス(IIS) マネージャーにて、IISの動作ポートを変更します。
なお、管理ツールが存在しない場合、以下を参考に管理ツールを表示させます。
Windows 7 の [スタート] メニューに管理ツールを表示する - TechNet
インターネット インフォメーション サービス(IIS) マネージャーでは、以下の操作を行います。
- 左にある接続ペインより、 コンピュータ名 > サイト >
Default Web Site
を選択 - 右にある操作ペインより、
バインド...
をクリック - httpのバインドを、80から
9999
に変更 - 操作ペインのWebサイトの管理より、
開始
をクリック 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
)を作成します。
ファイルで指定する内容は以下の通りです。
WSGI_HANDLER
には、django.core.handlers.wsgi.WSGIHandler()
ではなく、django.core.wsgi.get_wsgi_application()
を指定- Django1.7にて、その部分に関する破壊的変更が入ったため、
WSGIHandler()
を使おうとするとエラーになる
- Django1.7にて、その部分に関する破壊的変更が入ったため、
PYTHONPATH
には、Djangoプロジェクトのルートを指定- 今回は、
C:\django_iis
- 今回は、
DJANGO_SETTINGS_MODULE
には、settingsファイルの名前を指定scriptProcessor
の値は、上記のwfastcgi-enable
にて出力された値を指定- 今回は、virtualenv内の値
ファイル全体は以下の通りです。
なお、ファイル中にコメント(<-- -->
)を入れたところ、構成ファイルは整形式の 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>
動作確認
- IISマネージャーの左の接続ペインで Default Web Site を選択
- 右の操作ペインで再起動をします。
http://localhost:9999/
にアクセスし、Djangoが動作していることを確認します。