2015-10-23

mViewer を Cloud Foundry で動かす

「Cloud Foundry 百日行」第85日目、本日は Mongo DB の管理ツール mViewer です。

Mongo DB については、この百日行では、 第68日目 に Cloud Foundry 上で動く Mongo DB のサービスブローカ spring-boot-cf-service-broker-mongo を紹介しました。そして、それを使ってデプロイするアプリの例として、 PullUp 等も取り上げました。そんな中、Mongo DB を使い始めたら欲しくなってくるのが、その Mongo DB を Web で簡単に管理できるツールですね。Mongo DB の管理ツールは沢山出回っています( MongoDB Admin UIs )。その中で、本日の mViewer は、手軽にすぐに使える便利な OSS になっています。

基本情報

手順の概要は以下の通りです。

  • 1) ソースコードの取得
  • 2) アプリのデプロイ
  • 3) 動作確認

1. ソースコードの取得

まずはソースコードを取得します。

~$ git clone https://github.com/Imaginea/mViewer
~$ cd mViewer/
~/mViewer$ ls
build.xml  LICENSE.txt  mViewer.properties  pom.xml  README.md  scripts  src  target

src ディレクトリの中を探っていくと、これは Java のアプリであることがわかります。

2. アプリのデプロイ

Deploying to Other Servlet-Containers によると、 Apache Maven を使って、WAR ファイルを作り、 tomcat 7x 上にデプロイするとのこと。Cloud Foundry へのデプロイの場合は、アプリケーションサーバを特に気にすることは無いので、WAR ファイルを作り、デプロイを進めて行きましょう。

2.1 WAR ファイルの作成

Deploying to Other Servlet-Containers の手順に従って、 mvn clean package を実行します。

~/mViewer$ mvn clean package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building mViewer 0.9.2
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom (4 KB at 5.6 KB/sec)

:

Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/2.14/surefire-api-2.14.jar (153 KB at 653.4 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/2.14/maven-surefire-common-2.14.jar (228 KB at 632.4 KB/sec)
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-war-plugin:2.2:war (default-war) @ mViewer ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mViewer] in [/home/ueno/mViewer/target/mViewer-0.9.2]
[INFO] Processing war project
[INFO] Copying webapp resources [/home/ueno/mViewer/src/main/webapp]
[INFO] Webapp assembled in [495 msecs]
[INFO] Building war: /home/ueno/mViewer/target/mViewer-0.9.2.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.861s
[INFO] Finished at: Tue Aug 25 20:29:41 JST 2015
[INFO] Final Memory: 17M/194M
[INFO] ------------------------------------------------------------------------

ビルドが成功しました。

target ディレクトリ配下に WAR ファイルが生成されているかどうか、確認します。

~/mViewer$ ls target
classes  generated-sources  generated-test-sources  maven-archiver  mViewer-0.9.2  mViewer-0.9.2.war  test-classes

mViewer-0.9.2.war が生成されています。

2.2 Mongo DB サービスの作成とバインド

まずは --no-start で生成された WAR ファイルをプッシュしておきます。特定のファイルやディレクトリを指定してデプロイするには、 -p のオプションを使います。

~/mViewer$ cf push mviewer -p target/mViewer-0.9.2.war --no-start
Creating app mviewer in org ueno / space test1 as ueno...
OK
 
Creating route mviewer.10.244.0.34.xip.io...
OK
 
Binding mviewer.10.244.0.34.xip.io to mviewer...
OK
 
Uploading mviewer...
Uploading app files from: target/mViewer-0.9.2.war
Uploading 8.7M, 790 files
Done uploading               
OK

続いて、作成する Mongo DB サービスのブローカをまず確認します。

~/mViewer$ cf marketplace
Getting services from marketplace in org ueno / space test1 as ueno...
OK
 
service      plans                     description   
Mongo DB     Default Mongo Plan*       A simple mongo implementation   
PostgreSQL   Basic PostgreSQL Plan*    PostgreSQL on shared instance.   
p-mysql      100mb, 1gb                MySQL databases on demand   
p-redis      shared-vm, dedicated-vm   Redis service to provide a key-value store   
 
* These service plans have an associated cost. Creating a service instance will incur this cost.
 
TIP:  Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.

Mongo DB が登録されていますね。
ではこれを使って、サービス mongodb01 を作成します。

~/mViewer$ cf cs 'Mongo DB' 'Default Mongo Plan' mongodb01
Creating service instance mongodb01 in org ueno / space test1 as ueno...
OK
 
Attention: The plan `Default Mongo Plan` of service `Mongo DB` is not free.  The instance `mongodb01` will incur a cost.  Contact your administrator if you think this is in error.

上記で cf cs ... とありますが、これは、 cf create-service ... と同じです。タイピングが短くて済みますね。

では、アプリ mviewer とサービス mongodb01 をバインドします。

~/mViewer$ cf bs mviewer mongodb01
Binding service mongodb01 to app mviewer in org ueno / space test1 as ueno...
OK
TIP: Use 'cf restage mviewer' to ensure your env variable changes take effect

2.3 アプリの起動

ではアプリを起動します。
既に --no-start でデプロイした状態であるので、 restart して起動します。

~/mViewer$ cf restart mviewer
Starting app mviewer in org ueno / space test1 as ueno...
-----> Downloaded app package (5.3M)
-----> Java Buildpack Version: v3.0 | https://github.com/cloudfoundry/java-buildpack.git#3bd15e1
-----> Downloading Open Jdk JRE 1.8.0_60 from https://download.run.pivotal.io/openjdk/trusty/x86_64/openjdk-1.8.0_60.tar.gz (2.7s)
       Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (0.9s)
-----> Downloading Tomcat Instance 8.0.26 from https://download.run.pivotal.io/tomcat/tomcat-8.0.26.tar.gz (1.0s)
       Expanding Tomcat to .java-buildpack/tomcat (0.1s)
-----> Downloading Tomcat Lifecycle Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-lifecycle-support/tomcat-lifecycle-support-2.4.0_RELEASE.jar (0.1s)
-----> Downloading Tomcat Logging Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-logging-support/tomcat-logging-support-2.4.0_RELEASE.jar (0.0s)
-----> Downloading Tomcat Access Logging Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-access-logging-support/tomcat-access-logging-support-2.4.0_RELEASE.jar (0.0s)
 
-----> Uploading droplet (56M)
 
1 of 1 instances running
 
App started
 
 
OK
 
App mviewer was started using this command `JAVA_HOME=$PWD/.java-buildpack/open_jdk_jre JAVA_OPTS="-Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-buildpack/open_jdk_jre/bin/killjava.sh -Xmx160M -Xms160M -XX:MaxMetaspaceSize=64M -XX:MetaspaceSize=64M -Xss853K -Daccess.logging.enabled=false -Dhttp.port=$PORT" $PWD/.java-buildpack/tomcat/bin/catalina.sh run`
 
Showing health and status for app mviewer in org ueno / space test1 as ueno...
OK
 
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: mviewer.10.244.0.34.xip.io
last uploaded: Tue Sep 29 06:14:31 UTC 2015
stack: cflinuxfs2
buildpack: java-buildpack=v3.0-https://github.com/cloudfoundry/java-buildpack.git#3bd15e1 open-jdk-jre=1.8.0_60 tomcat-access-logging-support=2.4.0_RELEASE tomcat-instance=8.0.26 tomcat-lifecycle-support=2.4.0_RELEASE tomcat-logging-support=2.4.0_RELEASE
 
     state     since                    cpu    memory           disk      details   
#0   running   2015-09-29 03:16:05 PM   0.0%   166.4M of 256M   0 of 1G  

無事、アプリが起動しました。

3. 動作確認

ブラウザからアプリにアクセスします。

Mongo DB へ接続するための情報を入力する必要があるので、まずは環境変数に格納されている情報を取得します。

~/mViewer$ cf env mviewer
Getting env variables for app mviewer in org ueno / space test1 as ueno...
OK
 
System-Provided:
{
 "VCAP_SERVICES": {
  "Mongo DB": [
   {
    "credentials": {
     "uri": "mongodb://b78942cd-54b8-4996-81c7-016c00c5be7e:password@192.168.15.91:27017/29b47616-2f6c-43fb-b84b-2d8321392382"
    },
    "label": "Mongo DB",
    "name": "mongodb01",
    "plan": "Default Mongo Plan",
    "tags": [
     "mongodb",
     "document"
    ]
   }
  ]
 }
}

:
 

上記の Mongo DB の URL である mongodb://b78942cd-54b8-4996-81c7-016c00c5be7e:password@192.168.15.91:27017/29b47616-2f6c-43fb-b84b-2d8321392382 の箇所から、 mongodb://<Username>:<Password>@<Host>:<Port>/<Databases> のフォーマットに従い、それぞれの情報を抜き出します。

Host → 192.168.15.91
Port → 27017
Username → b78942cd-54b8-4996-81c7-016c00c5be7e
Password → password
Databases → 29b47616-2f6c-43fb-b84b-2d8321392382

これらの情報を画面に入力して、 Connect をクリックすると、

DB に接続できました。

Mongo DB なので、JSON 形式で DB の情報が登録されています。

DB 追加してみます。
左側にある「+」のボタンをクリックし、DB test01 を追加します。

DB test01 が追加され、DB 情報が表示されています。

DB test01 にコレクション col01 を追加します。

コレクション col01 にドキュメント {"name":"taro"} を追加します。

ドキュメント {"name":"taro"} が登録されて表示されています。

Server Statistics をクリックすると、ホストの情報が表示されます。

Mongo Graphs をクリックすると、DB に対して query 実行されている状況がコマンド毎にグラフ表示されています。

このアプリを更に使っていきたい読者は、 ドキュメント を参考にしてください。

まとめ

本日は、Mongo DB 管理ツール mViewer を取り上げました。アプリ自体は Java 製でしたが、Cloud Foundry へのデプロイは、ローカルで WAR ファイルを作成してからそれをプッシュ、Mongo DB サービスとバインドしてからアプリ再起動、という比較的簡単な手順でした。手軽にデプロイして、Web 上で Mongo DB をビジュアルに管理できる、という素敵なアプリ。今後も是非活用してください。

今回使用したソフトウェア