「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 をビジュアルに管理できる、という素敵なアプリ。今後も是非活用してください。
今回使用したソフトウェア
- cf-release (v211)
https://github.com/cloudfoundry/cf-release/tree/v211
(https://github.com/cloudfoundry/cf-release/tree/2121dc6405e0f036efa4dba963f7f49b07e76ffa) - bosh-lite
https://github.com/cloudfoundry/bosh-lite/tree/552dc6869600c5350eb7ffb4fb9c9c5e79e3889d - CF CLI (v6.12.0-8c65bbd-2015-06-30T00:10:31+00:00)
https://github.com/cloudfoundry/cli/tree/v6.12.0
(https://github.com/cloudfoundry/cli/tree/8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48) - spring-boot-cf-service-broker-mongo
https://github.com/nota-ja/spring-boot-cf-service-broker-mongo/tree/cf-100-day-challenge-068-with-env-specific-configs - mViewer
https://github.com/Imaginea/mViewer/tree/18a79391bc991aaee672662c6ceaf61bc7cdd9e6