なんでもITブログ

技術系の情報発信をしていきます

CentOS7 PythonフレームワークDjangoをApacheで動かす方法

今回はDjangoで作ったコンテンツをApacheで動かす方法を載せていきます


ApacheとPython3.6はすでにインストールしたところからスタートするので
ApachePythonをインストールしていない人はこちらを参考にしてください
CentOS7 Webサーバ構築ガイダンス2 Apacheのインストール - なんでもITブログ
CentOS7 Python3.6のインストール方法 - なんでもITブログ



ではまずWebサーバを公開するディレクトリを作ります

// srv配下にweb領域を作成する
$ mkdir /srv/web
// 所有ユーザとGroupをApacheに変更する(Apacheが使用するため)
$ chown -R apache:apache /srv/web


次にDjangoをインストールしていきます

// pipを最進化する
$ pip3.6 install pip
// djangoのインストール
$ pip3.6 install django


これでサーバにDjangoがインストールされました
次にweb領域にdjangoのプロジェクトを作成していきます

$ cd /srv/web
// web領域にmyappプロジェクトを作成
$ django-admin.py startproject myapp

これで/srv/web/myappというディレクトリが出来て、djangoフレームワークが置かれました
しかしこのままではApacheに来たリクエストをDjango(python)を使って捌くことはできません。
そういった設定が入っていないからです
そこでWSGI(ウィズギー)というWebサーバとPythonのWebアプリケーションフレームワークを繋ぐためのインターフェースがあるのでそれを利用します。

WSGIをインストールしていきます

$ yum install -y python36u-mod_wsgi

これでwsgiのインストールは完了です
このインストールが成功しているとApacheのモジュールの設定フォルダに以下のファイルが追加されるはずです
wsgiの設定ファイルになります
/etc/httpd/conf.modules.d/10-wsgi-python3.6.conf

こちらを設定していきます

$ vi /etc/httpd/conf.modules.d/10-wsgi-python3.6.conf

// 既存の設定は消して丸ごと以下をコピー貼り付けてください
<IfModule !wsgi_module>
    LoadModule wsgi_module modules/mod_wsgi_python3.6.so
    WSGIScriptAlias / /srv/web/myapp/myapp/wsgi.py
    WSGIPythonPath /srv/web/myapp/
    <Directory /srv/web/myapp/myapp>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
</IfModule>


上記のファイルはWSGIdjango側のパスだったりApache側のwsgiモジュールのパスだったり、
そもそものコンテンツの場所などが書かれています。
一つ一つの意味は別途調べてみるとよいかと思います


最後にdjangoにはデフォルトでアクセス制限がかかっていて外部からのユーザがアクセスできなくなっています。
Webサーバだとそれでは困るので、これを許可していきます(管理画面とかだとその設定も有効)

$ vi /srv/web/myapp/myapp/settings.py

#ALLOWED_HOSTS = []
ALLOWED_HOSTS = ["*"]

これで全ての設定が完了です
Apacheの再起動をしてブラウザで確認してみましょう

$ systemctl restart httpd.service


http://サーバのIPでブラウザを確認してDjangoのデフォルトページが出来ていたら成功です。
もし動かなかったり、よりよい方法があればコメント欄などで教えてください