FlaskのアプリをIBM Cloud (Bluemix)で公開する
Dec 24, 2017 · webpython
IBM Cloud
のライトアカウントでFlask
のアプリを公開するまでの手順
IBM Cloud
はIBMが提供するPaaS。Watson
が使えるのが特徴的。
以前はBluemix
と呼ばれていたが、最近名前が変わった。
また、ライト・アカウントという無料で使えるプラン(以前も無料枠はあったがクレカ登録が必要)が登場し、無料枠もそこそこあるので一気に使いやすくなった
あと、ツールや管理画面が結構、日本語対応しているのも良い
事前準備
随時、アップデートされる様で細かな画面や手順は変わる可能性があるので注意!
基本的には公式チュートリアルと同じ流れ
アカウントの取得
ここからアカウントを取得する
以前のBluemix
で作ったアカウント(メールアドレス)ではライトアカウントを取得できないので、
新たにアカウントを作成する必要がある・・・
(なお、Gmailの場合は「.」を付加する方法を使えば新たなアドレスの準備がいらない)
チュートリアルでは「組織」と「スペース」の作成が必要となっているが、試した時には以下の設定が自動で作成されていた
- 地域: 米国南部
- 組織: アカウント(メールアドレス)と同じ
- スペース: dev
以降の手順はこの設定が前提となるので、作成されていなければ作成する
ローカル環境の設定
IBM Cloud CLIをインストールする
ターミナルで以下のコマンドを実行
bx login
APIのエンドポイントとして、
us-south
を選択するIBM Cloudのメールアドレスとパスワードを入力する
認証が通れば、アカウントの選択になるので自分のアカウントを選択する
ログイン情報(地域やユーザなど)が表示されるので、間違いないか確認する
(この時点では「組織」と「スペース」は空白で良い)ターミナルで以下のコマンドを実行
bx target -o 組織 -s スペース
- 組織: アカウント(メールアドレス)と同じ
- スペース: dev
ログイン情報(地域やユーザなど)が表示されるので、組織とスペースが指定したものになっているか確認する
IBM Cloud上にアプリを作成
- IBM CloudにWebでログインする
- 「カタログ」を選択
- 「Cloud Foundry アプリ」の中の「Python」を選択
「ボイラープレート」の中の「Flask」は検索に出てきても、実際は選択不可なので注意 - アプリ名とホスト名を入力する
- アプリ名: 任意に入力(アカウント内でユニーク)
- ホスト名: 他者を含め
IBM Cloud
の中でユニークになるものを入力
- 価格プランでメモリ量を選択する(今回は他に動かす予定ないので256MB)
使用中になる場合は、既に稼働中のアプリがあるはずなので、それを停止する - 「作成」をクリックしてしばらく待てば作成される
プロジェクトを作成する
IDEとしてPyCharm
を使っているので、以下の手順でプロジェクトを作成する
Create New Project
を選択Flask
を選択し、以下の設定にするLocation
: フォルダがプロジェクト名。保存場所を選択Template language
:Jinja2
Create
をクリック
プロジェクト名をflask
にしないこと!
インタプリタで新しいVirtualenvを指定する場合はこちらにも注意!
デプロイ用の設定を追加
以下の3つのファイルをプロジェクト直下に追加する
- runtime.txt
- requirements.txt
- manifest.yml
各ファイルの内容は以下のとおり
runtime.txt
ここでBluemix
上のPythonのバージョンを指定する。
指定しなければ2.7
系がデフォルトとなる
requirements.txt
必要なPythonのパッケージを記入する。多分、pip
のそれと同じ
manifest.yml
デプロイ情報を設定するファイル。 基本的にはIBM Cloud上に作ったアプリの情報をそのまま入れる
command
はアプリを起動する時に実行されるスクリプトファイル名を指定する。
今回だとFlask
を実行するスクリプトファイルなので、プロジェクト名と同じファイル名を指定する
ソースを改修する
デフォルトのテンプレートからBluemix
用のソースを追加する。
追加後のソースは以下のとおり
from flask import Flask
import os
app = Flask(__name__)
if os.getenv('VCAP_APP_PORT'):
host = '0.0.0.0'
port = int(os.getenv('VCAP_APP_PORT'))
else:
# ローカル用の設定
host = '127.0.0.1'
port = 5000
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(host=host, port=port)
Bluemix
では起動時に動的に利用されるポートが決定されるので、
渡される環境変数を見てFlask
へポートの設定を行う
デプロイ
プロジェクト直下で、
bx app push
を実行すればOK
後は、アップロードからアプリの再起動まで自動で行ってくれる
.cfignore
の設定
デフォルトの状態では、一部を除き(※)プロジェクト直下のファイル全部がアップロードされてしまうので、
.cfignore
のファイルを作成して、除外したいファイルやフォルダを設定する
設定方法は.gitignore
と同じなので、venv
や.idea
のフォルダなどを指定している
※: git
関連や.DS_Store
はアップされない
開発環境
- macOS 10.13.2
- PyCharm 2017.3
- Python 3.6.1
- Flask 0.12.2