まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:paas

IBM Bluemix 上のアプリケーションが期待通りに動かない時のトラブルシュートは、まずアプリケーションサーバーのログを参照することです。その手順を紹介します:


まず IBM Bluemix にログインし、ダッシュボード画面を開きます。そしてログを見たいアプリケーションサーバーを選択します:
2014062201


アプリケーションサーバーが選択された画面が表示されたら、左ペインの "Files and logs" をクリックします:
2014062202

 
すると画面の右ペインにアプリケーションサーバー内の設定ファイルやログファイルのツリーが表示されます。なおログファイルは logs フォルダ内にあります:
2014062203


あとはここから見たいログをクリックして指定するだけです。この例だと stderr.log(標準エラー)を指定して参照しています。JDBC エラーが出ていることがわかると思います:
2014062204

 
IBM Bluemix のような PaaS 環境は IaaS と違ってサーバーへのアクセスが制限されていることが多いので、トラブルシューティングの方法を知っておくことは重要ですね。

 

Stackato を使ってプライベート環境に構築した Cloud Foundry 環境に、App Store というアプリケーション一覧からアプリケーションをデプロイしてみます。Stackato 環境構築の手順はこちらを参照してください:
Stackato を導入してプライベートな Cloud Foundry 環境を(KVM に)構築する
 ↑これの続きです


Stackato 管理コンソールにログインして、最初のページを下にスクロールすると "Deploy from the App Store" と書かれたリンクがあります。ここをクリックします:
2014051501


"App Store" という、Stackato 対応アプリケーション(正確にはサーバー&アプリケーション)の一覧が表示されます。CMS の Joomla やアプリケーション開発フレームワークの cakePHP など、メジャーどころが結構対応しています。これらは全て以下に紹介する簡単な手順で Stackato にデプロイできるようになっています:
2014051502


試しに、ブログや CMS では定番の1つになっている WordPress をデプロイしてみます。一覧の最後の方までスクロールして、"WordPress" を見つけたら、"Deploy App" ボタンをクリックします:
2014051503


WordPress アプリケーションサーバーのデプロイ情報を入力します。といってもここで気をつけるべきは一番上の "App Name" 欄だけです。デフォルトで設定されている名称をそのまま使ってもいいし、変更してもいいのですが、これがアプリケーションサーバー名の一部(****.stackato-mm7d.local の **** 部)になります。とりあえずこの例では "wordpress-y7unx" という名称にしています。最後に "Deploy Application" ボタンをクリックすると Stackato 環境にデプロイが開始されます:
2014051504


デプロイ中の画面はこんな感じでログが表示されます。しばらく待ちます・・・:
2014051505


ログに "Created app 'wordpress-y7unx(App Nameの値)'" と表示されて、ログの動きが止まったらデプロイが完了しています:
2014051506


この状況で画面左の "Instance" をクリックすると、Stackato 環境内で動いているサーバーインスタンスの一覧が表示されます。先程作成した WordPress サーバーがちゃんと Stackato 内で動いていることが確認できます。またこの画面から再起動などの管理オペレーションが可能になっています:
2014051507
 ↑仮想環境の KVM の中で動いている Stackato の中で動いている WordPress サーバー、です


では実際のアプリケーションにアクセスしてみます。

・・・が、その前に、このアプリケーションは Stackato 内で動いていて、IP アドレス自体は Stackato と同じものです。(恐らく VirtualHost 設定などで)アクセスサーバー名で切り替えられるようなので、この WordPress にアクセスするには改めて /etc/hosts を編集するなどして、サーバー名(wordpress-y7unx.stackato-mm7d.local)でアクセスできるようにしておく必要があります。

前回も紹介したように、ブラウザを利用するマシンの hosts ファイルを更に変更して、サーバー名と IP アドレスの対応を追加しておきます:
192.168.0.101 stackato-mm7d.local api.stackato-mm7d.local wordpress-y7unx.stackato-mm7d.local
(↑内容は各自の環境に合わせるようにして赤字部分を追加します


そしてブラウザで http://wordpress-y7unx.stackato-mm7d.local/ を開くと、、、WordPress の初期設定画面が表示されています。あっけなく動いてますね:
2014051508


初期設定を済ませれば、そのまま WordPress を使いはじめることができます:
2014051509


この WordPress の例に限らず、Stackato の App Store には初めから使えるアプリケーションが数多く用意されているので、これらを使ってアプリケーションをすぐに構築したり、ミドルウェア環境を手早く用意する、といったことができそうです。この WordPress アプリケーションの場合は 128MB メモリ環境で動作するようなので、これ1つ作った時点であればまだまだ余裕があるので他のアプリケーションを同時に作って動かす、ということもできると思っています(他のリソースはともかくメモリ的には)。

今回使った Stackato の mini Cloud Foundry 環境の場合はメモリ上限が 4GB と比較的小規模運用が前提になっていますが、この範囲で収まる使い方であれば、社内やチーム内利用には充分すぎる環境だと思います。仮に収まりきらなくなった場合でも、(有料の)上位エディションに移行したり、各社から提供されている Cloud Foundry ベースの環境に移行ことで運用先に困ることはないと思っています。 

こういう移行選択肢がある、ということがオープン環境の素晴らしいところです。


Cloud Foundry をベースとした PaaS 環境は色々な会社から提供されていますが、その商用プライベート版の1つに Stackato (スタッカート)があります。

Stackato は(PaaS なので当たり前といえば当たり前ですが)ホスティングされた環境を利用することもできますし、Amazon EC2 や HP Cloud Services 上にデプロイして利用するためのパッケージも用意されています。また小規模向け限定だと思われますが、仮想環境用のイメージファイルをダウンロードすることで、自社のオンプレミスなどの全くのプライベートな環境内に構築して利用することも可能です。

この最後のケースですが、イメージファイルは VirtualBox / VMWare / vSphere / KVM 環境それぞれ用意されているので、これらのいずれかの環境があれば試してみることができます。

というわけで、自分の KVM 環境を使って Stackato を導入してみた時の様子を、最初のセットアップまで紹介します。仮想環境を今から用意するのであれば PC に VirtualBox をダウンロードしてインストールするのが手軽かな、と思っていますが、もし KVM 環境を整えるのであればこちらを参照ください:
CentOS に KVM 環境を構築する

まずは Stackato のイメージをダウンロードします。 ダウンロードサイトから目的の仮想環境にあったものを選んで "Direct" と書かれた箇所をクリックするとダウンロードが始まります(1ファイルが2GB近くあります):
2014051400


ダウンロードしたファイルを展開すると、選択した仮想環境用のマシンイメージファイルが現れます。Stackato V3.2.1 の KVM 用イメージであれば stackato-img-kvm-v3.2.1.img というファイル名でした(展開後のサイズは10GB近く)。


これを KVM 内で稼働させます。VirtualBox や VMWare など、他の環境を使う方はその環境なりの方法でイメージファイルを仮想マシンとして起動させてください。以下しばらくは KVM で仮想マシンマネージャーを使って起動させる場合の説明になります。

まずは KVM のホストマシン上で「仮想マシンマネージャー」を起動します:
2014051401


仮想マシンマネージャーが起動したら "localhost" と書かれた箇所を右クリックし、「新規」を選択します:
2014051402


作成する仮想マシンの名前を適当に(図では "stackato")入力します。また先程展開したイメージファイルから作成するので「既存のディスクイメージをインポート」を選択して「進む」をクリックします:
2014051403


「既存のストレージパス」には「参照」ボタンをクリックして、先程展開した Stackato のディスクイメージファイルを選択します。また「OS の種類」には "Linux" を、「バージョン」はこのイメージの元になっている "Ubuntu 10.04" を選択します:
2014051404


「メモリー」欄には Stackato に割り当てるメモリサイズを指定します。推奨値は 2GB 以上となっているので 2048(MB) と入力します。メモリに余裕がある環境であればもっと大きな数値でも構いません(但し、このダウンロードイメージを使う場合の上限は4GBらしいです)。なお1GB(1024) を指定した場合でも起動はしましたが、起動時に警告メッセージが表示されました。CPU は Stackato 環境に割り当てる仮想CPU数を指定してください:
2014051405


最後に内容を確認して「完了」をクリックします:
2014051406


Stackato 仮想マシンが起動している様子です:
2014051407



仮想イメージの起動が完了するとこんな感じの画面になります(IP Address はDHCPで割り振られた、この Stackato マシンのIPアドレスです)。また画面内に "https://stackato-mm7d.local" と書かれたURL(赤字部分は環境によって変わります)は管理コンソールへアクセスするための URL ですが、後で使うのでメモしておきます。
ここからは KVM に依存しない内容に戻ります:
2014051408


まずはこの Stackato 環境にログインしてみます。"l"(エル)キーを押して、ログイン画面に移ります。デフォルト状態ではユーザー名/パスワードともに "stackato" が設定されているので、この内容を入力してログインします:
2014051409


ログインできました。CPU やメモリの状態、内部アドレスなどが表示されてプロンプトになります。なお stackato ユーザーが sudo 権限を持っているので、sudo を使うことでシャットダウンやリブートを含めた管理者権限でのコマンド実行を行うことも可能です:
2014051410


管理コンソールへアクセスするには、自分の PC や仮想ホストマシンから先程のログイン画面に表示されていた URL にブラウザでアクセスします。が、このホスト名は Stackato が自動的に割り振ったものであって、当然ですがそのままでは(名前解決ができないため)アクセスできません。 これを解決するために DNS を設定してもいいのですが、手っ取り早い方法としてはブラウザを使うマシンの hosts ファイル(Unix/Linux 系であれば /etc/hosts、Windows 系であれば C:\Windows\System32\drivers\etc\hosts)を編集して以下の1行を追加します:
192.168.0.101 stackato-mm7d.local api.stackato-mm7d.local

この最初のアドレス部分は作成した Stackato 仮想マシンの IP アドレス(画面に表示されているもの)で、その右にホスト名、更にスペースを空けて api. を頭に付けたホスト名を記述します。

これでブラウザからホスト名指定でアクセスできるようになりました。改めてブラウザのアドレス欄に https://api.ホスト名/ (上記の一番右に追加した api. 付きの名前)と入力してアクセスします。すると以下の様な管理画面(の初期設定画面)が表示されます:
2014051411


それぞれ以下の内容を入力し、"Yes, I agree to the Stackato Terms of Services" にチェックを入れて、最後に右下の "Setup First Admin User" ボタンをクリックします:
- Username: 管理ユーザー名
- Email Address: メールアドレス
- User Password: 管理ユーザーのパスワード
- Confirm Password: (確認用)同じパスワード
- Organization Name: 組織名/社名
- Space Name: デプロイ空間名称(適当に "dev" とか)


するとログイン画面が表示されます。ここに先程入力した管理ユーザー名とパスワードを指定してログインします:
2014051412


正しくログインが完了するとこのような画面が表示され、各種管理機能にアクセスすることが可能になります:
2014051413


とりあえず導入から起動、そして一通りのセットアップをした上で、管理コンソールにアクセスするまでを紹介しました。

実際のアプリケーションのデプロイなどはもう少し調べた上で別途紹介したいと思っています。

(2014/May/17 追記)
続きはこちらです。


 

最初にお断りしておくと、今回紹介する機能は通話の API サービスで、実際に試すと少額ですが以下の料金が発生します。その点ご了承ください:
http://twilio.kddi-web.com/price/index.html



Twilio という変わり種サービスがあります:

http://twilio.kddi-web.com/


↑この URL を見てもわかるように、日本では KDDI ウェブコミュニケーションズ様がサービスを提供しています。

Twilio は「クラウド上の電話 API サービス」です。ウェブ上から電話をかけたり、特定の番号への着信を受けて(自動音声などで)処理したり、ということができるのですが、そのプログラミング用 API が公開されていることで開発者視点からも興味深いサービスです。なお、Twilio API の公式ドキュメントについてはこちらを参照ください:
http://www.twilio.com/docs/api/twiml


更に、最近 IBM がベータ公開している PaaS 環境である BlueMix の中で、この Twilio が連携サービスの1つになっていることが分かりました。BlueMix はアメリカの IBM が提供しているサービスで、日本で取得した Twilio アカウントが使えるか心配でしたが、私が使っている限りでは特に問題ないようです。 というわけで、この BlueMix のサービスとして Twilio を使った電話連携アプリを作る様子を紹介してみます。


BlueMix では Twilio サービスが提供されていますが、使うためにはあらかじめ Twilio のトライアルアカウントを取得しておく必要があります。既にアカウントをお持ちの方は自身のアカウント ID と認証トークンを確認してください。Twilio のアカウント作成に関しては Micorsoft のページに詳しく記載されていたので参照ください。こちらの手順でアカウント ID と認証トークン、そして通話用の電話番号(!)が取得できます:
Twilio (トゥイリオ)を触ってみた

ここで一点注意を。通話用の電話番号はトライアルアカウントの範囲内で取得できますが、その番号では SMS は利用できません。SMS 用の電話番号を取得するには初期チャージ料金 2000 円と、月額10ドルの番号維持費が必要になります。


Twilio のアカウントが取得できたら、そのアカウントを使った Twilio サーバーを BlueMix 上に作成します。まずは BlueMix にログインし、ダッシュボードから "Add a service" を選択します:
2014040401


サービスの種類は "Twilio" を選択します:
2014040402


確認画面で "ADD TO APPLICATION" を選択します:
2014040403


Twilio サービスの簡易設定を行います。といってもここで設定する項目は3つだけで、下の2つは Twilio アカウント作成時やログイン後の画面から取得できるものです。入力後に "CREATE" をクリックします:
 - Add to: アプリケーションサーバーの指定。後で指定する場合は "Do not associate" でも構いません。
 - Account SID: Twilio API を利用する アカウント ID
 - Auth Token: 認証トークン文字列
2014040404


先ほどの手順でアプリケーションサーバーの指定をしなかった場合は別途アプリケーションサーバーを作って(あるいは既存のものを使って)Twilio サーバーと紐づけます。ここでは kkimura3 という名前の Java アプリケーションサーバーを作って、そこに紐づける前提で紹介しています。アプリケーションサーバーの "Add existing service" を選択します:
2014040405


紐づけるサービスを選択します。今回は上記で作成した Twilio サーバーを指定します:
2014040406


アプリケーションサーバーを再起動する、という確認画面が出たら OK をクリックします:
2014040407


アプリケーションサーバーが再起動し、Twilio のマークが表示されればサービスと紐づいていることが確認できます:
2014040408


この紐づいた状態で kkimura3 サーバーの環境変数を確認すると、VCAP_SERVICES 変数に Twilio アカウントや認証トークンが設定されていることが確認できます。したがって、この後作成するアプリケーションにはこれらの情報をハードコーディングする必要がなく、環境変数から取得する、というセキュアな手法も可能になります:
2014040409


また、Twilio API の SDK をダウンロードしておきます。各種言語の API はこちらに用意されています:
Twilio API Libraries

今回は Java を利用するので、ページの真ん中くらいの "Java" というセクションから "twilio-java" と書かれた箇所をクリックし、リンク先から最新版の Java SDK をダウンロードします(2014/04/04 時点では twilio-java-sdk-3.3.16.jar が最新版です)。
2014040410

あとは普通に(Eclipse などで) Java アプリケーションを作成します。その際に今ダウンロードした Twilio Java SDK ファイルをプロジェクトに(WEB-INF/lib/ とかに)インポートして、プロジェクト内で利用できるようにしておきます。さあこれで準備は完了です!


で、Twilio 連携アプリケーションを作るわけですが、今回は以下のような仕様のシンプルなアプリを作ります:
- 「指定の番号へ電話をかけて、特定のメッセージを流す」というアプリ。
- 発信元番号は Twilio で取得した番号(日本で取得した場合は 050-AAAA-BBBB という、050 で始まる番号になっているはずです)。
- 着信先番号はアプリ内で指定する(ただし自分で受け取れないと意味ないので、自分の携帯電話番号とか)。

以下でそのアプリのコードを紹介しますが、かなりシンプルなのがわかると思います。

なお、日本の電話番号はゼロから始まる(0**-****-****)のですが、Twilio から発信する場合は国際電話形式に変更する必要があります。そのため最初のゼロをとり、頭に +81 を付け、+81-**-****-**** という形式の電話番号をコード内で指定している、という点に注意してください。


Twilio 連携をするアプリケーションをこんな感じで作成します。今回は JSP ファイル(twilio.jsp)を1つ作成し、以下のような内容にしてみました:
<%@page import="java.util.*" %>
<%@page import="java.net.*" %>
  :
<%@page import="com.twilio.*" %>
<%@page import="com.twilio.sdk.*" %>
<%@page import="com.twilio.sdk.resource.factory.*" %>
<%@page import="com.twilio.sdk.resource.instance.*" %>

<%
String sid = "", token = "";
String env1 = System.getenv( "VCAP_SERVICES" );
if( env1 != null && env1.length() > 0 ){
  // BlueMix 環境なので、env1 から accountSID と authToken の値を取り出し、sid / token に格納する
    :
}

//. BlueMix でない環境のための設定
if( sid.length() == 0 ){
  sid = "(Twilio のアカウントSID)";
}
if( token.length() == 0 ){
  token = "(Twilio の認証トークン)";
}

String r = "";
try{
  TwilioRestClient client = new TwilioRestClient( sid, token );
  Map params = new HashMap();
  params.put( "To", "+8180xxxxyyyy" );  // +81-80-XXXX-YYYY 形式での(自分が受け取れる)電話番号
  params.put( "From", "+8150aaaabbbb" ); // +81-50-AAAA-BBBB 形式での Twilio で取得した電話番号
  params.put( "Url", "http://demo.twilio.com/welcome/voice/ja/" ); // 確認用ウェルカムメッセージ
  CallFactory callFactory = client.getAccount().getCallFactory();
  Call message = callFactory.create( params );  // 実際に電話をかける
  r = "" + message.getSid();
}catch( Exception e ){
  e.printStackTrace();
  r = "Exception: " + e;
}
%>

result = <%= r %>

ここでの内容はシンプルなので眺めていればなんとなくわかると思います。発信番号と着信番号を指定して、着信するとウェルカムメッセージを流す、というだけの内容です。また成功した場合のウェブ画面には SID が表示されるようになっています。

ちなみに上記コード内の params.put( "Url", "***" ); で指定した箇所ですが、Twilio ではメッセージの内容を特定のフォーマット(TwiML)で定義するのですが、その定義内容が参照できる URL を指定することで、そのメッセージを音声で喋らせることができます。上記で指定しているのはデフォルトの確認用メッセージ(「トライアルアカウントへようこそ・・」みたいな感じ)が流れる URL ですで、その中身は以下のようになっています:
<Response>
<Say language="ja-JP" voice="alice">VOICE U R L の設定を変更することでこの文章を変更できます。</Say>
<Pause length="1"/>
<Say language="ja-JP" voice="alice">仕様のことでご不明点が御座いましたらご連絡ください。</Say>
</Response>

この内容は自分でオリジナルのものを定義/用意することも可能ですし、TwiML を生成/保管するサービスも提供されているようです。TwiML の仕様についてはこちらを参照するか、あるいはウェブで情報を探してみてください。


こうして作成したウェブアプリケーションを WAR ファイル(twilio.war)にして、上記で作成した BlueMix の kkimura3 サーバーに cf を使ってデプロイします(この辺りの詳しい手順はこちらを参照ください):
# cf push kkimura3 -p twilio.war

そして、ウェブブラウザで BlueMix のアプリケーションサーバーの twilio.jsp にアクセスすると、画面には SID が表示されて・・・
2014040411


そして携帯電話には Twilio の番号からの着信が・・・
写真


おお! できました!! このコールを着信すると機械的な声で Twilio のデモメッセージが(自分で作ったメッセージの URL を指定した場合はそのメッセージが)音声で流れてきます。つまりウェブアプリから電話番号に発信してメッセージを流す、というアプリがこんな簡単に作れてしまったことになります。


このアプリは放置しておくと1アクセスごとに電話がかかってきて(しかも19円ずつかかって)しまうので、検証が終わった段階で止めておくのがいいでしょう。でも電話や SMS の連携が数行のコードでできてしまうのはアプリ開発の幅が広がりますよね。

そしてそんな Twilio サービスを自分のアプリ用に、しかも選択するだけで簡単に用意できてしまう BlueMix プラットフォームにも可能性を感じました。




(2016/Feb/08 追記)
ここに書かれている内容のうち、特に phpMyAdmin を導入する部分の内容が古くなってしまったので、書き直しました:

Bluemix で phpMyAdmin を動かす



BlueMix に挑戦シリーズ(?)の第3回目です。以前のエントリはこちら:
「BlueMix を使う」
「BlueMix のダッシュボードとサービスを使う」


今回は BlueMix 上で PHP アプリを動かすことに挑戦してみます。「あ、自分は PHP 使わないので結構です」という方も少なからずいると思いますが、PHP を動かすことだけが目的ではないので、もう少しお付き合いください。

前回のエントリでは BlueMix 上にデータベースサーバーを加えて、アプリケーションサーバーと接続して利用できるようにしました。一般的なアプリサーバー <-> DBサーバーの2層トポロジーが作れたことになります。

ただし、この段階では「単に繋がっただけ」です。繋がっているのでアプリケーションサーバーからDBサーバーの情報を取り出したり、作成/更新したりはできますが、少なくとも現時点ではDBの中身は(テーブル定義も含めて)空です。アプリケーション側から JDBC などで SQL を使うことはできるので、"create table .." でテーブル定義を指定することはできるし、"insert into .." してデータベース/テーブルの初期状態を作ることもできますが、裏を返せばその辺りの準備がまだ全然できていない状態で単に繋がっている、ということです。

この辺りは開発者や開発会社のポリシーなどにもよるのかもしれませんが、僕個人の周囲ではこの「データベースの初期化」の処理はコマンドラインツールを使って自分の PC からデータベースサーバーに接続し、ダンプからまとめてドーン!とインポート、という方式を取ることが多かったりします。この BlueMix 環境でも同様にして初期化すればいいや、と思っていましたが、セキュリティ上の制約なのか、どうやら BlueMix 外の環境からは BlueMix 上のデータベースサーバー(少なくとも MySQL と mongoDB)への接続は許可されていないようです。ということは自分の端末のコマンドラインからインポート、という方法は使えませんね。。。うーん。。。
2014032701


そこで思いついた方法が「BlueMix 内でデータベースの管理アプリを動かしてしまう」という方法です:
2014032702

BlueMix 内にもう一台アプリケーションサーバー(上記例だと「DB管理用サーバー」と書かれた部分)を新たに用意して、そこにはデータベース(上記例だと MySQL)を管理するためのウェブアプリケーション(例えば phpMyAdmin)を導入します。こうすることで自分の PC から管理用サーバーへはウェブブラウザで、管理用サーバーからDBサーバーへはネイティブのドライバでそれぞれ接続する形になります。そしてこの管理アプリケーションの機能を経由してテーブルを作成したり、初期データをまとめてインポートしたり、といったメンテナンス作業ができるようにする、というアイデアです。アイデアというよりも普段普通にこういう構成を作ることも珍しくありませんよね(それが許可されていれば、ですが)。

ただし、この方法にも1つ問題があります。DBの種類にもよるのでしょうが、MySQL では上記のように有名な管理アプリとして phpMyAdmin があり、今回もこれを導入するつもりですが、phpMyAdmin を使うにはその名の通り PHP 環境が必要です(正確には PHP + HTTPD の環境)。同様にして mongoDB の管理アプリの1つに phpMoAdmin がありますが、こちらも PHP 環境が前提です。特にオープンソース系データベースサービスではその管理ツールが PHP で書かれていることが多いこともあって、BlueMix 上でデータベースサービスを使おうとすると、管理目的でこれらの PHP アプリを動かしたい、という需要はそれなりにあるのでは、と思っています。

一方、BlueMix の標準アプリケーションサーバーには Java と Ruby が用意されていますが、残念ながら PHP ベースのものは用意されていません(クローズドベータの頃は存在していた、という噂も聞いていますが・・)。制約の多い PaaS 環境で、Java アプリケーションサーバーに後から PHP や PHP アプリだけを追加する、というのも難しそうです。うーん、この方法も諦めざるをえないのでしょうか・・・


・・・というところで今回のブログエントリの冒頭部分に戻ります。要は各種 PHP アプリも動かしてみたいというわけではなく、DB サーバーのメンテナンス用アプリケーションとしての PHP + HTTP 環境が使えないだろうか、という背景があったのでした。

こうなると頼りになるのは IBM developerWorks、英語版のコミュニティを探してるとやはり見つかりました。しかもご丁寧なことに多バイト言語にも対応した PHP モジュールが用意されているようです。もう至れり尽くせり、これを使わせていただきましょう!
https://www.ibmdw.net/answers/questions/8925/how-do-i-connect-to-my-bluemix-mysql-service-to-setup-mysql-database/


導入の手順としてはこんな感じです:
前提としてまず cf ツールの動作環境は用意できていることとします。分からない方は以前のエントリを参照ください。
加えて、BlueMix 上に専用のアプリケーションサーバーを1つ作っておきます(種類はなんでもいいです)。名前は kkimura2、ホスト名は kkimura2.ng.bluemix.net としたと仮定します(この辺りの詳しい手順についても以前のブログエントリを参照してください)。自分で作った(る)環境に合わせて適宜読み変えてください。これからこのサーバーに PHP + HTTPD モジュールを導入してゆきます:
2014032703



作成したサーバーを稼働中の(管理したい) MySQL サーバーに紐づけます。まずは OVERVIEW に移ってから Services 欄の "Add existing service" をクリックします:
2014032704


どのサービスをアプリケーションサーバーに紐づけるかを設定します。この例では MySQL しか使っていないので1つしか表示されていませんが、目的のサービスを選択して OK をクリックします:
2014032705


OVERVIEW 画面に戻り、アプリケーションサーバーに MySQL サービスが紐づけられたことを確認します。この状態で紐付けられた MySQL サーバーへの接続情報を確認しましょう。左ペインの "LIBERTY FOR JAVA" をクリックします:
2014032706


一番下の Environment Variables 欄の VCAP_SERVICES の値を参照して、MySQL サーバーへ接続するための情報を確認してメモしておきます。必要なのは name(DB名)、hostname、port、username、そして password あたりです:
2014032707



ここからは cf ツールをセットアップした環境での作業になります。最初に専用のディレクトリを1つ新規に作ります。新規に作成する必要はありませんが、空のディレクトリを用意してください(ここでは /tmp/php というディレクトリを作りました):
# cd /tmp
# mkdir php
# cd php


用意した空のディレクトリに PHP のモジュールをまとめてコピーします。イメージとしては、このディレクトリがドキュメントルートになるので、ドキュメントルート直下に必要なファイルをすべて用意する、という感じ。今回は phpMyAdmin の最新版をダウンロード&展開&ディレクトリリネームして、phpMyAdmin というディレクトリの中に一通りのファイルが展開されているようにしました(phpMyAdmin/config.sample.inc.php というファイルが存在しているようにします):
# pwd
/tmp/php
# ls
phpMyAdmin
# ls phpMyAdmin
CONTRIBUTING.md
ChangeLog
README
  :
  :
(phpMyAdmin の構成ファイル)


PHP ファイルに DB 接続情報を設定します。phpMyAdmin の場合、phpMyAdmin 以下に config.sample.inc.php というテキストファイルがあるのでこれを config.inc.php という名前でコピーします:
# cd phpMyAdmin
# cp config.sample.inc.php config.inc.php


そして先ほどメモした内容を使ってその中身を編集します(余談ですが BlueMix の MySQL ってポート 3307 番で稼働してるんですね・・):
# vi config.inc.php

$cfg['Servers'][$i]['host'] = '(MySQL サーバーのIPアドレス)'; ←'localhost' から変更
$cfg['Servers'][$i]['port'] = '3307(MySQL サーバーのポート番号)'; ←この行を追加

もし phpMyAdmin 以外に導入したい PHP アプリがあれば、同様にこのディレクトリに入れておきます(そして必要であれば同様に接続先 MySQL サーバーの設定をしておきます)。自分の場合は PHP + MySQL の環境で動く WordPress も使いたかったので、同じディレクトリ内に wp というディレクトリを作成して、DB 設定ファイル(wp/wp-config.php)も用意&編集して入れておきました。この辺りは WordPress の一般的な導入手順の話なので、興味があればググってみてください。

で、自分の場合はもともと空だったディレクトリに phpMyAdmin と wp という2つのサブディレクトリが作られた状態になっています:
# pwd
/tmp/php
# ls
phpMyAdmin  wp


ではこのディレクトリをドキュメントルートとして PHP サーバーに(PHPサーバーごと)デプロイします。Cloud Foundry のコミュニティで用意された PHP サーバー用の BuildPack (の github リポジトリ)と、デプロイ先のアプリケーションサーバー名を指定して、次のように入力します:
# cf push -b https://github.com/dmikusa-pivotal/cf-php-build-pack.git kkimura2
Updating app kkimura2 in org (IBM ID) / space dev as (IBM ID)
OK

Uploading kkimura2...
Uploading from: /tmp/php
17M, 2296 files
  :
  :
OK

requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: kkimura2.ng.bluemix.net

     state     since                    cpu    memory          disk
#0   running   2014-03-27 05:39:23 PM   0.0%   12.7M of 512M   112.2M of 1G

このコマンドでは -b オプションでベースとなる機能(この例では PHP と HTTPD)のコピー元を指定しており、そこに用意されたモジュールと定義されたスクリプトに従って PHP サーバーイメージが作られていきます。Cloud Foundry ではこういったサーバーを Build Pack というツールで作成することができるので、こうしたコミュニティによる機能拡張もできるようになっているのでした。Build Pack についてはまた別の機会で触れたいと思っています。

これで PHP のアプリケーションサーバーが作られ、起動し、そのドキュメントルートには phpMyAdmin と wp(WordPress)が用意された状態になっているはずです。

では早速 phpMyAdmin を使ってみましょう。http://ホスト名/phpMyAdmin/ にブラウザでアクセスしてみます:
2014032708


おお! で、これもメモしたユーザー名とパスワードを指定してログインしてみると、、、
2014032709

 
おおお!!! これでこの画面から MySQL のテーブルを作ったり、データを CSV からインポートしたり、逆にエクスポートしたり・・・なんて操作も可能になりました。個人的に慣れたコマンドラインのインターフェースとは違いますが、GUI はやはり便利ですね。

またもう一つの PHP アプリである WordPress にもアクセス(http://ホスト名/wp/)してみました。こちらもちゃんと動いてますね:
2014032710


BlueMix 環境での DB 管理方法を調べていたら、PHP アプリの動かし方まで理解できました~、の巻♪
 

このページのトップヘ