CentOS7のApacheでDjangoを動かしてみた

vmwareの仮想マシンで動いているCentOS7で、Djangoを動かしてみました。 ウェブサーバーはApache2.4、Pythonは3.6、Djangoは1.11です。mod_WSGIを使います。 動かすDjangoアプリは、以前に作ったチュートリアルの最初部分です。

目次

  1. Python 3.6のインストール
  2. Djangoアプリをコピーする
  3. mod_WSGIの設定
  4. アクセスしてみる

Python 3.6のインストール

CentOS7のシステムのPythonは2.7なので、Python 3.6をインストールします。 まず、事前に必要そうなライブラリをインストールします。

$ sudo yum install httpd-devel
$ sudo yum install openssl-devel
$ sudo yum install sqlite-devel
$ sudo yum install wget

ここで問題が起きることはないと思います。 Python 3.6のソースファイルをダウンロードして、インストールします。 sudoではmakeが通らなかったので、suしました。

$ cd /usr/local/src/
$ sudo wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
$ sudo tar zxvf Python-3.6.3.tgz
$ cd /Python3.6.3
$ su
# ./configure --enable-shared
# make && make altinstall
# ln -s /usr/local/lib/libpython3.6m.so.1.0 /lib64/
# exit

mod_WSGIのソースファイルをダウンロードして、インストールします。 ただし、ソースからインストールするのではなくて、pipでインストールした方が良いかもしれません。 結局私はpipでインストールした方を使うことになりました。

$ cd /usr/local/src
$ sudo https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.22.tar.gz
$ sudo tar xvzf 4.5.22.tar.gz
$ cd mod_wsgi-4.5.22
$ su
# ./configure --with-python=/usr/local/bin/python3.6
# make && make install
# exit

pipでmod_WSGIをインストールします。 ソースから入れるより、こちらの方が良いと思います。

$ su
# pip3.6 install mod_wsgi
# exit

それぞれの場所を確認してみます。 site-packagesの場所は後で使いますので、控えておきます。

$ which python3.6
/usr/local/bin/python3.6s
$ python3.6 -c 'import sys; print(sys.path)'
['', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']

Djangoもインストールします。

$ su
# pip3.6 instal django
# exit

Djangoアプリをコピーする

PCで作ったDjangoのアプリをコピーします。WinSCPとかでコピーしてください。/var/www/htmlがウェブサーバーのドキュメントルートディレクトリなので、Djangoのファイルは/var/www/wsgi-binに置くことにしました。

Djangoのマニュアルではドキュメントルートの外に置くことを推奨してます。/homeの下に置きたくなるのですが、CentOS7でそれをやるといろいろと追加の設定が必要だそうで、/varの下に置くことにしました。

wsgi.pyというファイルがどこにあるか、控えておきます。mod_WSGIの設定のときに使用します。今回は/var/www/wsgi-bin/mysite/mysite/wsgi.pyでした。

wsgi.pyと同じディレクトリにsettings.pyというファイルがあります。その中のALLOWED_HOSTSを下記のように書き換えます。

ALLOWED_HOSTS = ['*']

この設定(*)ですと何でもOKということですので、セキュリティ的にはよろしくなさそうです。Djangoアプリを公開する際には変更する必要があります。

mod_WSGIの設定

mod_WSGIの設定というか、Apache2の設定をします。(nanoでなくてvimでも良いです。)

$ sudo nano /etc/httpd/conf.d/wsgi.conf

ファイルの内容は下記にします。 見よう見まねなので、冗長なところとか足らないところがあるかもしれません。

LoadModule wsgi_module /usr/local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

WSGIDaemonProcess mysite.com python-path=/var/www/wsgi-bin/mysite:/usr/local/lib/python3.6/site-packages
WSGIProcessGroup mysite.com
WSGISocketPrefix /var/run/wsgi
WSGIScriptAlias /mysite /var/www/wsgi-bin/mysite/mysite/wsgi.py process-group=mysite.com
WSGIPythonPath /var/www/wsgi-bin/mysite:/usr/local/lib/python3.6/site-packages

<Directory /var/www/wsgi-bin/mysite>
    Options ExecCGI MultiViews Indexes
    MultiViewsMatch Handlers
    AddHandler wsgi-script .py
    AddHandler wsgi-script .wsgi
    DirectoryIndex index.html index.py mysite.wsgi
    Require all granted
</Directory>

これでデーモンモードで動いてくれるはず。特にpython-pathのところではまりました。

アクセスしてみる

動きました。

image0

下記のサイトを参考にさせていただきました。 さくらVPS(CentOS) Python3.5とmod_wsgiの導入 mod_wsgiを使ってPython3.6をApacheで動かす(CentOS6系)

環境設定難しい。詳しい人がいてくれると助かるんだけどなあ。

広告

設定カテゴリの投稿