鉄馬の工具箱

te2uma(てつうま)のブログです。調べ物のメモなどを共有します。

このエントリーをはてなブックマークに追加

CentOSで走らせるFlaskまたはDjangoアプリの開発環境を、Windows上で構築する

FlaskまたはDjangoで作ったWebアプリをVPSなどのCentOS上で走らせる場合に、 同等の開発環境をローカルのWindowsマシンで構築する手順を紹介します。

VirtualBoxでWindowsにCent OS 6.4の開発環境を構築する 」の続きに なっているので、併せてそちらも確認してください。

複数のWebアプリを管理しやすいように、pythonbrewで仮想環境を構築し、利用します。 バージョンなどは適宜読み替えてください(ただ、バージョンによってうまくいかないことがあるので注意)。

vimの設定

vi(vim)でPythonスクリプトを編集しやすいように設定します。

デフォルトのvimは機能制限版なので、拡張版をインストール。

sudo yum -y install vim-enhanced

vimの設定ファイルを編集。

vi ~/.vimrc
filetype plugin on
filetype indent on
autocmd FileType python setl autoindent
autocmd FileType python setl smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
autocmd FileType python setl expandtab tabstop=4 shiftwidth=4 softtabstop=4

「.bash_profile」を編集。

vi ~/.bash_profile

以下を末尾に追加。

alias vi='vim'

「.bash_profile」の再読み込み。

source ~/.bash_profile

Python環境の仮想化

まず、pythonbrewをインストール。

curl -kL http://xrl.us/pythonbrewinstall | bash
echo '[ -s "$HOME/.pythonbrew/etc/bashrc" ] && source "$HOME/.pythonbrew/etc/bashrc"' >> $HOME/.bash_profile
source ~/.bash_profile

Pythonのインストールに必要なモジュール一式をインストール。

  • readline-develを入れておかないと、Pythonシェルで入力履歴を呼び出せない。
sudo yum -y install zlib-devel bzip2-devel openssl-devel sqlite-devel gcc make wget readline-devel

pythonbrewの管理下にPythonをインストール。

2.x系で最新の「2.7」の中で他との相性がよさそうだった「2.7.2」を利用しています。新しいリビジョンのものを使うとどこかでこけたりすることあり。

pythonbrew install -f --configure="--with-threads --enable-shared --with-zlib" --no-setuptools 2.7.2

sudo echo "$HOME/.pythonbrew/pythons/Python-2.7.2/lib" | sudo tee -a /etc/ld.so.conf.d/python2.7.2.conf
sudo ldconfig

pythonbrew switch 2.7.2

Pythonのパッケージ管理システムをインストール。

wget http://python-distribute.org/distribute_setup.py
python distribute_setup.py
rm distribute*
easy_install pip

試しにmercurialをインストール。この手順は省いてもよいです。

pip install mercurial

mod_wsgiのインストール

mod_wsgiに必要なモジュールをインストール。

sudo yum -y install httpd-devel

mod_wsgiのインストール。mod_wsgiは、さまざまなWebアプリから使うので、仮想環境ではないPythonを指定。

wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
tar vzxf mod_wsgi-3.3.tar.gz
cd mod_wsgi-3.3
./configure --with-apxs=/usr/sbin/apxs --with-python=$HOME/.pythonbrew/pythons/Python-2.7.2/bin/python
make
sudo make install
cd ..
rm -rf mod_wsgi-3.3*

ユーザーディレクトリにPythonの仮想環境を置いている関係で、ホームディレクトリの実行権限をいじらないと、後でうまく動かないです。

chmod o+x $HOME

Python仮想環境の構築

仮想環境は次のように作成します。VENVNAMEとしていますが適宜読み替えてください

pybrew venv create VENVNAME

仮想環境を利用するには次のようにします。

pybrew venv use VENVNAME

コマンドプロンプトの先頭に、「(仮想環境名)」が表示されるようになります。

補足

仮想環境を抜けるには、

deactivate

と入力します。

mod_wsgiの設定とテスト

同様に、ADMINUSERNAMEの部分は適宜読み替えてください。「 VirtualBoxでWindowsにCent OS 6.4の開発環境を構築する 」の手順どおりに行っている場合は「admin」のはずです。

sudo vi /etc/httpd/conf.d/wsgi.conf
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /home/ADMINUSERNAME/.pythonbrew/venvs/Python-2.7.2/VENVNAME
WSGIPythonPath /home/ADMINUSERNAME/.pythonbrew/venvs/Python-2.7.2/VENVNAME/lib/python2.7
/usr/sbin/apachectl configtest
sudo service httpd reload

TESTFILEDIRの部分は適当なディレクトリ名を割り当ててください (以下同様)。

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

以下を末尾に追加します。

WSGIScriptAlias /testwsgi /home/ADMINUSERNAME/TESTFILEDIR/testwsgi.wsgi
/usr/sbin/apachectl configtest
sudo service httpd reload
cd ~
mkdir TESTFILEDIR
vi ~/TESTFILEDIR/testwsgi.wsgi
def application(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    return ["WSGI App test is OK!"]

http://192.168.56.101/testwsgi にアクセスしてメッセージが表示されればOKです。

なお、「 VirtualBoxでWindowsにCent OS 6.4の開発環境を構築する 」の手順と異なるIPアドレスに開発サーバーを指定した場合は、192.168.56.101の部分を読み替えてください(以下同様)。

Flaskの設定とテスト

pip install flask
sudo vi /etc/httpd/conf.d/wsgi.conf

以下を末尾に追加します。

WSGIScriptAlias /testflask /home/ADMINUSERNAME/TESTFILEDIR/testflask.wsgi
 /usr/sbin/apachectl configtest
sudo service httpd reload
vi ~/TESTFILEDIR/testflask.py
 # -*- coding: utf-8 -*-
#!/usr/bin/env python
import os, sys
from flask import Flask

app = Flask(__name__)
app.config['DEBUG'] = True

@app.route('/')
def index():
    return 'Flask App test is OK!'

if __name__ == '__main__':
    app.run()
vi ~/TESTFILEDIR/testflask.wsgi
 # -*- coding:utf-8 -*-
import sys, os
sys.path.append('/home/ADMINUSERNAME/TESTFILEDIR')

from testflask import app as application

http://192.168.56.101/testflask にアクセスしてメッセージが表示されればOK。

Djangoの設定とテスト

pip install django
cd ~/TESTFILEDIR
django-admin.py startproject testdjango
sudo vi /etc/httpd/conf.d/wsgi.conf

以下を末尾に追加します。

WSGIScriptAlias /testdjango /home/ADMINUSERNAME/TESTFILEDIR/testdjango.wsgi
/usr/sbin/apachectl configtest
sudo service httpd reload
vi /home/ADMINUSERNAME/TESTFILEDIR/testdjango.wsgi
import os
import sys
sys.path.append('/home/ADMINUSERNAME/TESTFILEDIR/testdjango')

os.environ['DJANGO_SETTINGS_MODULE'] = 'testdjango.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

http://192.168.56.101/testdjango にアクセスしてメッセージが表示されればOK。

このエントリーをはてなブックマークに追加