PCF Dev (Pivotal Cloud Foundry) をmacにインストールしてみた

## 概要
Cloud Foundryは、オープンソースのPaaSプラットフォームで、ローカルにPaaS環境を構築することもできます。
今回はPCF Devを使って、macOS上にPaaS環境を構築してみます。

基本的に、こちらの[Tutorial](https://pivotal.io/jp/platform/pcf-tutorials/getting-started-with-pivotal-cloud-foundry-dev/introduction)に沿って実行しました。（一部違いますが）

## 要件
- VirtualBox 5.0 以上

## 環境
- macOS Sierra version 10.12.5
- pcfdev-v0.26.0+PCF1.10.0
- cf version 6.29.0+ff886fa93.2017-07-24


## cliのインストール
PCFを実行するためのcliをインストールします。

以下からmac用のものをダウンロードして、GUIでインストールをしてください。
https://cli.run.pivotal.io/stable?release=macosx64&source=github

- (追記)以下はインストーラー付き
    - 以下から環境にあったものをインストール
    - https://github.com/cloudfoundry/cli/releases/tag/v6.34.1


## PCF Devのインストール
(追記)インストーラーで入れた場合は、こちらの手順は不要

ここからPCF Devをダウンロードします。
ダウンロードするには、無料会員登録が必要になるので、メールアドレスを登録してください。
https://network.pivotal.io/products/pcfdev

osxと書かれているものを選んでダウンロードします。

<img width="541" alt="de21e54f784add52cc0ab8ddea6de4be.png" src="https://qiita-image-store.s3.amazonaws.com/0/105936/2e5c6360-8024-f197-3e88-81d214cf7d09.png">

ダウンロードしたら解凍します。

```
$ unzip pcfdev-v0.26.0+PCF1.10.0-osx.zip
```

PCF Devのpluginをインストールします。

```
$ ./pcfdev-v0.26.0+PCF1.10.0-osx
```

## 起動
PCF Devを起動します。
Pivotal Networkに登録したメールアドレスとパスワードを聞かれるので、入力してください。

```
$ cf dev start
Please sign in with your Pivotal Network account.
Need an account? Join Pivotal Network: https://network.pivotal.io

Email> mailaddres@sample.com

Password>
Downloading VM...
Progress: |====================>| 100%
VM downloaded.
Allocating 4096 MB out of 16384 MB total system memory (6869 MB free).
Importing VM...
Starting VM...
Provisioning VM...
Waiting for services to start...
7 out of 56 running
7 out of 56 running
7 out of 56 running
7 out of 56 running
38 out of 56 running
56 out of 56 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にログインします。
接続先、アカウント情報は、 `cf dev start` を実行した時の出力結果の通りです。

```
Apps Manager URL: https://local.pcfdev.io
Admin user => Email: admin / Password: admin
Regular user => Email: user / Password: pass
```

ログインします。
今回はuserでログインします。（adminでも構いません）

```
$  cf login -a api.local.pcfdev.io --skip-ssl-validation
API endpoint: api.local.pcfdev.io

Email> user

Password>
Authenticating...
OK

Targeted org pcfdev-org

Targeted space pcfdev-space



API endpoint:   https://api.local.pcfdev.io (API version: 2.75.0)
User:           user
Org:            pcfdev-org
Space:          pcfdev-space
```

## サンプルアプリケーションの作成
デプロイするための、PHPのサンプルアプリケーションを作成します。

```
$ mkdir sample-php
$ vi index.php
```

```php:index.php
<?php

echo 'This is a sample.';
```

## デプロイ
アプリケーションをデプロイをします。

```
$ cf push php-sample-app -p sample-php/
Creating app php-sample-app in org pcfdev-org / space pcfdev-space as user...
OK

(**snip**)

-------> Buildpack version 4.3.26
Installing HTTPD
HTTPD 2.4.25
Downloaded [file:///tmp/buildpacks/4cc31f829ff946712e63e84276d50969/dependencies/https___buildpacks.cloudfoundry.org_dependencies_httpd_httpd-2.4.25-linux-x64.tgz] to [/tmp]
Installing PHP
PHP 5.5.38
Downloaded [file:///tmp/buildpacks/4cc31f829ff946712e63e84276d50969/dependencies/https___buildpacks.cloudfoundry.org_dependencies_php_php-5.5.38-linux-x64-1485208781.tgz] to [/tmp]
Finished: [2017-08-01 00:09:04.698339]

(**snip**)

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: php-sample-app.local.pcfdev.io
last uploaded: Tue Aug 1 03:15:35 UTC 2017
stack: cflinuxfs2
buildpack: php 4.3.26

     state     since                    cpu    memory         disk           details
#0   running   2017-08-01 12:16:07 PM   0.0%   240K of 256M   448K of 512M
```

途中、HTTPDとPHPがインストールされているのがわかります。
http://php-sample-app.local.pcfdev.io へブラウザからアクセスして、
`This is a sample.` と表示されればデプロイ成功です。


## アプリケーション一覧
作成済みのアプリケーション一覧が確認できます。

```
$ cf apps
Getting apps in org pcfdev-org / space pcfdev-space as user...
OK

name             requested state   instances   memory   disk   urls
php-sample-app   started           1/1         256M     512M   php-sample-app.local.pcfdev.io
```

app単体で見る

```
$ cf app php-sample-app
```

## ログ出力
リアルタイムでログを確認する場合

```
$ cf logs php-sample-app
```

直近のログを確認する場合

```
$ cf logs php-sample-app --recent
Retrieving logs for app php-sample-app in org pcfdev-org / space pcfdev-space as user...

   2017-08-01T09:08:54.49+0900 [API/0] OUT Created app with guid 998003b3-3ba5-4a85-b36b-70e24fee0317
   2017-08-01T09:08:54.87+0900 [API/0] OUT Updated app with guid 998003b3-3ba5-4a85-b36b-70e24fee0317 ({"route"=>"00483624-4291-42fd-9252-d936b4ed16ca", :verb=>"add", :relation=>"routes", :related_guid=>"00483624-4291-42fd-9252-d936b4ed16ca"})
```

## DBと接続する
PCFでは、MySQL, Postgres, Redis, and MongoDBを使うことができます。

```
$ cf marketplace
Getting services from marketplace in org pcfdev-org / space pcfdev-space as user...
OK

service        plans             description
local-volume   free-local-disk   Local service docs: https://github.com/cloudfoundry-incubator/local-volume-release/
p-mysql        512mb, 1gb        MySQL databases on demand
p-rabbitmq     standard          RabbitMQ is a robust and scalable high-performance multi-protocol messaging broker.
p-redis        shared-vm         Redis service to provide a key-value store

TIP:  Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.
```

mysqlで使用可能なplanを調べます。

```
$ cf marketplace -s p-mysql
Getting service plan information for service p-mysql as user...
OK

service plan   description            free or paid
512mb          PCF Dev MySQL Server   free
1gb            PCF Dev MySQL Server   free
```

512mbと1gbの2つのプランがあるようです。
今回は512mbのプランを使って、sample-php-dbという名前のserviceを作成します。

```
$ cf create-service p-mysql 512mb sample-php-db
```

作成されたserviceを確認します。

```
$ cf services
Getting services in org pcfdev-org / space pcfdev-space as user...
OK

name            service   plan    bound apps   last operation
sample-php-db   p-mysql   512mb                create succeeded
```

この時点では、bound appsは空欄になっています。
sample-php-dbをphp-sample-appで使えるように、bindします。

```
$ cf bind-service php-sample-app sample-php-db
Binding service sample-php-db to app php-sample-app in org pcfdev-org / space pcfdev-space as user...
OK
TIP: Use 'cf restage php-sample-app' to ensure your env variable changes take effect
```

php-sample-appをrestartしろと言っているので、アプリケーションを再起動します。

```
$ cf restart php-sample-app
```

bound appsにphp-sample-appがあることを確認します。

```
$ cf services
Getting services in org pcfdev-org / space pcfdev-space as user...
OK

name            service   plan    bound apps   last operation
sample-php-db   p-mysql   512mb   php-sample-app      create succeeded
```

## スケーリング
インスタンスを1つから2つに増やします。

```
$ cf scale php-sample-app -i 2
```

増えたことを確認

```
$ cf app php-sample-app
Showing health and status for app php-sample-app in org pcfdev-org / space pcfdev-space as user...

name:              php-sample-app
requested state:   started
instances:         2/2
usage:             256M x 2 instances
routes:            php-sample-app.local.pcfdev.io
last uploaded:     Tue 01 Aug 09:08:54 JST 2017
stack:             cflinuxfs2
buildpack:         php 4.3.26

     state     since                  cpu    memory          disk             details
#0   running   2017-08-01T00:37:39Z   1.5%   25.3M of 256M   155.9M of 512M
#1   running   2017-08-01T00:45:28Z   0.0%   25.7M of 256M   155.9M of 512M
```

memory limitを、それぞれ1Gに増やします。

```
$ cf scale php-sample-app -i 2
```

ディスク容量をそれぞれ増やします。

```
$ cf scale php-sample-app -i 2
```

manifest.ymlを使った方法なども、後日追記したいと思います。
以上

## 参考
- [Tutorial](https://pivotal.io/jp/platform/pcf-tutorials/getting-started-with-pivotal-cloud-foundry-dev/introduction)
- [pcfの環境構築](http://qiita.com/yuichi10/items/228f90b6750a715de605)
- [PaaS の Cloud Foundry(PCF-DEV) を OSX 上に構築する](http://qiita.com/tbuchi888/items/77a171f73a115cb1464c)
- [Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから](https://www.slideshare.net/techblogyahoo/yahoo-japan10paas)