ホーム >  Python >  VagrantでCentOS7 + Python + Django環境を作る(Apache編 その1)

投稿日:   |  最終更新日:

VagrantでCentOS7 + Python + Django環境を作る(Apache編 その1)

Python

Vagrantを使い、CentOS7にPython3.6をインストールします。webアプリケーションとしてApacheを利用してプログラムを動かします。

ApacheでPythonを動かすには?

Apache上にPythonベースのWebアプリケーションをホスティングするためには、WSGIが必要になります。

WSGIとは?

WSGI(ウィズギー)とは「Web Server Gateway Interface」の略です。PythonはApacheなどのWebサーバと、FlaskやDjangoで作成したWebアプリケーションを接続するための、標準化されたインターフェースとしてWSGIを利用します。PythonのWebアプリケーションライブラリにはそれぞれWSGIに対応する方法があり、それを使うとApacheやNginxなどWebサーバと結合して動作させることができます。

準備

Vagrantでゲスト環境(仮想環境)を作ります。ゲスト環境の中にDjangoを構築します。その前に、以下の作業を終わらせましょう。

①Virtualboxをインストールします。Virtualboxのインストールまでで結構です。

VirtualBoxをインストールする for Ubuntu

②Vagrantをインストールします。centos7環境を作りますので、Vagrantのインストールのみ済ませてください。

Vagrantをインストールしてテスト環境を作る for Ubuntu

ホスト環境

OS Ubuntu 16.04.1 LTS 64bit
Virtualbox 5.1
Vagrant 1.9.5

ゲスト環境

OS CentOS 7.1.1503
Python 3.6.1
pip 9.0.1
Webサーバ Apache/2.4.6 (CentOS)
mod_wsgi 4.5.17

Vagrantへログイン

①【ホスト環境】端末を開き、前回構築したVagrantのディレクトリまで移動します。

cd vagrant/django_apps/

②【ホスト環境】仮想マシンを起動します。

vagrant up

③【ホスト環境】ログインします。

vagrant ssh

必要なパッケージの追加

まっさらな状態のvagrant環境から始めます。

①パッケージをアップデートします。

sudo yum update -y

②作業が面倒なので、ルートでログインしておきます。

sudo su

③依存ライブラリーをインストールします。

yum groupinstall -y "Development tools"
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
Development tools makeやgccなど様々な開発環境を整えます。
openssl-devel pipが使えなかったり、Ignoring ensurepip failure: pip…等と出る場合に備えてインストールします。
sqlite-devel No module named ‘_sqlite3’ 等が出たらいやなので、インストールします。

Apacheのインストール

①apacheをインストールします。

yum -y install httpd

②DSOという動的リンクを利用したモジュールのビルドに「httpd-devel」が必要ですのでインストールします。

yum -y install httpd-devel
インストール:
  httpd.x86_64 0:2.4.6-45.el7.centos.4                                          
  httpd-devel.x86_64 0:2.4.6-45.el7.centos.4  

③仮想環境のため、ファイヤーウォールを停止させておきます。

systemctl stop firewalld
systemctl disable firewalld

Python3.6のインストール

①Python3.6をソースコードからコンパイルしてインストールします。

cd /usr/local/src
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
cd Python-3.6.1
./configure --enable-shared --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/lib"
make
make altinstall

configureで使っている「–enable-shared」は、mod_wsgiを作成するために必要です。詳細はLinuxでPythonをビルドするときの–enable-sharedオプションについてを参照してください。

②動作確認します。動けばOKです。

python3.6
pip3.6

mod_wsgiのインストールしてapache起動

①mod_wsgiをインストールします。

pip3.6 install mod_wsgi

※「yum install mod_wsgi」でもインストールできますが、Pythonのバージョンが古い(2系)ので、pip経由で導入します。

②インストールが完了したら、Python3.6.1のインストール先を見つけます。

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']

「/usr/local/lib/python3.6/site-packages」にあることがわかります.

③次は、mod_wsgiモジュールがあるか確認します。

ls -la /usr/local/lib/python3.6/site-packages/mod_wsgi/server

-rw-r--r-- 1 root root   1558 Jul 28 01:31 apxs_config.py
-rw-r--r-- 1 root root   3563 Mar 31  2016 environ.py
-rw-r--r-- 1 root root 128131 Jul  7 09:57 __init__.py
drwxr-xr-x 4 root root     57 Jul 28 01:32 management
-rwxr-xr-x 1 root root 932872 Jul 28 01:32 mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
drwxr-xr-x 2 root root     98 Jul 28 01:32 __pycache__

「/usr/local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so」にあることがわかりました。

④apacheファイル(wsgi.conf)を作成します。

vi /etc/httpd/conf.d/wsgi.conf 

以下のような内容を記述します。

WSGIScriptAlias /test_wsgi /var/www/html/test_wsgi.py
LoadModule wsgi_module /home/user/django/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

⑤apacheが参照している位置にテスト用のpythonスクリプトを作成します。内容は参照しているpythonのバージョンが表示されるようになっています。

vi /var/www/html/test_wsgi.py 

以下のような内容を記述します。

import sys

def application(environ,start_response):
    status = '200 OK'
    versions = sys.version_info
    output = str(versions).encode('utf-8')
    response_header = [('Content-type','text/plain'),
                        ('Content-Length',str(len(output)))]
    start_response(status,response_header)
    return [output]

⑥apacheを再起動します。

systemctl restart httpd 

⑦ホスト環境のブラウザから、以下のURLを入力します。vagrantのipアドレスは「192.168.33.15」とします。

http://192.168.33.15/test_wsgi

以下のように表示されます。

次回

次回は、Djangoアプリケーションをデプロイしたいと思います。

VagrantでCentOS7 + Python + Django環境を作る(Apache編 その2)

トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター、フロントエンドエンジニア 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 20

最近の投稿
人気記事
カテゴリー
広告