CloudFoundryのPivotalによるディストリビューションであるPivotal CloudFoundyの、そのまた開発者マシンでのローカル実行用ディストリビューションであるPCF DevをWindows 10にインストールしてみました。

CloudFoundryは、PaaSを実現するOSSということで以前から気にはなっていたのですが、とにかくセットアップと運用が大変という噂を聞いており、距離をおいていたのですが、PCF DevはVirtualBox上の1VMで完結するということだったので手を出してみました。実際、そのVirtualBox上のVMも、CloudFoundryのCLIツールのプラグインが自動的にセットアップしてくれるので、とても簡単でした。

というわけでインストールメモ。

なお、VirtualBoxは既にインストール済のWindows 10環境で実施しました。

CloudFoundryのCLIツールのインストール

まずはCloudFoundryのCLIツールのインストール。CloudFoundryは、CloudFoundry上で動かすアプリを開発する開発者のマシンにCLIツールをインストールする必要があります。アプリ開発者は、このCLIツールを使って、アプリケーションをCloudFoundryに対してデプロイしたりなど、CloudFoundryに対する操作を行います。これは、通常のCloudFoundryでも、PCF Devでも変わりません。

CLIツールのダウンロード以下から可能です。

https://github.com/cloudfoundry/cli#downloads

インストーラを実行すると、CloudFoundryのCLIツールがインストールされます。インストール後、cfコマンドがコマンドプロンプトから実行できるようになります。

C:\Users\ynojima>cf -v
cf version 6.23.1+a70deb3.2017-01-13

CloudFoundry CLIのPCF Dev Pluginのインストール

続いて、CloudFoundry CLIのPCF Dev Pluginのインストールを行います。

ダウンロードは以下のPivotalのサイトから。ダウンロードにはPivotalのユーザー登録が求められます。

https://network.pivotal.io/products/pcfdev

インストーラを実行すると、CloudFoundry CLIのPCF Dev Pluginがインストールされ、cfコマンドにdevサブコマンドが追加されます。

C:\Users\ynojima>cf dev version
PCF Dev version 0.23.0 (CLI: 474b3ba, OVA: 0.436.0)

PCF Devの起動

cf dev startコマンドを実行することで、PCF Devを起動することが出来ます。なお、Windows 10上のコマンドプロンプトで実行したところ、制御文字が化けて表示される問題がありましたが、無視しても動きそうです。PowerShellから実行した場合は、正常に表示されました。

コマンドプロンプト

C:\Users\ynojima>cf dev start
Please sign in with your Pivotal Network account.
Need an account? Join Pivotal Network: https://network.pivotal.io

Email[36;1m>[0m

Password[36;1m>[0m

PowerShell

PS C:\Users\ynojima> cf dev start
Please sign in with your Pivotal Network account.
Need an account? Join Pivotal Network: https://network.pivotal.io

Email>
Password>

コマンドを起動すると、Pivotalのユーザー名とパスワードを求められるので入力しましょう。認証が通ると、VMイメージのダウンロードが始まり、VirtualBoxへのインポート、ヘッドレスモードでの起動、各種プロセスの起動確認まで自動的に行ってくれます。お手軽!

PS C:\Users\ynojima> cf dev start
Please sign in with your Pivotal Network account.
Need an account? Join Pivotal Network: https://network.pivotal.io

Email>
Password>
Downloading VM...
Progress: |+++=================>| 100%
VM downloaded.
Allocating 4096 MB out of 16251 MB total system memory (7955 MB free).
Importing VM...
Starting VM...
Provisioning VM...
Waiting for services to start...
8 out of 57 running
8 out of 57 running
8 out of 57 running
39 out of 57 running
55 out of 57 running
57 out of 57 running
 _______  _______  _______    ______   _______  __   __
|       ||       ||       |  |      | |       ||  | |  |
|    _  ||       ||    ___|  |  _    ||    ___||  |_|  |
|   |_| ||       ||   |___   | | |   ||   |___ |       |
|    ___||      _||    ___|  | |_|   ||    ___||       |
|   |    |     |_ |   |      |       ||   |___  |     |
|___|    |_______||___|      |______| |_______|  |___|
is now running.
To begin using PCF Dev, please run:
   cf login -a https://api.local.pcfdev.io --skip-ssl-validation
Apps Manager URL: https://local.pcfdev.io
Admin user => Email: admin / Password: admin
Regular user => Email: user / Password: pass

PCF Devの管理画面へのアクセス

では、PCF Devの管理画面にアクセスしてみましょう。

PCF Devの管理画面はhttps://loca.pcfdev.ioで提供されています。local.pcfdev.ioというFQDNですが、192.168.11.11に向いており、VirtualBox上のVMにはそのアドレスが振られているようです。ただ、証明書は自己署名証明書なので、そのままではブラウザでエラーが発生します。

image

 

PCF Devの自己署名証明書のインストール

証明書のエラーは無視して続行することも出来ますが、PCF Dev CLI PluginはPCF Devの自己証明書をOSの証明書ストアにインストールする機能を提供しています。cf dev trustというコマンドを実行することで、証明書のインストールが実施できます。

PS C:\Users\ynojima> cf dev trust
***Warning: a self-signed certificate for *.local.pcfdev.io has been inserted into your OS certificate store. To remove this certificate, run: cf dev untrust***

証明書のインストールが完了すると、ブラウザでPCF Devの管理画面が表示されるようになります。

image

 

PCF Dev管理画面へのログイン

PCF Devの管理画面へは、ユーザー:admin、パスワード:adminか、ユーザー:user、パスワード:passでログインすることが出来ます。

image

 

PCF Devへのアプリのデプロイ

折角なので、PCF Devにアプリをデプロイしてみましょう。CloudFoundryでは、前述の通り、CLIツールを使うことでアプリをデプロイ出来ます。

CloudFoundryのCLIツールはデプロイにあたり、デプロイ先を知る必要があり、PCF Devでは、cf dev targetコマンドを実行することでPCF Devをデプロイ先として設定できます。

PS C:\Users\ynojima> cf dev target
Successfully logged in to api.local.pcfdev.io as user.

そしてデプロイですが、cf pushコマンドを実行することでデプロイ出来ます。cf pushコマンドは引数にアプリ名、-pオプションで成果物へのパスを指定します。その他にも多数のオプションが存在します。

試しに、Spring BootのサンプルWebアプリをデプロイしてみましょう。

PS C:\Users\ynojima\Home\workspace\jetbrains\spring-boot\spring-boot-samples\spring-boot-sample-web-ui> cf push spring-boot-sample-web-ui -p .\target\spring-boot-sample-web-ui-2.0.0.BUILD-SNAPSHOT.jar
Creating app spring-boot-sample-web-ui in org pcfdev-org / space pcfdev-space as user...
OK

Creating route spring-boot-sample-web-ui.local.pcfdev.io...
OK

Binding spring-boot-sample-web-ui.local.pcfdev.io to spring-boot-sample-web-ui...
OK

Uploading spring-boot-sample-web-ui...
Uploading app files from: C:\Users\ynojima\AppData\Local\Temp\unzipped-app609555807
Uploading 18M, 135 files
Done uploading
OK

Starting app spring-boot-sample-web-ui in org pcfdev-org / space pcfdev-space as user...
Downloading dotnet-core_buildpack...
Downloading java_buildpack...
Downloading ruby_buildpack...
Downloading nodejs_buildpack...
Downloading go_buildpack...
Downloaded nodejs_buildpack (109.4M)
Downloading python_buildpack...
Downloaded dotnet-core_buildpack (169.3M)
Downloading php_buildpack...
Downloaded ruby_buildpack (260.8M)
Downloading staticfile_buildpack...
Downloaded staticfile_buildpack
Downloading binary_buildpack...
Downloaded java_buildpack (249.1M)
Downloaded binary_buildpack (9.3K)
Downloaded go_buildpack (392M)
Downloaded python_buildpack (255.3M)
Downloaded php_buildpack (310.4M)
Creating container
Successfully created container
Downloading app package...
Downloaded app package (18M)
Staging...
-----> Java Buildpack Version: v3.10 (offline) | https://github.com/cloudfoundry/java-buildpack.git#193d6b7
-----> Downloading Open Jdk JRE 1.8.0_111 from https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_111.tar.gz (found in cache)
       Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.6s)
-----> Downloading Open JDK Like Memory Calculator 2.0.2_RELEASE from https://java-buildpack.cloudfoundry.org/memory-calculator/trusty/x86_64/memory-calculator-2.0.2_RELEASE.tar.gz (found in cache)
       Memory Settings: -Xmx681574K -Xms681574K -XX:MetaspaceSize=104857K -XX:MaxMetaspaceSize=104857K -Xss349K
-----> Downloading Spring Auto Reconfiguration 1.10.0_RELEASE from https://java-buildpack.cloudfoundry.org/auto-reconfiguration/auto-reconfiguration-1.10.0_RELEASE.jar (found in cache)
Exit status 0
Staging complete
Uploading droplet, build artifacts cache...
Uploading build artifacts cache...
Uploading droplet...
Uploaded build artifacts cache (109B)
Uploaded droplet (63.1M)
Uploading complete
Destroying container
Successfully destroyed container

0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
1 of 1 instances running

App started


OK

App spring-boot-sample-web-ui was started using this command `CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-2.0.2_RELEASE -memorySizes=metaspace:64m..,stack:228k.. -memoryWeights=heap:65,metaspace:10,native:15,stack:10 -memoryInitials=heap:100%,metaspace:100% -stackThreads=300 -totMemory=$MEMORY_LIMIT) && JAVA_OPTS="-Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-buildpack/open_jdk_jre/bin/killjava.sh $CALCULATED_MEMORY" && SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher`

Showing health and status for app spring-boot-sample-web-ui in org pcfdev-org / space pcfdev-space as user...
OK

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: spring-boot-sample-web-ui.local.pcfdev.io
last uploaded: Sat Jan 21 15:46:38 UTC 2017
stack: cflinuxfs2
buildpack: java-buildpack=v3.10-offline-https://github.com/cloudfoundry/java-buildpack.git#193d6b7 java-main open-jdk-like-jre=1.8.0_111 open-jdk-like-memory-calculator=2.0.2_RELEASE spring-auto-reconfiguration=1.10.0_RELEASE

     state     since                    cpu     memory           disk             details
#0   running   2017-01-22 12:48:29 AM   62.8%   172.9M of 256M   142.5M of 512M

ここでは、Spring BootのサンプルWebアプリのExecutable Jarを指定したので、それにあわせてデプロイの設定が行われています。また、指定したアプリ名がアプリのサブドメインに使用されるので、アプリのURLはhttps://spring-boot-sample-web-ui.local.pcfdev.io/となります。URLにアクセスすると、デプロイしたアプリが動作していることが確認できます。

image

 

おわりに

以上、PCF Devのインストール方法とPCF Devへのアプリのデプロイ方法の紹介でした。きっと大変だろうと身構えていましたが、やってみるとCloudFoundryのインストールの難しさはVMイメージの中に隠蔽されており、お手軽にアプリ開発者向けのローカルPaaS環境が構築できました。ちょっとCloudFoundryを試してみたいけど、CloudFoundryのPublic Cloudを利用するのは決裁が面倒で、という人は是非試してみてはと思います。