techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

PythonAnywhere に Flask アプリをデプロイ

PythonAnywhere に Flask アプリをデプロイ

Head First Python, 2nd Edition - O'Reilly Media を読んでいて、

  • Python なら Web アプリも余裕だぜ
  • Flask 使うぜ
  • デプロイも PythonAnywhere で10分でできるぜ

なハイテンションで進んでいくのにならってやってみた。

Git でバージョン管理している Flask アプリを PythonAnywhere にデプロイしてみたので方法をまとめておく。

Git 管理に含めておくファイル

PythonAnywhere にデプロイするかどうかによらず、requirements.txt は Git 上で管理しておくべき。

pip freeze — pip 9.0.1 documentation

  1. 仮想環境でパケージ管理しておく
  2. $ pip freeze > requirements.txt でインストール済みパッケージを requirements format で書き出しておく

新たに clone した環境で依存パッケージのインストールが可能になるのはもちろん、デプロイ環境でも使用できる。

あとは こんな感じで 自作の site-package を作って使っているので、この distribution file も合わせて管理しておく。

PythonAnywhere とは

PythonAnywhere is a Python development and hosting environment that displays in your web browser and runs on our servers. They're already set up with everything you need. It's easy to use, fast, and powerful. There's even a useful free plan.

ということで、ホスティングもできれば、コーディングもできる便利サービス。

free plan もあるのでサクッと使ってみましょう。

PythonAnywhere 上での操作

やりたいことは以下のとおり。

  1. Git から PythonAnywhere 上にソースコードを持ってくる
  2. 環境セットアップ
  3. 起動

まずは Consoles にアクセス。

Setting up Flask applications on PythonAnywhere | PythonAnywhere help に沿って進めていく。

Uploading your code to PythonAnywhere

ソースコードの配置はこちらを参照。
Deploying an existing Django project on PythonAnywhere | PythonAnywhere help

Uploading your code to PythonAnywhere

Assuming your code is already on a code sharing site like GitHub or Bitbucket, you can just clone it from a Bash Console:

ということなのでコンソールからcloneする。

$ git clone https://github.com/kfurue/hfpython-flask.git

Create a virtualenv and install requirements

PythonAnywhere上で仮想環境を作成し、必要な依存パッケージをインストールする。

requirements.txt を同梱してあるので一括インストールできるが、自作のsite-packageも使っているのでこれもインストールする。

$ mkvirtualenv --python=/usr/bin/python3.6 my-virtualenv
(mysite-virtualenv)$ pip install ./vsearch-1.0.tar.gz 
(mysite-virtualenv)$ pip install -r requirements.txt

次回からこの仮想環境をアクティベートするには以下のようにする。

$ workon my-virtualenv

Setting up the Web app

PythonAnywhere の Web タブを開いて設定していく。

  • Add a new web app をクリック
  • Manual Configuration をクリック
  • Python version は任意のものをクリック(今回は3.6)
  • Virtualenv セクションの設定をする
    • 先ほど mkvirtualenv で指定した仮想環境をここで指定

f:id:kfurue:20180201214039p:plain

これで依存パッケージをインストールした仮想環境が動作環境として指定できる。

Configuring the WSGI file

同じく PythonAnywhere の Web タブでの設定。

Code セクションの WSGI configuration file: をクリックして最終行のアプリケーション名を自分のアプリに合わせて修正する。

f:id:kfurue:20180201214049p:plain

今回は hfpython-flask/webapp/vsearch4web.py なので vsearch4web

# import flask app but need to call it "application" for WSGI to work
from vsearch4web import app as application

PythonAnywhere は application としてインポートしてあげないと認識できないので as 以降もそのまま残しておく。

app.run() は PythonAnywhere 側が呼ぶので自身のコードで呼ばないよう気をつける。

こんな感じ でローカル実行時のみ app.run() できるようにしておく。(他者からインポートされた場合にはif文内は実行されない。)

Reload

PythonAnywhere の Web タブトップにある Reload ボタンをクリックすれば完了。

http://kfurue.pythonanywhere.com/

Yay! f:id:kfurue:20180201214039p:plainf:id:kfurue:20180201214049p:plain