MongoDBとPythonを使ったWebアプリをHerokuで無料で運用する
はじめに
MongoDBとPythonで開発したWebアプリをHerokuで運用してみます。MongoDBの運用にはMongoDBホスティングサービスのMongoHQを使い、PythonのWeb Application Frameworkは軽量なBottleを使います。HerokuのようなPaaSやMongoHQ/MongoLabのようなDBaaSを使えば、IaaSよりも短期間で楽にアプリを公開できます。
HerokuにWebアプリをデプロイ
アプリのローカルgitリポジトリ作成
mkdir アプリ名 cd アプリ名 git init git add . git commit -m "コメント"
※virtualenvでPythonの仮想環境を作っておくとパッケージ管理等が楽ですが必須ではありません。
Pythonアプリの開発
Bottleを使ったアプリを開発します。
注意点
MongoHQへの接続設定
MongoHQへの接続を次のように設定します。MongoHQへの接続先URLはHerokuの環境変数
MONGOHQ_URL
です。MongoHQ内のデータベース名は接続先URLの中の文字列に含まれていて、接続先URLをパースして取り出します。from pymongo import MongoClient from urlparse import urlparse MONGO_URL = os.environ.get('MONGOHQ_URL') if MONGO_URL: client = MongoClient(MONGO_URL) db = client[urlparse(MONGO_URL).path[1:]] else: client = MongoClient('localhost', 27017) db = client["データベース名"] collection = db[“コレクション名”]
IPとポートの指定
if MONGO_URL: run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000))) else: run(host='localhost', port=8080)
Pythonパッケージリスト
requirements.txt
の作成アプリで使っているPythonパッケージをrequirements.txtに記載します。ここに記載されたパッケージはアプリのデプロイ時に自動インストールされます。
requirements.txt
を作成pip freeze > requirements.txt
アプリで必要なパッケージ以外の行を削除
アプリ設定&起動コマンド
Procfile
の作成Procfile
という名前のファイルをを作成してDynoの種類と起動コマンドを記載します。以下はアプリ名がapp.pyの場合です。vim Procfile
以下を記載
web: python app.py
herokuへアプリ登録
heroku apps:create アプリ名
herokuへデプロイ
git push heroku master
Web dynoのスケール数をx1に設定する(0の場合のみ実施)
heroku ps:scale web=1
HerokuのWebコンソールで設定してもいいです。
MongoHQのAdd-onをアプリに追加
今回はMongoHQをHerokuのAdd-onとして使う方法を説明します。Add-onではなくMongoHQと個別に登録してHerokuアプリから使うこともできますが省略します。
クレジットカード情報の登録
HerokuでAdd-onを利用するためにはクレジットカードの登録が必要です。Add-onが無料であっても必要となります。したがってアカウント設定画面でクレジットカード情報をを登録します。
MongoHQ Add-onをアプリへ追加
heroku add-onsからMongoHQのページに行って
MongoHQ Sandbox free
を選択して、Add MongoHQ Sandbox free
ボタンをクリックします。free以外を選択しないよう気をつけてください。アプリ再起動
heroku restart --app アプリ名
料金無料の制限
無料と言ってもパフォーマンスやMongoDBの容量などに制限があります。詳細は各サービスの案内を参考にしてください。
Heroku
1アプリにつきDynoが750hまで無料で使えます。1ヶ月は31 day x 24h = 744hのためWeb Dyno x1を使うだけであれば、アプリを起動し続けていても料金はかかりません。
MongoDB (MongoHQ)
MongoHQは容量512MBのSandbox環境であれば無料で使えます。同様のMongoDBホスティングサービスMongoLabでは496MBまで無料です。設定は多少変わりますがMonogoLabを使ってもかまいません。
以上です。
他にLogglyやNewRelicといった運用管理系のaddonも使うといいのですが今回は割愛します。