5. アプリを公開する¶
作成したウェブアプリケーションを世の中の人に使ってもらえるようにします。
Flaskをデプロイする方法¶
参考: | Deployment Options — Flask 0.10.1 documentation |
---|
色々ありますが、私は以下の3つがおすすめです。
- apache の mod_wsgi
- uWSGI + nginx
- PaaS: heroku, dotCloud
uWSGI + nginx¶
uwsgi(とgunicorn)はわりとよく使われていそうなWSGIサーバー。
nginxからstaticファイルを直接配信させたり、キャッシュを使ったりできます。
ただし、Linux, nginxに関する知識も必要となります。
- uwsgiサーバーを自動起動・自動再起動するのに他の仕組みを使う必要があります。
- supervisor, circusなど
手順¶
uwsgiのインストールをします。:
pip install uwsgi
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; }
/path/to/flaskrにflaskrディレクトリを置きます:
/path/to/flaskr/ |- flaskr/ |- __init__.py |- ... |- manage.py |- requirements.txt
/path/to/flaskrにvirtualenvで必要なライブラリをインストールした環境を作ります:
cd /path/to/flaskr virtualenv env source env/bin/activate pip install -r requirements.txt
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
PaaS: heroku¶
今日はherokuにデプロイしてみます。
- PaaSを使えば、linuxとかnginxとかを直接意識する必要がなくなります。
- アプリの開発に集中できます。
- ただし、PaaSの枠を外れることをしようとすると諦める or がんばる必要がある。
2. ツールをインストール¶
次のURLから各自のOSに合わせた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
Flask
Flask-SQLAlchemy
Flask-Script
gunicorn
Procfileを追加する。
Procfile
web: gunicorn flaskr:app
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で確認する。
わからなければ、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を使ってもできます。