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


Posted:2017/08/03 9:00:26 AM|Category : Python

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

Vagrantを使い、webアプリケーションとしてApacheを利用します。今回は、Djangoプログラムを動かします。

ApacheでDjangoを動かす

Apache上にPythonベースのWebアプリケーションをホスティングするためには、前回と同じくWSGIを利用します。venv仮想環境にpipでmod_wsgiをインストールし、apacheの設定ファイルへ参照設定を記述します。

準備

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

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

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

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

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

③centos7環境にpython3系とapacheをインストールし、テストスクリプトが動作できるところまでやります。

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

ホスト環境

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 フレームワーク Django 1.11.3
Webサーバ Apache/2.4.6 (CentOS)
mod_wsgi 4.5.17

venvで仮想環境作成

①ホームディレクトリに移動し、仮想環境を有効にします。

cd
python3.6 -m venv test_django
. test_django/bin/activate

端末が以下のような表示になります。

(test_django) [vagrant@localhost ~]$ 

②pythonのバージョンを確認します。

python -V

Python 3.6.1

③pipのバージョンも確認します。

python -m pip list 

DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
setuptools (28.8.0)

djangoのインストール・設定

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

pip install Django==1.11.3

インストールの確認をします。

pip freeze

Django==1.11.3
pytz==2017.2

②Djangoプロジェクトを作成ます。

cd /var/www/cgi-bin
django-admin startproject test_django

権限が無いと怒られます。

CommandError: [Errno 13] Permission denied: '/var/www/cgi-bin/test_django'

③面倒なので、「cgi-bin」のパーミッションを「777」に変更します。

sudo chmod 777 /var/www/cgi-bin

再度プロジェクトを作成します。

django-admin startproject test_django

④アプリケーションを作成します。

cd test_django
python manage.py startapp apps

⑤ブラウザに表示させるviewsスクリプトを作成します。djangoが参照しているpythonのバージョンを表示させます。

vi apps/views.py

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

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse

import sys

def index(request):

     versions = sys.version_info

     output = str(versions).encode('utf-8')

     return HttpResponse(output)

⑥作成したviews.pyをurlに紐づけます。appsとtest_djangoのディレクトリ内のurls.pyを作成・編集します。

vi apps/urls.py

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

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

⑦test_djangoディレクトリ配下のurl.pyも編集します。

vi test_django/urls.py

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

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', include('apps.urls')),
]

⑧wsgi.pyを編集します。仮想環境で使用している設定(site-packages)を参照します。以下のようにパスを探してコピーしておきましょう。

find / -name "site-packages"

/vagrant/django_apps/test_django/lib/python3.6/site-packages

以下のファイルを編集します。

vi test_django/wsgi.py

変更前

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_django.settings")

application = get_wsgi_application()

変更後

import os, site, sys


# pyenvのパッケージパス
site.addsitedir("/vagrant/django_apps/test_django/lib/python3.6/site-packages")

sys.path.append("/var/www/cgi-bin/test-django")
sys.path.append("/var/www/cgi-bin/test-django/test-django")

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_django.settings")

application = get_wsgi_application()

⑨設定ファイルを編集します。

vi test_django/settings.py

ALLOWED_HOSTSを以下のように編集します。開発サーバーでは設定しないので見落としがちですが、本番環境では必須項目です。

ALLOWED_HOSTS = ['192.168.33.15']

appsをインストールしたことを教えてあげます。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps.apps.AppsConfig',
]

mod_wsgiを使ってApache経由でアクセスできるようにする

前回、venvの外にmod_wsgiをインストールしましたが、今回は仮想環境の中(venv仮想環境内)へインストールします。

①以下のコマンドを実行します。

cd
pip install mod_wsgi

mod_wsgiはよくあるApacheの拡張モジュールで、ApacheへのリクエストをPythonに処理させるために必要です。ソースから直接コンパイルするより、pipでインストールした方が良いらしいです。

②ファイルパスを検索します。

find /home/vagrant/test_django/ -name 'mod_*.so'

/home/vagrant/test_django/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

apacheの設定

①前回作成したwsgi.conf(apacheファイル)を読み込まないようにします。

sudo mv /etc/httpd/conf.d/wsgi.conf  /etc/httpd/conf.d/wsgi

※末尾のconfを外せばokです。

②新たにtest_django.confを作成・編集します。先ほどと同様、mod_wsgiのパスを探してコピーしておくと楽です。

sudo vi /etc/httpd/conf.d/test_django.conf

以下のようにファイルを編集します。

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

WSGIPythonPath /var/www/cgi-bin/test_django

WSGIScriptAlias /test_django /var/www/cgi-bin/test_django/test_django/wsgi.py

<Directory /var/www/cgi-bin/test_django/test_django>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

ここもvenv仮想環境内にインストールした「mod_wsgi」のパスを「LoadModule」へ記述します。

③apacheを再起動します。

sudo systemctl restart httpd

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

http://192.168.33.15/test_djanog

以下のように表示されます。
設定したアドレスでpython3系のバージョンが表示されればokです。

表示されない場合

表示されない場合は、エラーログから原因を特定します。以下のコマンドでログを見ます。

sudo less /var/log/httpd/error_log 

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

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 2008年04月 金融機関系I

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