さくらのレンタルサーバでpyenv、Flaskを使う

スポンサーリンク




さくらのレンタルサーバ

ここ最近、ブログをちゃんと書きたいという欲求にさいなまれています。その一環でさくらのレンタルサーバを借りてみました。このエントリーも2015/2/16現在ではさくらのレンタルサーバ上のWordPressで公開されています。当初は月額$5程度でVPSを借りようと思っていましたが、要件を満たすことができるなら同額程度で100GBのストレージがついてくるのは魅力的と考え今回はさくらのレンタルサーバを選択です。要件は簡単で、「WordPressを複数立ち上げ、別ドメインで公開できる」です。2週間の無料お試し期間で検証してみようと申し込んでみましたが、あっさり実現可能なことがわかりました。sakura_rental_server

とはいえ今回は、WordPressについてのエントリーではありません。Python3でFlaskの実行環境作成についてのお話です。「スタンダードプラン」を契約したので、サーバにSSHでログイン可能です。

$ python -V
Python 2.7.6

サーバ環境にインストール済みのPythonは2.7.6ですが、pyenvでPython3の実行環境を導入し、FlaskでWebアプリを公開してみようと思います。

pyenvでPython3.4.2をインストール

さくらのレンタルサーバではgitが最初から使えるので、先ずはpyenvをgithubから取得します。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

私は、zshを使っているので、.zshrcでのpyenvの設定は次の通りです。このへんは過去のエントリーと変わりありません。

if [ "$(uname)" = "Darwin" ]; then
	if which pyenv > /dev/null; then
		export CFLAGS="-I$(xcrun --show-sdk-path)/usr/include"
		export PYENV_ROOT="${HOME}/.pyenv"
		export PATH=${PYENV_ROOT}/shims:${PATH}
		eval "$(pyenv init -)";
	fi
else
	if [ -f "$HOME/.pyenv/bin/pyenv" ]; then
		export PYENV_ROOT="${HOME}/.pyenv"
		export PATH=${PYENV_ROOT}/bin:$PATH
		eval "$(pyenv init -)";
	fi
fi

最新のPythonをインストールします。

$ source ~/.zshrc
$ pyenv install --list
・・・
3.4.1
3.4.2
3.5-dev
・・・
$ pyenv install 3.4.2
python-build: TMPDIR=/tmp cannot hold executables (partition possibly mounted with `noexec`)

/tmp が ‘noexec’ でマウントされているため、/tmp 配下の実行ファイルは実行できないようです。「~/.pyenv/plugins/python-build/bin/python-build」を読むと環境変数TMPDIRを$HOME/tmpにすれば行けそうな気がします。

$ export TMPDIR=$HOME/tmp
$ pyenv install 3.4.2
Downloading Python-3.4.2.tgz...

今度はエラーがでなくなりました。

$ source ~/.zshrc
$ mkdir ~/tmp/python
$ cd ~/tmp/python
$ python -V
Python 2.7.6
$ pyenv local 3.4.2
$ python -V
Python 3.4.2

無事インストールできたようです。

Flaskをインストールする

virtualenvでFlask用の環境を作成し、Flaskをpipでインストールします。

$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ pyenv virtualenv 3.4.2 3.4.2-flask
$ pyenv local 3.4.2-flask
$ pip install Flask

Flaskアプリの配置

FlaskはCGIモードで実行します。例として、~/www/flask/hello 配下にアプリケーションを配置し、http://username.sakura.ne.jp/flask/hello で公開します。~/www/flask/hello に3つのファイルを配置します。

#!/home/<username>/.pyenv/versions/3.4.2-flask/bin/python

from wsgiref.handlers import CGIHandler
from appFlask import app
CGIHandler().run(app)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return "Hello!"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /flask/hello/index.cgi/$1 [QSA,L]

index.cgi には実行権をつけ、ブラウザでアクセスしてみます。

browser_flask

なんとか公開されました。
(.htaccess がよくわからず実際はだいぶ苦労しています)

宿題

.htaccess の設定が全然理解できていないません。これについては後日の宿題です。

[amazonjs asin=”4048686291″ locale=”JP” title=”エキスパートPythonプログラミング”]

スポンサーリンク







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