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、メモリ)の割り当てなど可能性が広がると思います。この構成例が役立てば幸いです。