背景
Django の IIS へのデプロイを目指していたが苦難を乗り越えられず断念。
Apache へのデプロイは楽勝だという記事が多かったので乗り換えることにしたのだが・・・
windows10
Apache-2.4.33-win64-VC15
Python-3.6.5-amd64
Django-2.0.6
混ぜるな危険
Python と Apache は両方とも x64 なり x86 なりで合わせること。
違っていたらダメ、絶対。
むかし入れた Python が 32bit 版だったのに Apache24 を x64 で入れてしまい、ハマりまくりました。
いちど盲点に入ってしまったら、もう気づきません。
正しく入れる方法
環境によっては必要なもの
Apache を動かすにはこれが必要らしいので入れました。
Visual Studio 2017 の Microsoft Visual C++ 再頒布可能パッケージ x64
python の拡張モジュールを入れるにはこれが必要らしいので入れました。
Build Tools for Visual Studio 2017
Apache のインストール
httpd-2.4.33-win64-VC15.zip をダウンロード
解凍して出てきた \Apache24 を c:\ 以下にそのまま設置
Apache の単体動作確認
管理者権限でコマンドシェルを開き c:\Apache24\bin で以下を実行。
httpd -k install
httpd -k start
ブラウザを立ち上げ http://localhost/ を見て "It works." と画面に出れば OK。
mod_wsgi のインストール
ただ Apache を入れるだけでは Django は動かせない。Python プログラムを Apache で動かすための WSGI というモジュールが必要。
mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl をダウンロード。
このファイルを pip でインストールする。
pip install mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl
python36 フォルダに作成されたモジュールを Apache フォルダに移動。このモジュールは mod_wsgi.so というファイル名だという記事が多く見つかるが、そういう名前ではなく mod_wsgi.cp36-win_amd64.pyd という名前になっていた。
以下を実行
C:\Program Files\Python36\Lib\site-packages\mod_wsgi\server に作成された
mod_wsgi.cp36-win_amd64.pyd を
C:\Apache24\modules に移動
httpd.conf を編集
既存の C:/Apache24/conf/httpd.conf ファイルを編集し設定する。
モジュール部分の記載
LoadModule wsgi_module /Apache24/modules/mod_wsgi.cp36-win_amd64.pyd
サーバー名の記載。これを書かないと起動時に毎回警告が出てうざい。
ServerName 127.0.0.1:80
Python 関係の記載。ファイルの最後に以下を付け足せばよい。
WSGIScriptAlias / /develop/Python/mysite/mysite/wsgi.py
WSGIPythonPath /develop/Python/mysite
<Directory /develop/Python/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
メモ
インストールの過程で警告が出て scripts にパスがないと言われることがよくあるが、Windows 環境変数の一覧を見たら入っていることが多い。その場合はもちろん問題ない。
インストール作業中に Apache を起動してみたとき、なぜか重複起動してしまうことがあるので注意。すでにポートが使われているというような意味のことを言われる。Apache を一度止めて起動しなおす。
インストール作業中の動作確認はコントロールパネルのサービスでやるよりも、管理者権限のコマンドシェルで作業をした方がやりやすい。インストールや起動停止のコマンドは以下の通り。
ただし、コントロールパネルのサービスでしか出ないエラーメッセージとか、その逆とかがあるので、両方をうまく使った方がよい。
httpd -k install
httpd -k uninstall
httpd -k start
httpd -k stop