2013年11月23日土曜日

EC2にCentOS 6.4+Nginx+Python+Flask+gunicornの環境構築

1.EC2にインスタンスを作成

参考:EC2でCentOSを使う

ここは無数に情報があるので省略。
iptableを停止しておく。
/etc/rc.d/init.d/iptables stop
chkconfig iptables off

2.Nginx1.4.3のインストール

参考:CentOS-6へ最新版のnginxを3分でインストールする方法

下準備。
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel wget

CentOS6用のパッケージをインストール。
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx


3.Python2.7.4のインストール

参考:CentOS6.3にPythonの学習環境を作る

ソースのダウンロード。
wget http://python.org/ftp/python/2.7.4/Python-2.7.4.tgztar xvzf Python-2.7.4.tgz
tar xvzf Python-2.7.4.tgz
cd Python-2.7.4

コンパイル。
./configure --with-threads --enable-shared --prefix=/usr/local
make
make install

共有ライブラリを確認
ldd /usr/local/bin/python

すると、libpython2.7.so.1.0 => not found といわれるので、シンボリックリンク貼る。
ln -s /usr/local/lib/libpython2.7.so.1.0 /lib/i686/nosegneg/

4.virtualenvつくる

easy_installをインストール。
このとき、Python2.7を指定してインストールしないと、CentOSにデフォルトで入っているPython2.6に環境が構築されてしまうので注意。
wget http://peak.telecommunity.com/dist/ez_setup.py
/usr/local/bin/python2.7 ez_setup.py

pipをインストール。
easy_install pip

virtualenvをインストール。
pip install virtualenv
pip install virtualenvwrapper

パスを通す。
vi .bashrc

.bashrcに以下の2行を追加
export WORKON_HOME=$HOME/.virtualenvs 
source /usr/local/bin/virtualenvwrapper.sh

source .bashrc

仮想環境を作成。
mkvirtualenv test_env

仮想環境を抜ける。
deactivate

仮想環境に入る。
workon test_env

これで元環境を汚さずライブラリをインストールし放題に。

5.Flaskとgunicornのセットアップ

pip install flask
pip install gunicorn

nginxでproxy_passを設定(Flaskはポート5000番)。
vi /etc/nginx/conf.d/default.conf
location / {
       proxy_pass http://localhost:5000;
}

nginx再起動
service nginx restart

Flaskのサンプルプログラム(https://flask-docs-ja.readthedocs.org/en/latest/quickstart/#id2)をhello.pyとして保存し、

hello.pyと同じフォルダにconfig.pyというファイルを作成する。中身は以下。
bind = '127.0.0.1:5000'
debug = True

gunicorn -c config.py -D hello:app

これで、EC2のインスタンスにブラウザからアクセスすれば、Hello Worldが表示される。