CentOS7のApacheでDjangoを動かしてみた
vmwareの仮想マシンで動いているCentOS7で、Djangoを動かしてみました。 ウェブサーバーはApache2.4、Pythonは3.6、Djangoは1.11です。mod_WSGIを使います。 動かすDjangoアプリは、以前に作ったチュートリアルの最初部分です。
目次
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のところではまりました。
アクセスしてみる
動きました。
下記のサイトを参考にさせていただきました。 さくらVPS(CentOS) Python3.5とmod_wsgiの導入 mod_wsgiを使ってPython3.6をApacheで動かす(CentOS6系)
環境設定難しい。詳しい人がいてくれると助かるんだけどなあ。
公開日
広告
設定カテゴリの投稿
- Apache2.4で行ったセキュリティ関係の設定
- CentOS7にgitをインストールする
- CentOS7にsamba 4.8をインストールする
- CentOS7のApacheでDjangoを動かしてみた
- Gitでバージョン管理をしてみた
- LogWatchでログを確認する
- Python3のCGIで日本語を出力する
- Raspberry Piにgitをインストールする
- サイトマップを作る
- プログラムのCPU使用を制限する
- 仮想マシンにCentOS7をインストールしてApache2.4とDjango2.0をセットアップする
- 仮想マシンのCentOS7にLaTeXとGhostScriptとImageMagickをインストール
- 自宅サーバーのGitをリモートリポジトリにする