MongoDBとPythonを使ったWebアプリをHerokuで無料で運用する

はじめに

MongoDBPythonで開発したWebアプリをHerokuで運用してみます。MongoDBの運用にはMongoDBホスティングサービスのMongoHQを使い、PythonのWeb Application Frameworkは軽量なBottleを使います。HerokuのようなPaaSやMongoHQ/MongoLabのようなDBaaSを使えば、IaaSよりも短期間で楽にアプリを公開できます。

HerokuにWebアプリをデプロイ

  1. アプリのローカルgitリポジトリ作成

     mkdir アプリ名
     cd アプリ名
     git init
     git add .
     git commit -m "コメント"
    

    ※virtualenvでPythonの仮想環境を作っておくとパッケージ管理等が楽ですが必須ではありません。

  2. Pythonアプリの開発

    • Bottleを使ったアプリを開発します。

    • 注意点

      1. 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[“コレクション名”]
        
      2. IPとポートの指定

          if MONGO_URL:       
              run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
          else:
              run(host='localhost', port=8080)
        
  3. Pythonパッケージリストrequirements.txtの作成

    アプリで使っているPythonパッケージをrequirements.txtに記載します。ここに記載されたパッケージはアプリのデプロイ時に自動インストールされます。

    1. requirements.txtを作成

       pip freeze > requirements.txt
      
    2. アプリで必要なパッケージ以外の行を削除

  4. アプリ設定&起動コマンドProcfileの作成

    Procfileという名前のファイルをを作成してDynoの種類と起動コマンドを記載します。以下はアプリ名がapp.pyの場合です。

     vim Procfile
    

    以下を記載

     web: python app.py
    
  5. herokuへアプリ登録

     heroku apps:create アプリ名
    
  6. herokuへデプロイ

     git push heroku master
    
  7. Web dynoのスケール数をx1に設定する(0の場合のみ実施)

     heroku ps:scale web=1       
    

    HerokuのWebコンソールで設定してもいいです。

MongoHQのAdd-onをアプリに追加

今回はMongoHQをHerokuのAdd-onとして使う方法を説明します。Add-onではなくMongoHQと個別に登録してHerokuアプリから使うこともできますが省略します。

  1. クレジットカード情報の登録

    HerokuでAdd-onを利用するためにはクレジットカードの登録が必要です。Add-onが無料であっても必要となります。したがってアカウント設定画面でクレジットカード情報をを登録します。

  2. MongoHQ Add-onをアプリへ追加

    heroku add-onsからMongoHQのページに行ってMongoHQ Sandbox freeを選択して、Add MongoHQ Sandbox free ボタンをクリックします。free以外を選択しないよう気をつけてください。

  3. アプリ再起動

     heroku restart --app アプリ名
    

料金無料の制限

無料と言ってもパフォーマンスやMongoDBの容量などに制限があります。詳細は各サービスの案内を参考にしてください。

  • Heroku

    1アプリにつきDynoが750hまで無料で使えます。1ヶ月は31 day x 24h = 744hのためWeb Dyno x1を使うだけであれば、アプリを起動し続けていても料金はかかりません。

    参考:Usage & Billing

  • MongoDB (MongoHQ)

    MongoHQは容量512MBのSandbox環境であれば無料で使えます。同様のMongoDBホスティングサービスMongoLabでは496MBまで無料です。設定は多少変わりますがMonogoLabを使ってもかまいません。

以上です。

他にLogglyやNewRelicといった運用管理系のaddonも使うといいのですが今回は割愛します。