2015-08-06

phpMyAdminをCloud Foundryで動かして、お手軽DBメンテナンス!


みなさんこんにちは。 日本Cloud Foundryグループのセカンドトップ、jacopenです。ちなみにセンターフォワードがhiroakiukajiでトップ下がozz会長、サイドバックがnota-jaです。

日本CFグループのフォーメーションはこの辺にしといて、今日はCloud Foundry百日行の45日目。紹介するのは、みんな大好きphpMyAdminです。

Cloud Foundryと相性がいいphpMyAdmin

Cloud Foundryをベースにしたサービスの多くは、ビルトインサービスという形で無償のMySQLを提供しています。このビルトインサービスを使って開発を進めていきたい人も多いでしょう。ですが、多くの人が最初に直面する大きな問題があります。

それは何かというと、外部から直接MySQLインタンスに接続することができないということ。つまり、手元のmysqlコマンドやMySQL Administratorを使ってインスタンスの操作ができないということです。

これは結構困りますね。Railsのように事前に定義しておいてdb migrateするだけで良いみたいな仕組みを作っていれば別として、自分でテーブルやカラムを作成しながら開発を進めていくといったやり方が出来なくなってしまいます。

じゃあどうすれば?というときに役に立つのが、phpMyAdminなわけです。

構成

phpMyAdminは有名なのでご存じの方が多いと思いますが、ブラウザから利用できるMySQLのクライアントツールです。その名の通り、PHPで書かれています。

今回はこのような構成を想定してCloud Foundryにデプロイしてみます。ひとつのService instanceに対して、開発中アプリケーションとphpMyAdmin両方からbindすることで、開発中アプリケーションに影響を及ぼすことなくMySQLのメンテナンスを行うことが出来ます。



phpMyAdminをデプロイする前に、以下のようにmysql serviceを作成しておきました。
$ cf create-service mysql default php-mysql-dev
OK

デプロイ

デプロイするphpMyAdminは、Cloud Foundry向けにカスタマイズされたバージョンを利用します。
https://github.com/cloudfoundry-community/phpmyadmin-cf

上記リポジトリから、zip版のアーカイブがダウンロードできるので手元で展開します。

$ wget https://github.com/cloudfoundry-community/phpmyadmin-cf/archive/cf-ready.zip
$ unzip cf-ready.zip
$ cd phpmyadmin-cf-cf-ready/

そして、おもむろにpushします。(※実験に使っているCloud(n) PaaSだとbuildpackが古かったため、-bでPHP buildpackを別途指定しています)

$ cf push -b https://github.com/cloudfoundry/php-buildpack.git#v3.2.2
Using manifest file /Users/jacopen/Downloads/phpmyadmin-cf-cf-ready/manifest.yml

Updating app phpmyadmin-cfready in org xxxxx / space default as xxxxxxxxxxxx...
OK
(中略)
     state     since                    cpu    memory      disk           details
#0   running   2015-08-02 05:12:42 PM   0.0%   16M of 1G   102.1M of 2G

push後、serviceにbindしてrestageします
$ cf bind-service phpmyadmin-cfready php-mysql-dev
Binding service php-mysql-dev to app phpmyadmin-cfready in org xxxxxxxxxx / space default as xxxxxxxxxxx...
OK
TIP: Use 'cf restage phpmyadmin-cfready' to ensure your env variable changes take effect
$ cf restage phpmyadmin-cfready
Restaging app phpmyadmin-cfready in org xxxxxxxxxx / space default as xxxxxxxxxxxxxxxx..

標準では以下のようなmanifest.ymlになっています。アプリ名を変更したい場合やメモリサイズを変えたい場合は、このmanifest.ymlを編集すると良いでしょう。
---
#Generated manifest
applications:
- name: phpmyadmin-cfready
  memory: 1G
  instances: 1

動いたようです。

大抵のサービスでは、builtin serviceのユーザー名、パスワードをコントロールパネルから取得できます。取得したら、phpmyadminに入力してログインしてみましょう。

無事、ログイン出来たようです。
これでbuiltin serviceのmysqlも自由自在に操作できますね。

認証があるとはいえ、phpmyadminを立ち上げたままにするのはセキュリティ的によろしくないため、利用が終わったらアプリを削除するか、停止しておくと良いでしょう。このあたりの公開・非公開が簡単にできるのも、PaaSの強みですね。

今回使用した環境