DjangoをWindowsServer + Apache環境で使おうとしてハマりまくった


DjangoをWindowsServer + Apache環境で使おうとしてハマりまくった

この記事について

Djangoで簡単なWebアプリケーションを作ったので、せっかくだからWebサーバを構築して公開しようと思ったらハマりまくった。なんとか先人達の知恵を頼りに構築ができたので備忘もかねて書いていく。

環境

WindowsServer2012R2
Apache2.4.39
django2.2.1

Apacheをインストールしてみたら早速ハマる

手始めにApacheをインストールし、起動しようとしたら「The requested operation has failed!」メッセージが。管理ツール→サービスタブからApacheを起動しようとすると「 エラー 1053」が出ていた。
色々調べてみた結果、Apacheを実行するために「Microsoft visual C++ 再頒布可能パッケージ (x64)」が必要と記載された記事を発見!
上記のパッケージを入れたらApacheが問題なく起動するようになった。(ちなみにこのパッケージを入れるとき、特定のセキュリティパッチが当たっていないとエラーが発生するらしい。とりあえずこの時は当たっていないセキュリティパッチを全部当ててから作業を行った)

mod_wsgiをインストールしようとしたらやっぱりハマる

Apacheが正常起動したので、次はmod_wsgiだ!と思い以下のコマンドを打った

pip install mod_wsgi

が、大量のエラーが出てもはや原因が追えない。。
仕方ないので、この記事を参考に自分の環境に合わせたホイールファイルをダウンロードした上でpipを使ってインストールを行うと見事成功!

mod_wsgiをインストールできたはいいが

インストール後、python.exeがあるフォルダに「mod_wsgi.so」というファイルができるらしいが・・・あれ、見当たらない。。
他の記事が編集しているhttpd.conf内のLoadModule情報が「mod_wsgi~.pyd」になっていることに気づく。自環境のPythonフォルダ内を探してみると「Python37→Lib→site-packages」フォルダ内に同名ファイルを発見!.soの代わりに.pydファイルを使ってみることにした。

httpd.confを編集

作成したdjangoファイルをドキュメントルートフォルダ配下に格納し、httpd.confを以下の通り編集。


(略)
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
(略)
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName localhost:80
(略)

#httpd.conf末尾に追記
LoadModule wsgi_module "C:/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd"

WSGIPythonHome "C:/python37"
WSGIScriptAlias /mysite "C:/documentroot/mysite/mysite/wsgi.py"
WSGIPythonPath "C:/documentroot/mysite"

<Directory C:/documentroot/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

これを保存し、Apacheを再起動したところ、無事作成したwebアプリケーションがブラウザで確認できるようになった。

参考文献

参考にさせていただいた記事は以下の通り。ありがとうございました。

http://cream-worker.blog.jp/archives/1071537855.html
http://nyarurato.hatenablog.com/entry/2017/07/18/171421
https://qiita.com/hatai/items/279ec1dfd28cb9693a1f
https://www.sejuku.net/blog/27637
https://yoshiyoshifujii.hatenablog.com/entry/2013/08/31/001002