spring-bootの公式リファレンスに載っているのですが、Spring Boot ActuatorのCloudFoundry連携機能とSpring Securityを同時に使う場合、Spring Boot Actuatorが提供するエンドポイントである/cloudfoundryapplication以下をSpring Securityによる認証対象から外す必要があります。なお、/cloudfoundryapplication以下はCloudFoundryのUAAトークン認証で保護されているので、Spring Securityの認証対象外にしても認証なしで外部に曝される訳ではありません。PCF側のドキュメントには載っていなかったのでメモ。

 

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .mvcMatchers("/cloudfoundryapplication/**")
                .permitAll()
            .mvcMatchers("/mypath")
                .hasAnyRole("SUPERUSER")
            .anyRequest()
                .authenticated().and()
        .httpBasic();
}

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-cloudfoundry.html

APR
7

PCF Dev v0.25.0がリリースされています。今回のリリースから、Spring Boot Actuator連携機能が含まれているので、Spring Boot Actuatorが提供するエンドポイントを通じて、PCFのApp Managerがアプリのヘルスチェック情報を収集したり、Logger別にログレベルを動的に変更することが出来るようになりました。

早速試してみたのでそのメモ。

Spring Boot Actuatorを有効にしたアプリの作成

まずはSpring InitializrでSpring Bootアプリを作成。Versionは、1.5以上、Dependencyとしては、WebとActuatorが必要です。

image

生成されたソースのzipを解凍し、解凍して出来たディレクトリの中でmavenなら以下のコマンドを実行します。(そういえば、Windows 10のBash on Windowsも、Creators updateからOpenJDKが動作するようになっていました。色々便利ですね。)

./mvnw package

 

アプリのPCF Devへのpush

そしていつも通りcf push

cf push pcfdev-actuator-demo -i 3 -p target/pcfdev-actuator-demo-0.0.1-SNAPSHOT.jar

PCF DevのApp Managerからインスタンスのヘルスチェック情報の確認

デプロイされたアプリをPCF DevのApp Managerから確認すると、アプリ名の左にSpring Bootのロゴが表示されており、各インスタンスのヘルスチェック情報が詳しく表示されるようになりました。

image

PCF Devから、アプリのログレベルを動的に変更

また、Logsタブには"Configure Logging Levels"というボタンが追加されており、各Loggerのログレベルを画面から動的に変更することが可能です。

image

うーん、面白い。

 

ちなみに、App ManagerとSpring Boot Actuatorの間の認証は、ザックリいうと以下のようなプロセスのようです。

  1. PCFがSpring Bootアプリを、APIエンドポイントのURLを環境変数として与えた状態で起動
  2. Actuatorは環境変数から取得したPCFのAPIを叩き、PCFの公開鍵を取得
  3. App ManagerがActuatorの提供しているPCF連携用APIを呼び出した場合、Actuatorは取得した公開鍵でリクエストを認証

環境変数から設定へのポインタを渡す、Twelve-Factor Appのお手本のような構成ですね。

FEB
18

先日のエントリでは、PCF Devをローカルの開発マシン上にインストールする方法を紹介しましたが、チームで開発していると、アプリをメンバ皆がアクセス出来るところにデプロイしたい場合があります。例えば、PullRequest駆動開発をしている場合、PullReqが上がるたびにコードがコンパイルされ、アプリケーションサーバーにデプロイされていると、レビューが捗りそうですよね。やはり開発サーバーにPCF Devをインストール出来たら便利だよなぁと考え、Ubuntu Server 16.04上にインストールを試してみましたのでそのインストールメモ。

環境

サーバーとクライアントPCの構成は以下の通り。

  • サーバー
    • OS:Ubuntu Server 16.04
    • CPU:4コア
    • メモリ:8GB
  • クライアントPC
    • OS:Windows 10
    • CPU:4コア
    • メモリ:8GB

ネットワーク構成は以下の通り。

 

PCFDevネットワーク図

PCF Devでは、PCF Devを動かすホストマシンの上にVirtualBoxのVMが自動的に作成され、VMの中でCloud Foundryの各種サービスが動作します。クライアントPCでPCF Devを動かす場合は、CloudFoundry CLIや、Webブラウザは、HostOnly Network経由でVM内のサービスにアクセス出来ますが、今回のようにPCF Devをサーバーマシンにインストールし、開発作業は別のクライアントPCで実施する場合、クライアントPCからPCF Dev VMにどうやってアクセスするかが問題となります。ホストマシンやPCF Dev VMのルーティングテーブルを弄ったり、HostOnly Networkに対してL2TP/IPsec VPNを張ったり色々方法は考えられますが、今回はホストマシン側だけの設定変更で済ませられるよう、ホストマシンにHAProxyをインストールし、PCF Devへのリクエストを中継させる構成としました。

 

VirtualBoxのインストール

まずはサーバーにVirtualBoxをインストール。

server$ sudo apt-get install virtualbox

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

続いて、CloudFoundry CLIのインストール。

Windows 10であるクライアントPCには、CLIのインストーラを以下からダウンロードしてインストール。

https://github.com/cloudfoundry/cli/releases

 

Ubuntu Serverであるサーバーには、Cloud Foundryのレポジトリを追加した上でレポジトリからインストール。

server$ wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
server$ echo "deb http://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
server$ sudo apt-get update
server$ sudo apt-get install cf-cli

サーバーにはPCF Dev CLI Pluginもインストール。インストーラのダウンロードは、Pivotalのサイトから。ダウンロードにはPivotalのユーザー登録が求められます。

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

server$ ./pcfdev-v0.23.0+PCF1.9.0-linux

PCF Devの起動

server$ cf dev start -d pcfdev.sharplab.org -i 10.101.23.2

PCF Dev CLI Pluginのインストールが出来たら、上記のコマンドでPCF Devを起動します。-dオプションはPCF Devにアクセスする際に使用するドメインを、-iオプションはPCF Dev VMのHostOnly Network側のNICに付与するIPアドレスを指定します。ネットマスクは/24固定、ホストマシン側のvboxnetインターフェースに付与されるIPアドレスはそのサブネットの先頭が自動的に付与されるようです。

コマンドを実行すると、PivotalのユーザーID/パスワードの入力を求められるので、入力しましょう。

その後、VMイメージのダウンロードが始まり、VirtualBoxへのVMイメージのインポート、VMの起動、プロセスの起動確認と進んでいきます。正常に完了すると、以下のようにPCF Devのバナーが表示されます。

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 8192 MB total system memory (1955 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はVirtualBox VMの中で動作しており、アクセスはHostOnly Network経由のみで可能です。そのため、ホストマシン以外のマシン、例えば開発者のPCなどからは、通常接続することが出来ません。そこで今回はホストマシンにHAProxyをインストールし、アクセスを中継するよう構成します。

まず、HAProxyをパッケージでインストール。

server$ sudo apt-get install haproxy

HAProxyの設定ファイル、/etc/haproxy/haproxy.cfgは以下のように設定。TCPモードでHTTP(80)、HTTPS(443)、TCP Routing(61001-61100)をそれぞれリッスンし、バックエンドのPCF Dev VMにそのまま中継する設定です。

global
  log /dev/log    local0
  log /dev/log    local1 notice
  chroot /var/lib/haproxy
  stats socket /run/haproxy/admin.sock mode 660 level admin
  stats timeout 30s
  user haproxy
  group haproxy
  daemon

defaults
  log     global
  mode    tcp
  timeout connect 5000
  timeout client  50000
  timeout server  50000

frontend http_listener
  bind *:80
  default_backend  pcfdev_vm

frontend https_listener
  bind *:443
  default_backend  pcfdev_vm

frontend tcp_listener
  bind *:61001-61100
  default_backend  pcfdev_vm

backend pcfdev_vm
  balance roundrobin
  server  pcfdev_vm 10.101.23.2

そして設定を反映させるためにHAProxyを再起動

server$ sudo service haproxy restart

ドメインの設定

続いて、ドメインの設定を行います。HAProxyによって、ホストマシンへのリクエストがバックエンドのPCF Dev VMに中継されるようになったので、ユーザーからのリクエストはホストマシンに向ければ良いです。PCF Devの起動時に、pcf dev startコマンドの-dオプションで指定したドメインおよびそのサブドメインをワイルドカードでホストマシンに向けるよう設定してください。手順は使用しているDNSサーバーによって異なるので省略します。

 

証明書のインストール

PCF Devは自己署名証明書を使用しているので、そのままだとアクセス時に警告が出ます。クライアントPCに証明書をインストールし、警告が出ないようにしましょう。以下のコマンドをサーバーで実行することで、証明書をエクスポートできます。

server$ cf dev trust -p

標準出力に出力された内容をpcfdev.crtという名前でファイルとしてクライアントPCに保存し、ダブルクリックしてください。

すると以下のようなダイアログが表示されるので、「証明書のインストール」ボタンを押下し、ウィザードに従い「信頼されたルート証明機関」の証明書ストアに証明書をインストールしてください。

image

 

以上で、PCF Devのサーバーへのインストールは完了です。

 

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

では、PCF Devをブラウザから表示してみましょう。cf dev startコマンド実行時に指定したドメインにブラウザからアクセスすると、ログインページにリダイレクトされます。ログインは、ユーザー:admin、パスワード:adminか、ユーザー:user、パスワード:passで行うことが可能です。

image

ログインすると、以下のようにダッシュ―ボードが表示されます。

image

 

クライアントPCのCloudFoundy CLIからログイン

クライアントPCのCloudFoundry CLIからのログインも試してみましょう。cf loginコマンドに、-aオプションでAPIエンドポイントのURLを指定して実行します。APIエンドポイントは、以下の例のようにPCF Devのドメインにapiというサブドメインを付与したドメインになります。

client$ cf login -a https://api.pcfdev.sharplab.org
API エンドポイント: https://api.pcfdev.sharplab.org

Email> admin

Password> 
認証中です...
OK

組織を選択します (または Enter キーを押してスキップします):
1. pcfdev-org
2. system

Org> 1
組織 pcfdev-org をターゲットにしました

スペース pcfdev-space をターゲットにしました


                      
API エンドポイント:   https://api.pcfdev.sharplab.org (API バージョン: 2.65.0)
ユーザー:             admin
組織:                 pcfdev-org
スペース:             pcfdev-space

すると、ログイン情報が対話形式で聞かれるので入力すればログイン完了です。

 

まとめ

PCF Devは開発者のローカルマシンで動作させるためのCloud Foundryのディストリビューションです。VirtualBoxのHostOnly Networkを経由してアクセスする設計となっているため、通常同一マシン内でしか利用できませんが、HAProxyにリクエストを中継させることで、別の開発マシンからもアクセス出来るサーバーとして動作させることが出来ました。これにより、CIサーバーとの連携や、チームでの環境の共有、より高性能なリソース(CPU、メモリ)の割り当てなど可能性が広がると思います。この構成例が役立てば幸いです。

前のエントリではPCF DevをWindows上にインストールする方法を紹介しました。その際、CloudFoundryのCLIツールはWindows上にインストールした訳ですが、Windowsを使っていても、実際の開発はVM上やBash on Windows上のLinuxで実施しており、アプリのデプロイはそちらから行いたい場合があるかと思います。このエントリでは、VM上のLinux(Ubuntu 16.04)からアプリをデプロイする方法を解説します。まったく難しいものではなく、単にそれぞれの環境にインストールしたCloudFoundry CLIに対してログイン先としてPCF Devを指定するだけです。

 

VM上のUbuntuへのCLIツールのインストール

下記のコマンドで、CloudFoundryのパッケージレポジトリをUbuntuに追加し、cf-cliパッケージをインストールすることが出来ます。

wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
echo "deb http://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
sudo apt-get update
sudo apt-get install cf-cli

CloudFoundry CLIからPCF Devへのログイン

インストールしたCloudFoundry CLIに対して、下記コマンドを実行することで、PCF Devへログインすることが出来ます。-aオプションはAPIエンドポイント、-uと-pオプションはそれぞれユーザー名とパスワードを指定します。–skip-ssl-validationは証明書の検証をスキップするオプションで、PCF Devの自己署名証明書がUbuntu側にはインストール出来ていないので指定しています。

ynojima@X1CARBON:~/workspace/jetbrains$ cf login -a api.local.pcfdev.io -u user -p pass --skip-ssl-validation
API エンドポイント: api.local.pcfdev.io
認証中です...
OK

組織 pcfdev-org をターゲットにしました

スペース pcfdev-space をターゲットにしました



API エンドポイント:   https://api.local.pcfdev.io (API バージョン: 2.65.0)
ユーザー:             user
組織:                 pcfdev-org
スペース:             pcfdev-space

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

PCF Devへのアプリのデプロイは、Windows上のcf pushコマンドで実行した場合と全く変わりません。

ynojima@X1CARBON:~/workspace/jetbrains/spring-boot/spring-boot-samples/spring-boot-sample-web-ui$ cf push spring-boot-sample-ui-from-vm -p target/spring-boot-sample-web-ui-2.0.0.BUILD-SNAPSHOT.jar
user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ spring-boot-sample-ui-from-vm を更新しています...
OK

spring-boot-sample-ui-from-vm をアップロードしています...
次のパスからアプリ・ファイルをアップロードしています: /tmp/unzipped-app437930987
337.9K、107 個のファイルをアップロードしています
Done uploading
OK


user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ spring-boot-sample-ui-from-vm を開始しています...
Downloading dotnet-core_buildpack...
Downloading java_buildpack...
Downloading ruby_buildpack...
Downloading nodejs_buildpack...
Downloading go_buildpack...
Downloaded go_buildpack
ynojima@X1CARBON:~/workspace/jetbrains/spring-boot/spring-boot-samples/spring-boot-sample-web-ui$ cf push spring-boot-sample-web-ui-from-vm -p target/spring-boot-sample-web-ui-2.0.0.BUILD-SNAPSHOT.jar
user としてアプリ spring-boot-sample-web-ui-from-vm を組織 pcfdev-org / スペース pcfdev-space 内に作成しています...
OK

経路 spring-boot-sample-web-ui-from-vm.local.pcfdev.io を作成しています...
OK

spring-boot-sample-web-ui-from-vm.local.pcfdev.io を spring-boot-sample-web-ui-from-vm にバインドしています...
OK

spring-boot-sample-web-ui-from-vm をアップロードしています...
次のパスからアプリ・ファイルをアップロードしています: /tmp/unzipped-app191471913
337.9K、107 個のファイルをアップロードしています
Done uploading
OK


user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ spring-boot-sample-web-ui-from-vm を開始しています...
Downloading dotnet-core_buildpack...
Downloading java_buildpack...
Downloading ruby_buildpack...
Downloading nodejs_buildpack...
Downloading go_buildpack...
Downloaded java_buildpack
Downloading python_buildpack...
Downloaded ruby_buildpack
Downloading php_buildpack...
Downloaded nodejs_buildpack
Downloading staticfile_buildpack...
Downloaded php_buildpack
Downloading binary_buildpack...
Downloaded go_buildpack
Downloaded python_buildpack
Downloaded binary_buildpack
Downloaded staticfile_buildpack
Downloaded dotnet-core_buildpack
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 -XX:MaxMetaspaceSize=104857K -Xss349K -Xms681574K -XX:MetaspaceSize=104857K
-----> 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

1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 1 個のインスタンスが実行中です

アプリが開始されました


OK

アプリ spring-boot-sample-web-ui-from-vm はコマンド `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` を使用して開始されました

user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ spring-boot-sample-web-ui-from-vm の正常性と状況を表示しています...
OK

要求された状態: started
インスタンス: 1/1
使用: 256M x 1 インスタンス
URL: spring-boot-sample-web-ui-from-vm.local.pcfdev.io
最終アップロード日時: Sat Jan 21 18:40:16 UTC 2017
スタック: cflinuxfs2
ビルドパック: 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

     状態   開始日時                 CPU    メモリー            ディスク             詳細
#0   実行   2017-01-22 03:40:56 AM   0.0%   256M の中の 66.4M   512M の中の 142.5M

おわりに

以上、VM上のUbuntuにインストールしたCloudFoundry CLIからPCF Devにアプリをプッシュする方法の紹介でした。PCF Dev自体の操作はCloudFoundry CLIのPCF Dev Pluginが必要なのでWindows側のcf devコマンドから実施する必要がありますが、それ以外のアプリのデプロイなどの操作は可能なので、Windows上にVMを立てて開発している場合は是非活用いただければと思います。

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を利用するのは決裁が面倒で、という人は是非試してみてはと思います。

DSC08514

これまでThinkPad X201sを使っていたのですが、X1 Carbonに買い換えました。X201sとの付き合いは長く、大学に通っていた頃からなのですが、以来アメリカに持って行ったり、イギリスに持って行ったり、SSD、メモリを換装したり、果てはスプライトをぶちまけてキーボードを交換したりと、、思い出深いマシンです。自転車の前かごに突っ込んで通学するとか、かなり雑に扱っていたのですが、ちょくちょくメンテしてやることで今日まで快調そのもので、気が付けば約7年、買い替えることなく来れたのですが、流石にそろそろ良い歳だよねということで、X1 Carbon 4thモデルを導入しました。

で、X1 Carbon。7年間の技術進歩は凄いですね。とにかく薄い。デスクトップPCに繋いでいる旧タイプのThinkPad USBキーボードと大して厚みが変わらない。それでいて華奢な感じがせず、しっかり剛性を保っているので、安心して?自転車の前かごに突っ込めます(笑)。

マシンスペックですが、思い切って奮発して16GBメモリのモデルにしてみました。8GBでも良い気がしたのですが、Javaまわりのツールはメモリ食いが多いですし(最低8GB、推奨16GBのPCF Devとか)、Ultrabookはメモリの換装が利かないので16GB。まだ届きたてでセットアップの最中なので、使い込むのはこれからですが、X201sのように良い付き合いが出来るといいなぁと思います。

 

最後に自分の部屋のデスク周り晒し。……気が付けば完全にPCにデスクを占拠されてしまいました。

DSC08510

JAN
1

明けましておめでとうございます

Published:2017-01-01 10:15:15 UTC

明けましておめでとうございます。本年もよろしくお願いいたします。

一昨年の12月よりSI会社に異動し、最近はSpringに関する社内向けのプロジェクト支援業務に従事する部署で、
札幌や金沢、幕張の拠点を行き来する生活です。

とはいえ前職はサービスプロバイダで、とあるサービスをRubyで保守・開発していた身なので、
ガチガチのJava/Springを用いたウォーターフォール開発のプロジェクト支援がいきなり出来る筈もなく、、
昨年は泥縄式にウォーターフォールによるプロジェクト管理とSpringを学ぶ一年となり、学ぶところの多い一方で、
外向けのアウトプットの少ない、苦しい一年でした。

ただ、その甲斐あって、最近はようやく理解が追いつきつつあると感じているところです。
本年は経験を血肉とし、実際に役立てていける、そんな年にしていきたいと思います。

どうぞよろしくお願いいたします。

https://jira.sonarsource.com/jira/secure/ReleaseNote.jspa?projectId=10935&version=12999

新しく追加された機能として、xunit.netのサポートがあり、xunit.netの実行結果レポートXMLを解釈して取り込むことが出来るようになっています。

但し、テスト用のユーティリティクラスを詰め込んだ、テストケースが一つも含まれていないテストアセンブリがあると、レポートXMLの解釈に失敗して以下のようなエラーを吐くようです。とりあえずダミーのテストケースを追加しておくと回避できます。

ERROR: Error during Sonar runner execution
org.sonar.runner.impl.RunnerException: Unable to execute Sonar
	at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91)
	at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
	at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
	at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102)
	at org.sonar.runner.api.Runner.execute(Runner.java:100)
	at org.sonar.runner.Main.executeTask(Main.java:70)
	at org.sonar.runner.Main.execute(Main.java:59)
	at org.sonar.runner.Main.main(Main.java:53)
Caused by: org.sonar.plugins.dotnet.tests.ParseErrorException: Missing attribute "total" in element <assembly> in
APR
17

今回は、pipでsphinxをインストールするが、システムワイドではインストールせず、venvでプロジェクトローカルにインストールするものとする。

 

まずはvenvのアップデート。Ubuntu14.04のインストール直後のpython3.4-venvはバグがあるので、アップデートが必要。

sudo apt-get install python3.4-venv

pyvenv-3.4コマンドでvenvを作成

pyvenv-3.4 venv

venvに入る

source venv/bin/activate

sphinxのインストール

(venv)   $ pip install sphinx sphinx_rtd_theme

sphinxの初期設定

(venv)   $ sphinx-quickstart # ダイアログにそって良しなに

(venv)   $ sed -ie "s/html_theme = 'default'/html_theme = 'sphinx_rtd_theme'/g" conf.py # テーマの変更

HTMLのビルド

(venv)   $ make html

出来上がり。

image

JUL
25

“The Martian”観たい

Published:2015-07-25 01:31:22 UTC

“The Martian”が面白そう。原作は同名小説(邦題は「火星の人」)で、事故で火星に取り残された宇宙飛行士が、火星でサバイバルしながら何とか地球とコンタクトを取り、救出を待つ、というもの。主演がマット・デイモンで他の星に取り残された宇宙飛行士という設定は「インターステラー」を思い起こしてしまうが、さてはて。