「Cloud Foundry 百日行」第46日目,今日のアプリは,昨日に引き続きデータベース管理ツール,と来れば当然 phpPgAdmin です。ただし実際に使うのは Cloud Foundry 用にカスタマイズされた phppgadmin-cf です。
基本情報
以下,基本的に README の記述に沿って手順を進めていきます。
- 1) ソースコードの取得
- 2) アプリのプッシュ
- 3) サービスの作成とアプリとのバインド
- 4) アプリの更新
- 5) 動作確認
1. ソースコードの取得
README には zip ファイルを落としてきて展開するようにと書いてある(し, 前日の phpMyAdmin の記事 では実際そうしている)のですが,後述するオリジナルとの差分を見てみたかったこともあり,いつも通り GitHub からソースコードをクローンすることにしました。
$ git clone https://github.com/cloudfoundry-community/phppgadmin-cf.git
なお,念のためzipを展開したものと比較してみましたが, git clone
した側のみに,
- tests がある
- git 関連ファイルがある(ある意味当然ですね)
以外の差分はありませんでした。
$ diff -r phppgadmin-cf/ phppgadmin-cf-cf-ready/
Only in phppgadmin-cf: .git
Only in phppgadmin-cf: .gitattributes
Only in phppgadmin-cf: .gitignore
Only in phppgadmin-cf: tests
Only in phppgadmin-cf/vendor/arhframe/util: .gitignore
Only in phppgadmin-cf/vendor/cloudfoundry-community/cf-helper-php: .gitignore
Only in phppgadmin-cf/vendor/myclabs/php-enum: .gitattributes
Only in phppgadmin-cf/vendor/myclabs/php-enum: .gitignore
Only in phppgadmin-cf/vendor/ocramius/proxy-manager: .gitignore
Only in phppgadmin-cf/vendor/psr/log: .gitignore
Only in phppgadmin-cf/vendor/romaricdrigon/metayaml: .gitignore
Only in phppgadmin-cf/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher: .gitignore
Only in phppgadmin-cf/vendor/symfony/expression-language/Symfony/Component/ExpressionLanguage: .gitignore
Only in phppgadmin-cf/vendor/symfony/yaml/Symfony/Component/Yaml: .gitignore
したがって,配布されている zip ファイルは最新の git リポジトリーから tests と git 関連ファイルを取り除いて zip で固めたもののようです。
2. アプリのプッシュ
クローンしたリポジトリーのディレクトリーに入って cf push
します。
$ cd phppgadmin-cf
いよいよプッシュ,ですがその前に。
実は今回, pphppgadmin-cf.10.244.0.34.xip.io
の URL が別のユーザーに取られていたので,URL をランダムに設定してくれるオプションを manifest.yml に追加しました。
$ emacs manifest.yml
..
$ git diff
diff --git a/manifest.yml b/manifest.yml
index 47a698f..1695179 100644
--- a/manifest.yml
+++ b/manifest.yml
@@ -4,3 +4,4 @@ applications:
- name: phppgadmin-cfready
memory: 1G
instances: 1
+ random-route: true
プッシュします。manifest.yml があるので,引数は不要です。
$ cf push
..
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: phppgadmin-cfready-nondebating-creatine.10.244.0.34.xip.io
last uploaded: Tue Aug 4 01:25:30 UTC 2015
stack: cflinuxfs2
buildpack: Found
state since cpu memory disk details
#0 running 2015-08-04 10:25:54 AM 1.7% 44M of 1G 0 of 1G
起動しました。 urls
のところを見ると,アプリ名の後に何か不思議な英単語が2つ付いたホスト名になっています。これが random-route
の効果です。
3. サービスの作成とアプリとのバインド
次に,管理対象となる PostgreSQL サービスをこのアプリにバインドします。 README には,「管理したいサービスをいくつでも」と書いてありますが,今回は検証なので1つだけです。
PostgreSQL サービスを作成して,
$ cf create-service PostgreSQL "Basic PostgreSQL Plan" pg4phppgadmin-cfready
Creating service instance pg4phppgadmin-cfready in org nota-ja / space 100 as nota-ja...
OK
Attention: The plan `Basic PostgreSQL Plan` of service `PostgreSQL` is not free. The instance `pg4phppgadmin-cfready` will incur a cost. Contact your administrator if you think this is in error.
バインドします。
$ cf bind-service phppgadmin-cfready pg4phppgadmin-cfready
Binding service pg4phppgadmin-cfready to app phppgadmin-cfready in org nota-ja / space 100 as nota-ja...
OK
TIP: Use 'cf restage phppgadmin-cfready' to ensure your env variable changes take effect
4. アプリの更新
先ほど表示された TIP
にしたがって, cf restage
します。
$ cf restage phppgadmin-cfready
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: phppgadmin-cfready-nondebating-creatine.10.244.0.34.xip.io
last uploaded: Tue Aug 4 01:25:30 UTC 2015
stack: cflinuxfs2
buildpack: Found
state since cpu memory disk details
#0 running 2015-08-04 10:35:50 AM 1.6% 36.8M of 1G 0 of 1G
問題なく起動しました。
5. 動作確認
ブラウザーでアクセスしてみます。
左上の【pg4phppgadmin-cfready】をクリックすると,ログイン画面が表示されるので,ログインします。
Username / Password は, cf env
で環境変数を表示させ, VCAP_SERVICES
の "uri"
から抜き出します。
$ cf env phppgadmin-cfready
..
"VCAP_SERVICES": {
"PostgreSQL": [
{
"credentials": {
"uri": "postgres://7ebfd63f-9f1f-4ca3-975e-94bd58db9637:i64nacfq314pt0cuvgqicktcp4@192.168.15.91:5432/7ebfd63f-9f1f-4ca3-975e-94bd58db9637"
},
..
"uri"
は 2日目の cf100apps-002-postgresql-cf-service-broker の記事 で述べた DATABASE_URL 形式
<scheme>://<username>:<password>@<host>:<port>/<database>
になっているので,この例では Username = 7ebfd63f-9f1f-4ca3-975e-94bd58db9637
/ Password = i64nacfq314pt0cuvgqicktcp4
になります。
【Login】をクリックしてログインすると,次のような画面が見えます:
アクセス権があるのは Username と同じ名前のデータベース 7ebfd63f-9f1f-4ca3-975e-94bd58db9637 だけなので,それをクリックして詳細を表示してみます:
【Create schema】をクリックして, demo
という名前のスキーマを作ってみます:
【Create】をクリックすると, スキーマが作成されました:
スキーマ demo
内にテーブル hundred-day-challenge
を作ってみます:
次いで各カラムの情報を入力して,【Create】をクリックします:
テーブル hundred-day-challenge
が作成されました:
テーブル名をクリックして詳細を表示させると,各カラムの情報を見ることができます:
動作確認としてはここまでです。使い方の詳細は, phpPgAdmin の本家公式サイト 等をご覧ください。
おまけ: オリジナル と CF版 の差分
今回使用した Cloud Foundry 対応版 phpPgAdmin と,それが ベースにしているオリジナル版 との差分は,以下の2コミットのみです。
前者は,更新の行数は多いのですが,基本的に追加ライブラリーの実体を vendor/ 下に vendoring するコミットで,更新の内容よりもどういうライブラリーが vendoring されたかだけが重要そうです。
後者は追加的な設定を書き込むファイル conf/config.inc.php をコミットするもので,ここで \CfCommunity\CfHelper\CfHelper
というライブラリーを読み込んでいるのが大きなポイントのようです。特に,このファイルの前半部は環境変数 VCAP_SERVICES
からデータベース接続情報を取り出してアプリのデータベース接続設定に書き込むコードになっているので,データベースを使うような他の PHP アプリを Cloud Foundry 対応にするときも参考になるかもしれません。
今回使用したソフトウェア
- 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) - phppgadmin-cf
https://github.com/cloudfoundry-community/phppgadmin-cf/tree/6d383a064c5d8c8ba5fe342d95c90fcbbd02fcdf