Windows上でDjangoで作ったアプリをApacheからWSGIで呼べるようにする。
まーWindowsはいばらの道じゃ。
とりあえず必要な資源をダウンロードしておく。ApacheとかPythonとか。PythonはPIPとVirtualEnvも。
①Djangoで適当にアプリを作る。
仮想環境つくる virtualenv venv 仮想環境での作業に変える cd venv Scripts\activate Djangoをインスト pip install django Djangoのバージョン ⇒ 今回は2.0.6 python -m django --version アプリを作る django-admin startproject mysite とりあえず動かして確認 ⇒ http://127.0.0.1:8000/ cd mysite python manage.py runserver
②Apacheの準備
1.ダウンロードしたZipを適当なフォルダに展開しておく 2.confファイルの変更(Apache24\conf\httpd.conf) ⇒ デフォでC:\Apache24みたいになってるところを格納したフォルダのパスに全部変える。 3.動作確認 : コマンドプロンプト上でbin/httpd.exeで動かしたら「http://localhost」にアクセス ⇒ IT WORKS!!って出ればOK。ポート変えてる時はURLは適宜変える。
そしたら、胆のmod_wsgiのインスト。仮想環境上でやってもいいかもだけど、自分は本体(って言い方であってんのかな)の方にインストした。windowsでインストールするやり方は昔はアレコレ大変だったようですが、今は割と楽。調べてて、昔のやり方ではまりそうになったんだけど、mod_wsgiのGitのReadmeにちゃんと書いてあった。やっぱ一次情報をちゃんと読まないとダメですね。これには大部分が昔のやり方で載ってるんだけど、一番上にここに載ってる事はもうやんなって書いてありましたね。
で、今のやり方は↓。
pip install mod_wsgi
これだけ。随分楽になったようで。・・・が、ApacheをC:の直下に展開してないとエラーが出ると言う罠。「No Apache installation can be found. Set the MOD_WSGI_APACHE_ROOTDIR environment to its location.」っていうエラーが出る。C:直下以外にある場合は、この環境変数setしてからじゃないとダメっぽいですね。stackoverflowに質問もあった。 という事で、C:直下以外にある場合は↓の感じ。
set "MOD_WSGI_APACHE_ROOTDIR=F:\Apache32\Apache24" pip install mod_wsgi
で、Apacheには32bit版と64bit版があるんですが、64bit版だとこれでもまだ変なエラーがでる。あきらめて32bit版にしましたとさ。。。
あと、自分のPCにはVisualStudio2017も入ってるんですが、上記のStackOverflow見てると、VisualStudio入ってないとダメそう?mod_wsgiのインストールの中で、コンパイルしてるっぽい?
インストール出来たら↓。
mod_wsgi-express module-config
上記のコマンド実行すると↓感じの設定文字列が出てくるので、これをApacheのhttpd.confにコピペする。
LoadFile "f:/python36/python36.dll" LoadModule wsgi_module "f:/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd" WSGIPythonHome "f:/python36"
そしたら、あとはDjangoの公式に載ってる設定をhttopd.confに追加しておしまい。最終的にhttpd.confに追記するのは↓。
LoadFile "f:/python36/python36.dll" LoadModule wsgi_module "f:/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd" WSGIPythonHome "f:/py/venv" WSGIScriptAlias /mysite "f:/py/venv/mysite/mysite/wsgi.py" WSGIPythonPath "f:/py/venv/mysite" <Directory f:/py/venv/mysite/mysite> <Files wsgi.py> Require all granted </Files> </Directory>
WSGIPythonHomeはDjangoを使ってる仮想環境のルートを指定するっぽいですよ。これで、WSGIScriptAliasで指定してるURLにアクセスすればDjangoが動くという寸法です。ただ、なんだかデフォのままだとトップページが出ないぽいので、「/mysite/admin/」みたいに中のURLまで行かないとダメな感じ?あんま調べてない。まー動いたから良しとしよう。
あーあと、MariaDB使ってるんですが、開発環境上だと「pip install PyMySQL」だけで動くんだけど、Apache通すと動かない。エラーログに「Did you install mysqlclient?」って出てくるから「pip install mysqlclient」でインストールしたら動くようになった。なんだろね。。。