===================
5. アプリを公開する
===================
作成したウェブアプリケーションを世の中の人に使ってもらえるようにします。
Flaskをデプロイする方法
=======================
:参考: `Deployment Options — Flask 0.10.1 documentation `_
色々ありますが、私は以下の3つがおすすめです。
* apache の mod_wsgi
* uWSGI + nginx
* PaaS: heroku, dotCloud
mod_wsgi
=============
* 簡単。
* でも、遅い
詳細は省略!
こちらの記事がオススメです。
* `Apache+mod_wsgi+Flaskインストール | Azrael `_
uWSGI + nginx
=============
* uwsgi(とgunicorn)はわりとよく使われていそうなWSGIサーバー。
* nginxからstaticファイルを直接配信させたり、キャッシュを使ったりできます。
* ただし、Linux, nginxに関する知識も必要となります。
* uwsgiサーバーを自動起動・自動再起動するのに他の仕組みを使う必要があります。
* supervisor, circusなど
手順
----
1. uwsgiのインストールをします。::
pip install uwsgi
2. nginxをインストールして設定をします。::
location = /flaskr { rewrite ^ /flaskr/; }
location /flaskr { try_files $uri @flaskr;}
location @flaskr {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /flaskr;
uwsgi_modifier1 30;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
3. /path/to/flaskrにflaskrディレクトリを置きます::
/path/to/flaskr/
|- flaskr/
|- __init__.py
|- ...
|- manage.py
|- requirements.txt
4. /path/to/flaskrにvirtualenvで必要なライブラリをインストールした環境を作ります::
cd /path/to/flaskr
virtualenv env
source env/bin/activate
pip install -r requirements.txt
5. uwsgiを実行します。::
sudo -u nginx /path/to/uwsgi -s /tmp/uwsgi.sock --chdir /path/to/flaskr --exec-as-user nginx -H env --module flaskr --callable app
参考
----
こちらの記事がオススメです。
* `Python Flaskアプリを nginx + uWSGI 環境下へデプロイしたのでメモ | Azrael `_
PaaS: heroku
=============
今日はherokuにデプロイしてみます。
* PaaSを使えば、linuxとかnginxとかを直接意識する必要がなくなります。
* アプリの開発に集中できます。
* ただし、PaaSの枠を外れることをしようとすると諦める or がんばる必要がある。
1. アカウントを作成
--------------------
.. image:: img/heroku_1.png
:width: 70%
.. image:: img/heroku_2.png
:width: 70%
.. image:: img/heroku_3.png
:width: 70%
.. image:: img/heroku_4.png
:width: 70%
.. image:: img/heroku_5.png
:width: 70%
2. ツールをインストール
------------------------
次のURLから各自のOSに合わせたToolbeltをダウンロードしてインストールします。
* `Heroku Toolbelt `_
インストールが完了したら、terminalからheroku login
を実行してherokuにログインできることを確認します。::
$ heroku login
Enter your Heroku credentials.
Email: daisuke@dkpyn.com
Password (typing will be hidden):
Found existing public key: /Users/daisuke/.ssh/id_rsa.pub
Uploading SSH public key /Users/daisuke/.ssh/id_rsa.pub... done
Authentication successful.
3. heroku用にファイルを変更
----------------------------
開発環境にgunicornをインストールします。::
pip install gunicorn
requirements.txtにgunicornを追加します。
requirements.txt
.. literalinclude:: ../samples/05/requirements.txt
Procfileを追加する。
Procfile
.. literalinclude:: ../samples/05/Procfile
Herokuのアプリを起動するForemanで起動のテスト::
$ foreman start
01:19:17 web.1 | started with pid 2062
01:19:17 web.1 | 2013-11-04 01:19:17 [2062] [INFO] Starting gunicorn 18.0
01:19:17 web.1 | 2013-11-04 01:19:17 [2062] [INFO] Listening at: http://0.0.0.0:5000 (2062)
01:19:17 web.1 | 2013-11-04 01:19:17 [2062] [INFO] Using worker: sync
01:19:17 web.1 | 2013-11-04 01:19:17 [2065] [INFO] Booting worker with pid: 2065
4. gitリポジトリを作成
----------------------
作成しているflaskrをgitで管理するようにします。すでに作っていたらそのままでOK::
cd Flaskrを作成しているディレクトリ
echo '*.pyc' > .gitignore
git init
git add .
git commit -m 'init'
4. herokuのアプリを作成
-----------------------
heroku createでアプリを作成します。::
$ heroku create
Creating peaceful-wildwood-3278... done, stack is cedar
http://peaceful-wildwood-3278.herokuapp.com/ | git@heroku.com:peaceful-wildwood-3278.git
Git remote heroku added
自動でgitにremoteが追加されます。
5. herokuにpush
---------------
::
git push heroku master
ウェブのプロセスを0から1に設定::
$ heroku ps:scale web=1
Scaling web dynos... done, now running 1
プロセスの状態の確認::
$ heroku ps
=== web (1X): `gunicorn flaskr:app`
web.1: up 2013/11/04 01:24:53 (~ 52s ago)
7. 動作を確認
-------------
heroku createのときに表示されたURLで確認する。
* http://peaceful-wildwood-3278.herokuapp.com/
わからなければ、herokuにログインしてappsのsettingsで確認する。
あとはgit remote -vでみるとか。
(herokuはあまり使ったことないので知ってる人いたら教えてー!::
git remote -v
heroku git@heroku.com:gentle-beyond-1917.git (fetch)
heroku git@heroku.com:gentle-beyond-1917.git (push)
8. uwsgi
----------
ここではgunicornを使いましたが、uwsgiを使ってもできます。
* `uwsgi-docs/tutorials/heroku_python.rst at master · unbit/uwsgi-docs `_