Heroku add-onのMongoHQでMongoDBを管理する方法

以下の2通りの方法があります。前者は通常のMongoDBと同様なのでこの記事では割愛して、後者のMongoHQのWebコンソールによる管理方法を紹介します。

  • ターミナルからmongoコマンドで接続して管理

    • MongoHQから提供されたインスタンスのURLに接続します。通常のMongoDB管理と同様なので割愛します。
  • MongoHQのWebコンソールで管理

    • 以下で説明します。

1.MongoHQのダッシュボードへログイン

以下の画面は無料プランのSandbox環境です。有料プランのダッシュボードはより高機能になります。

f:id:slowquery:20131228160220p:plain

herokuのWebコンソールの各アプリのAdd-on管理画面でMongo HQをクリックするとMongo HQのWebコンソールに遷移します。

2.Admin画面

  • 接続先URLの確認、ディスク使用状況確認、ユーザ管理などが行えます。

    f:id:slowquery:20131228160730p:plain

3.Collection画面

  • クエリ実行、ドキュメント追加

    f:id:slowquery:20131228160636p:plain

  • コレクションの統計閲覧・追加・削除・名前変更

    f:id:slowquery:20131228160656p:plain

  • インデックス管理

    f:id:slowquery:20131228160709p:plain

以上

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も使うといいのですが今回は割愛します。

OSXにWineをインストールしてWindows無しでWindowsアプリを実行する

Wineを使うとParallels DesktopVMware FusionOracle VM VirtualBoxといった類いの仮想化ソフト無しにWindowsアプリを実行する事が出来ます。対応ソフトは日々増え続けており、AppDBで参照する事が出来ます。AppDBに記載されていないソフトが動作するケースも多いです。

Wineインストール

brew install wine

brew install wineを実行すると、○○(ライブラリ名)を--universalでインストールしてくださいと表示されます。したがって、brew install wineが成功するまで--universalでインストールされていないライブラリを削除します。

brew uninstall ライブラリ(例:jpeg)

Wine設定

  1. 言語を設定します

    ~/.zshrc等に以下を追加して再読み込みします。

     export LC_ALL=ja_JP.UTF-8
    
  2. 以下のGistから設定ファイルをダウンロードします。

    mattintosh4/osx-wine.inf

  3. 上記Gistからダウンロードしたosx-wine.infに対して以下を実行します。

    /usr/local/bin/wine rundll32 setupapi.dll,InstallHinfSection DefaultInstall 128 ./osx-wine.inf

Windowsアプリ実行

  1. windowsアプリのディレクトリで以下を実行します

    wine ./windowsアプリ.exe

explorer.exe

Windowsといえばexplorer.exe。wineでエクスプローラーを使いたい場合、以下を実行するとexplorer.exeと似たようなアプリが起動します。

wine explorer

Pythonでインストール済みのモジュールを一括アップグレード

Pythonでインストール済みのモジュールを一括でアップグレードしたい場合があると思います。OSXのHomebrewでいうとbrew upgradeコマンドのようなことをしたい場合です。Pythonのpip単体では一括アップグレードはできませんので、そうした場合はpip-toolsを使うと便利です。

pip-toolsのインストール

    pip install pip-tools

インストール済みモジュールの更新チェック

    pip-review

一括アップグレード

    pip-review --auto

対話的な一括アップグレード

    pip-review --interactive