HOME>WEBプログラム覚書>[Django][Apache]VirtualHostごとに異なるvenvでDjangoを動かす
[Django][Apache]VirtualHostごとに異なるvenvでDjangoを動かす
Apache2.4でLoadModule ディレクティブのコンテキストがサーバ設定ファイルとバーチャルホストになってるから virtualhostごとに異なるvenv に突っ込んだ mod_wsgi を利用できる。
デプロイサーバー環境
- $ cat /etc/redhat-release
- CentOS Linux release 7.5.1804 (Core)
- $ python --version
- Python 2.7.5
- $ httpd -v
- Server version: Apache/2.4.6 (CentOS)
- Server built: Jun 27 2018 13:48:59
サーバー設定
Python3.6インストール
現在は標準リポジトリにPython3.6があるっぽいがIUS Community Projectのリポジトリの例が多かったのでそれに倣う。
- $ yum search python36
- python36.x86_64 : Interpreter of the Python programming language
- python36-coverage.x86_64 : Code coverage testing module for Python 36
- python36-debug.x86_64 : Debug version of the Python runtime
- python36-devel.x86_64 : Libraries and header files needed for Python development
- python36-idle.x86_64 : A basic graphical development environment for Python
- python36-jsmva.noarch : TMVA interface used by JupyROOT
- python36-jupyroot.x86_64 : ROOT Jupyter kernel
- python36-libs.x86_64 : Python runtime libraries
- python36-nose.noarch : Discovery-based unittest extension for Python 3.6
- python36-numpy.x86_64 : A fast multidimensional array facility for Python 3.6
- python36-numpy-f2py.x86_64 : f2py for numpy
- python36-root.x86_64 : Python extension for ROOT
- python36-setuptools.noarch : Easily build and distribute Python 36 packages
- python36-test.x86_64 : The self-test suite for the main python3 package
- python36-tkinter.x86_64 : A GUI toolkit for Python
IUS Community Project リポジトリ追加
- $ sudo yum install https://centos7.iuscommunity.org/ius-release.rpm
Pythonインストール
- $ sudo yum install python36u python36u-devel python36u-libs python36u-pip python36u-setuptools python36u-tools
OS標準のPythonとは共存する形でインストールされるっぽい。
- $ python --version
- Python 2.7.5
- $ python3.6 --version
- 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の設定はこの仮想環境を利用するように設定する。
- # プロジェクトのディレクトリに移動
- $ cd /var/www/vhosts/django.example.com
- # 仮想環境作成
- $ python3.6 -m venv venv
- #仮想環境有効化
- $ source venv/bin/activate
- #OS標準から切り替わる
- (venv)$ python --version
- Python 3.6.5
Django
インストール
仮想環境へインストール。
- (venv)$ pip install Django
- # 確認
- (venv)$ python -m django --version
- 2.1
プロジェクト作成
- (venv)$ django-admin startproject www
- (venv)$ cd www
- # 開発サーバー起動
- (venv)$ python manage.py runserver &
- #ローカルアクセス
- (venv)$ curl -s http://127.0.0.1:8000
下記のようなHTMLが出力されればとりあえず動いている。
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>Django: the Web framework for perfectionists with deadlines.</title>
- ・
- ・
- ・
テストサーバーでのDjangoが動いてるのが確認できたら停止。
- # サーバー停止
- (venv)$ fg 1
- # ctrl-C で停止
Apache
mod_wsgi-httpd、mod_wsgi インストール
OSのPythonではなくプロジェクトで利用するPythonの仮想環境にインストール。
- (venv)$ pip install -v mod_wsgi-httpd
- (venv)$ pip install mod_wsgi
場合によってはmod_wsgi-httpdのインストールに失敗する。 自分の場合は下記サイトを参考に setuptools と httpd-devel を入れることで解決。
- (venv)$ pip install --upgrade setuptools
- (venv)$ sudo yum install httpd-devel
とりあえず setuptools だけでは解決しなかったので httpd-devel のインストールが本命。
参考サイト
- # パスの確認
- (venv)$ find /var/www/django.example.com/venv -name 'mod_*.so'
- /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ファイルはこんな感じ。デーモンモードってので動かすっぽい。