2015-06-26

SQL Buddy を Cloud Foundry で動かす

本日の第17回「Cloud Foundry 百日行」は、 SQL Buddy です。
このアプリケーションはMySQLの操作をブラウザ上で実行するPHPアプリです。
これまで紹介したアプリにおいてもcf-mysql-releaseのMySQLを度々利用しましたが、MySQLにテーブルの作成や初期データの入力などが必要になった際にデータベースの中身が見れないのはちょっと不便です。そんな時にこのアプリを利用すればデータベースの中身を見ながら作業が進められます。

基本情報

デプロイ

手順
  • 0) 準備
  • 1) アプリの起動
  • 2) 動作確認

0.準備

まずはソースコードの取得からですが、バージョンを指定してダウンロードは出来なさそうなので公開されているものをダウンロードします。
この時のバージョンは1.3.3(Jan 18, 2011)です。
$ wget https://github.com/calvinlough/sqlbuddy/raw/gh-pages/sqlbuddy.zip
$ unzip sqlbuddy.zip
$ cd sqlbuddy
sqlbuddy$ ls
ajaxcreatetable.php  ajaxsavecolumnedit.php  config.php      edit.php    functions.php  includes    LICENSE   query.php  themes
ajaxfulltext.php     ajaxsaveedit.php      css      edituser.php  home.php   index.php   locale   README  users.php
ajaximportfile.php   ajaxsaveuseredit.php    dboverview.php  export.php    images   insert.php  login.php   serve.php
ajaxquery.php      browse.php       editcolumn.php  exports    import.php   js       logout.php  structure.php

1.アプリの起動

cf push を実行する前に 百日行記事 第10回 にあったように php-buildpack のオプション設定用ディレクトリと設定ファイルを作成しMySQLモジュールを読み込めるようにします。
sqlbuddy$ mkdir .bp-config/
sqlbuddy$ vi .bp-config/options.json
{
    "PHP_EXTENSIONS": ["mysql"]
}
これで準備完了。
アプリを --no-start オプションを付けて cf push し、これまで同様に cf-mysql-release で作成したMySQLのデータベース接続情報が cf env で確認できるところまで実行します。
sqlbuddy$ cf push sqlbuddy -b https://github.com/cloudfoundry/php-buildpack.git --no-start
sqlbuddy$ cf create-service p-mysql 100mb-dev app1-db
sqlbuddy$ cf bind-service sqlbuddy app1-db
sqlbuddy$ cf env sqlbuddy
Getting env variables for app sqlbuddy in org k-nagai / space work as k-nagai...
OK

System-Provided:
{
 "VCAP_SERVICES": {
  "p-mysql": [
   {
    "credentials": {
     "hostname": "10.244.1.18",
     "jdbcUrl": "jdbc:mysql://10.244.1.18:3306/cf_e5edadbd_37d9_4427_8b43_242df820e262?user=4LqkSI6cUfnzRjvf\u0026password=1PuiNgg1J02ITGhP",
     "name": "cf_e5edadbd_37d9_4427_8b43_242df820e262",
     "password": "1PuiNgg1J02ITGhP",
     "port": 3306,
     "uri": "mysql://4LqkSI6cUfnzRjvf:1PuiNgg1J02ITGhP@10.244.1.18:3306/cf_e5edadbd_37d9_4427_8b43_242df820e262?reconnect=true",
     "username": "4LqkSI6cUfnzRjvf"
    },
    "label": "p-mysql",
    "name": "app1-db",
    "plan": "100mb-dev",
    "tags": [
     "mysql"
    ]
   }
  ]
 }
}

次にアプリを起動します。
sqlbuddy$ cf start sqlbuddy
:
OK

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: sqlbuddy.10.244.0.34.xip.io
last uploaded: Tue Jun 23 07:38:27 +0000 2015
stack: lucid64

     state     since                    cpu    memory          disk      details   
#0   running   2015-06-23 04:39:15 PM   0.0%   23.2M of 256M   0 of 1G      
デプロイ完了です。

2.動作確認

ではブラウザでアクセスしましょう。
ログイン画面が表示されるので cf env で得た接続情報を入力します。
今回の場合は上から”hostname”,”username”,”password”の順で入力。

ログインしたらこんな感じに表示されるので好みの Language を選んで利用して下さい。

データベースの操作は左のツリーの DATABASES よりデータベース名を選択します。

後は最上部のメニューにてQueryでSQLコマンドの入力かImportでSQLファイルの読み込み、またはGUIでテーブル作成などを行っていきます。
なおcf-mysql-releaseで提供されるMySQLではすべての操作が出来るわけではないのでテーブル作成やデータの挿入、データの確認程度で利用して下さい。

おまけ

今回の SQL Buddy はCloud Foundryで利用する場合、単体で使用するというよりは他のアプリでcf-mysql-releaseのMySQLを使う時に初期設定や確認で利用するケースが想定されます。
その為、今回行った手順のように SQL Buddy 用のMySQLを作成するケースは少なく、他のアプリ用に作成したMySQLにバインドしてログインするといった手順になります。
また極端に言えば、SQL Buddy とMySQLをバインドして接続情報を得なくても、他のアプリとMySQLの接続情報を利用すればログイン可能です。
しかし、データベースとの接続情報をブラウザでやり取りするのは”いかがなものか”といった場合はこんな方法があります。
まずlogin.phpを下記のように編集します。
sqlbuddy$ cp login.php login.php.org
sqlbuddy$ vi login.php
sqlbuddy$ diff login.php.org login.php
18a19
> /*
22c23,29
< 
---
> */
> $services = getenv("VCAP_SERVICES");
> $services_json = json_decode($services,true);
> $mysql_config = $services_json["p-mysql"][0]["credentials"];
> $host = $mysql_config["hostname"];
> $user = $mysql_config["username"];
> $pass = $mysql_config["password"];
編集内容は元々の”ログイン情報”が記載してある箇所をコメントアウトし、VCAP_SERVICESで取得した情報を設定するように変更しています。
編集した SQL Buddy を先に紹介した手順で cf push してアクセスしたいMySQLのServiceにバインドしてから cf start します。
こうするとブラウザにアクセスした段階で既に該当のデータベースにログインした状態になります。
MySQLの作業が必要なくなればバインドを解除することでアクセスが出来なくなります。
また他のMySQLのServiceのデータベースの作業がしたくなった場合は、そのMySQLのServiceにバインドして cf restage するだけで利用可能です。

今回使用したソフトウェア