HOME>WEBプログラム覚書>[Django][Apache]VirtualHostごとに異なるvenvでDjangoを動かす

[Django][Apache]VirtualHostごとに異なるvenvでDjangoを動かす

Apache2.4でLoadModule ディレクティブのコンテキストがサーバ設定ファイルとバーチャルホストになってるから virtualhostごとに異なるvenv に突っ込んだ mod_wsgi を利用できる。

デプロイサーバー環境

  1. $ cat /etc/redhat-release
  2. CentOS Linux release 7.5.1804 (Core)
  3.  
  4. $ python --version
  5. Python 2.7.5
  6.  
  7. $ httpd -v
  8. Server version: Apache/2.4.6 (CentOS)
  9. Server built:   Jun 27 2018 13:48:59

サーバー設定

Python3.6インストール

現在は標準リポジトリにPython3.6があるっぽいがIUS Community Projectのリポジトリの例が多かったのでそれに倣う。

  1. $ yum search python36
  2. python36.x86_64 : Interpreter of the Python programming language
  3. python36-coverage.x86_64 : Code coverage testing module for Python 36
  4. python36-debug.x86_64 : Debug version of the Python runtime
  5. python36-devel.x86_64 : Libraries and header files needed for Python development
  6. python36-idle.x86_64 : A basic graphical development environment for Python
  7. python36-jsmva.noarch : TMVA interface used by JupyROOT
  8. python36-jupyroot.x86_64 : ROOT Jupyter kernel
  9. python36-libs.x86_64 : Python runtime libraries
  10. python36-nose.noarch : Discovery-based unittest extension for Python 3.6
  11. python36-numpy.x86_64 : A fast multidimensional array facility for Python 3.6
  12. python36-numpy-f2py.x86_64 : f2py for numpy
  13. python36-root.x86_64 : Python extension for ROOT
  14. python36-setuptools.noarch : Easily build and distribute Python 36 packages
  15. python36-test.x86_64 : The self-test suite for the main python3 package
  16. python36-tkinter.x86_64 : A GUI toolkit for Python

IUS Community Project リポジトリ追加

  1. $ sudo yum install https://centos7.iuscommunity.org/ius-release.rpm

Pythonインストール

  1. $ sudo yum install python36u python36u-devel python36u-libs python36u-pip python36u-setuptools python36u-tools

OS標準のPythonとは共存する形でインストールされるっぽい。

  1. $ python --version
  2. Python 2.7.5
  3.  
  4. $ python3.6 --version
  5. Python 3.6.5

プロジェクト構成

仮想環境
/var/www/vhosts/django.example.com/venv/
プロジェクトルート
/var/www/vhosts/django.example.com/www/
アプリケーションに紐付かない静的ファイル
/var/www/vhosts/django.example.com/www/static/

Python仮想環境

OSのPythonではなくプロジェクトごとに独立したPython環境使いたい場合、仮想環境というものを作るといいらしい。 Apacheの設定はこの仮想環境を利用するように設定する。

  1. # プロジェクトのディレクトリに移動
  2. $ cd /var/www/vhosts/django.example.com
  3.  
  4. # 仮想環境作成
  5. $ python3.6 -m venv venv
  6.  
  7. #仮想環境有効化
  8. $ source venv/bin/activate
  9.  
  10. #OS標準から切り替わる
  11. (venv)$ python --version
  12. Python 3.6.5

Django

インストール

仮想環境へインストール。

  1. (venv)$ pip install Django
  2.  
  3. # 確認
  4. (venv)$ python -m django --version
  5. 2.1

プロジェクト作成

  1. (venv)$ django-admin startproject www
  2. (venv)$ cd www
  3.  
  4. # 開発サーバー起動
  5. (venv)$ python manage.py runserver &
  6.  
  7. #ローカルアクセス
  8. (venv)$ curl -s http://127.0.0.1:8000

下記のようなHTMLが出力されればとりあえず動いている。

  1. <!doctype html>
  2. <html>
  3. <head>
  4.     <meta charset="utf-8">
  5.     <title>Django: the Web framework for perfectionists with deadlines.</title>
  6.     ・
  7.     ・
  8.     ・

テストサーバーでのDjangoが動いてるのが確認できたら停止。

  1. # サーバー停止
  2. (venv)$ fg 1
  3. # ctrl-C で停止

Apache

mod_wsgi-httpd、mod_wsgi インストール

OSのPythonではなくプロジェクトで利用するPythonの仮想環境にインストール。

  1. (venv)$ pip install -v mod_wsgi-httpd
  2. (venv)$ pip install mod_wsgi

場合によってはmod_wsgi-httpdのインストールに失敗する。 自分の場合は下記サイトを参考に setuptools と httpd-devel を入れることで解決。

  1. (venv)$ pip install --upgrade setuptools
  2. (venv)$ sudo yum install httpd-devel

とりあえず setuptools だけでは解決しなかったので httpd-devel のインストールが本命。

参考サイト

  1. # パスの確認
  2. (venv)$ find /var/www/django.example.com/venv -name 'mod_*.so'
  3. /var/www/django.example.com/venv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

virtualhostのconfファイルはこんな感じ。デーモンモードってので動かすっぽい。

  1. # これ必要な場合がある
  2. WSGISocketPrefix run/wsgi
  3.  
  4. <VirtualHost *:80>
  5.     ServerName django.example.com
  6.    
  7.     # 仮想環境のmod_wsgi
  8.     LoadModule wsgi_module /var/www/django.example.com/venv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
  9.  
  10.     WSGIScriptReloading On
  11.     WSGIScriptAlias / /var/www/django.example.com/www/www/wsgi.py
  12.     WSGIDaemonProcess django.example.com python-path=/var/www/django.example.com/www:/var/www/django.example.com/venv/lib/python3.6/site-packages
  13.     WSGIProcessGroup django.example.com
  14.    
  15.     # 静的ファイルの配信
  16.     Alias /static/ /var/www/django.example.com/www/static/
  17.     <Directory /var/www/django.example.com/www/static>
  18.     Require all granted
  19.     </Directory>
  20.  
  21.     <Directory /var/www/django.example.com/www>
  22.         AllowOverride All
  23.         Require all granted
  24.         <Files wsgi.py>
  25.             Require all granted
  26.         </Files>
  27.     </Directory>
  28. </VirtualHost>

/var/www/django.example.com/www/www/settings.py のALLOWED_HOSTSを編集する。

  1. ALLOWED_HOSTS = ['django.example.com']

これでとりあえず、動いている気がする・・・

参考サイト

投稿日 2018年8月31日 04:03
カテゴリ Python
タグ Apache | Django | Python
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1789

コメント

コメントする
Name
Email Address
URL