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

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

2015/02

IBM Bluemix を使うと、自分専用の WordPress 環境を手に入れることができます。

IBM Bluemix は IBM が提供する PaaS のサービスです。本来有償のサービスですが、最長30日間の無料トライアル期間と、トライアル終了後は特定条件下で使う場合に限り無料枠を使った継続利用ができます(無料枠を超えて利用した場合だけ課金されます)。

この無料枠の範囲内であれば、1ヶ月とか1年といった期間の制約なしにアプリケーションサーバーやデータベースサービスを利用することができます。今回はこの無料枠内で利用できるサービスの例としてブログやコンテンツ管理システムとして使われることの多い WordPress サイトを構築する手順を紹介します。なお、以下の内容は 2015/02/20 時点での内容であり、今後変更の可能性があることを留意ください。


まず、以下の作業を無料トライアル期間(サインアップから1ヶ月)内に限って行う場合はいいのですが、無料トライアル期間を超えて運用したい場合は、有償アカウントに移行する必要があります。有償アカウントに移行しても、ここで紹介するアプリケーション・サーバーとサービスのみを使う場合は無料枠内で運用できます(他のサーバーも併用する場合は無料枠を超える可能性もあります)。 トライアルアカウントを有償アカウントに変更するための手順はこちらを参照ください:
IBM Bluemix をトライアル期間(1ヶ月)を超えても無料で使う


では改めて IBM Bluemix 内に WordPress 環境を構築する手順を紹介します。まず IBM Bluemix にログインし、画面右上のデータセンターを「米国南部」にします。2015/02/20 時点で、「英国」データセンターでは以下で紹介する "WordPress on Bluemix" ボイラープレートが定義されていないため、構築の手続きが複雑になります。 今回は「米国南部」データセンターを使う、より簡単な方法を紹介します。 

そして画面上部の「カタログ」を参照すると、"WordPress on Bluemix" というボイラープレート(必要なアプリケーションとサービスを予め定義し、紐付けたテンプレート)が現れるので、これをクリックします:
2015022001


"WordPress on Bluemix" ボイラープレートの内容が表示されます。これを見ると PHP アプリケーション・サーバーに加え、ClearDB(MySQL)、Object Strage、SendGrid という3つのサービスがセットになっていることが分かります。これらを使って WordPress 環境を構築するテンプレートのようです。ここで画面右に一意になる名前(この例では dotnsf-wp)とホスト名(この例では dotnsf-wp)を入力して、最後に「作成」ボタンをクリックします:
2015022002


しばらく待つと ClearDB, Object Strage, SendGrid の3つのサービスがバインドされた状態で PHP アプリケーション・サーバーが起動します:
2015022003


改めて、ここで3つのサービスの利用料金について確認します。2015/02/20 時点ですが、これらのサービスの利用料金は以下のようになっています。制約こそありますが、無料枠の中で利用していくことができそうです:
サービス 利用料金 制約 参照
ClearDB 無料 DBサイズ 5MB、同時コネクション数 4、I/O 低、日次バックアップ有 参照
Object Strage 無料 ベータ版 参照
SendGrid 無料 月25000通までのメッセージ送信 参照


これらのサービスですが、ClearDB の実体は MySQL であり、用途としてはデータストアとして利用されます。Object Strage は画像などのメディアファイルのアップロード先として利用されます。これによってアプリケーション・サーバーが複数台構成になっても正しくメディアを取得できるような対応が可能になります。 また SendGrid はメッセージ送信サービスであり、構築した WordPress 環境のメール送信サービスとして利用します。これら3つのサービスと一緒に WordPress 本体が(PHP サーバー上で)動く、ということになります。 WordPress 環境を1インスタンスで作るだけならデータストアサービスがあればできるのですが、これらのサービスを組み合わせることで初めから IBM Bluemix の複数インスタンス機能に対応することができるようになります。その環境を簡単に構築するためのボイラーテンプレートが用意されている、ということになります。



アプリケーション・サーバーの起動後に名前部分(この例では dotnsf-wp)をクリックすると、アプリケーションサーバーインスタンスの状態が表示されます。メモリは 512MB で1インスタンス。メモリ量に限った計算ですが、これならば IBM Bluemix の無料枠内(月間750GB/H)でも運用可能です。有償アカウント移行後にこの状態よりもメモリを増やしたり、インスタンス数を増やしたりすると無料枠を超える可能性があることに注意してください。 そして「経路」と書かれた箇所に書かれた URL がこのアプリケーションが稼働している URL になります:
2015022004


コピペするなどして、この URL にアクセスしてみましょう。最初だけは WordPress の設定画面が表示され、まず言語を指定します。この例では「日本語」を指定しています:
2015022005


続けてサイトやサイト管理者の情報を入力します。最後に「WordPress をインストール」ボタンをクリックして設定は完了です:
2015022006


設定後に改めてアプリケーション URL にアクセスすると、WordPress の画面が表示されます。なお設定した管理者情報を使ってログインしていると最上段にユーザー情報も表示されます:
2015022007


試しに管理画面(http://(アプリケーションURL)/wp-admin/)にアクセス&ログインして WordPress のプラグイン情報を確認してみます。最初から IBM Object Strage や SendGrid 等のプラグインが導入されており、一部はすでに有効化されていることがわかります:
2015022008


またデフォルトのテーマは "Bluemix Style" と名付けられているようですが、パッと見で "Twenty Fourteen" テーマをコピーしたもののように見えますね。これがベースになっているのだと思います:
2015022009


最後にテーマを変更して見栄えを変えてみます。管理画面の「外観」メニューからテーマの「新規追加」を選び、検索するなどして適当なテーマを選んでインストールします。この例ではカッコよさげな "Tanzanite" という無料テーマを選んでみました:
2015022010


テーマをインストールして、有効化して、改めてトップページにアクセスするとこんな感じ。先ほどとはかなり印象の違うページになりました:
2015022011


ここまでの WordPress 環境がこれだけの手順で、しかも無料で手に入る、ということになります。結構魅力的では?

無料枠を超える話にはなりますが、仮にアクセス数などが急増して1サーバーだけでの対応が難しくなった場合は IBM Bluemix 上のサーバーインスタンスを増やしたり、メモリ数を調整したりもできるので、「本格的な利用を前提とした WordPress サービスの初期運用」にぴったりの環境だと思います。













 

IBM Bluemix は IBM から提供されている、Cloud Foundry ベースの PaaS です。
1ヶ月間の無料トライアル期間が用意されていて、サインアップから1ヶ月間は「メモリ2GBと10個のサービス」という制限内で自由に使うことができます。

例えばメモリに関してはメモリ 512MB のサーバーインスタンスであれば4インスタンスまで使えますし、メモリ 512MB のインスタンスと 1024MB のインスタンスを1つずつ起動して運用し、必要に応じてどちらかのメモリを 512MB 足せるように残しておく、といった運用も可能です。

サービスに関しても、トライアル期間中は全部で10個まで使うことができます。

このトライアル期間はサインアップから 30 日間です。つまり上記の条件で 30 日間 IBM Bluemix の機能や各種サービスを試すことができます。


さて、ではトライアル期間中に開発したアプリケーションや構築したサービスは 30 日後には利用料金を払わないと使えなくなってしまうのでしょうか? 某有名クラウドベンダーだと、同様の無料枠が1年間あるので、なんか差を感じますよね(苦笑)。。

その答は「クレジットカードを登録するか、サブスクリプションアカウントを登録することで、無料枠も含めた継続ができる」ということになります。クレジットカードを登録すること自体に抵抗を感じるかもしれませんが、登録しても無料枠内で使う限りは課金されません。1ヶ月経過後の無料枠は最初の1ヶ月ほど充実はしていませんが、特定条件内で(1年ではなく)ずっと IBM Bluemix のアプリサーバーが使える、ということになります。悪くないです。


では以下にそのための手順を以下に紹介します。なお以下の内容は 2015 年2月20日時点での情報になります。今後条件が変更になる可能性があることを留意してください。またこの切り替えを行った場合、無料トライアル期間が残っていても無効になってしまいます。ご注意ください。

まず IBM Bluemix にログインし、画面右上のカレンダーマークをクリックします。ちなみにここに書かれた数字の日数だけトライアル期間が有効です:
2015022001


無料トライアル期間に関するメッセージがポップアップ表示されます。この中の「無料アカウントからの切り替え確認」と書かれた箇所をクリックします:
2015022002


このような画面が表示されます。無料アカウントから有料アカウントへの切り替えには2つの選択肢があります。1つはクレジットカード支払いの登録で、こちらはこの後で詳しく説明します。 もう1つはサブスクリプションアカウントと呼ばれるもので、いわゆる企業契約です:
2015022003


後者の「オプション2」のリンクをクリックするとこのような画面が表示されます。営業担当者へ直接連絡を取っていただく形になります:
2015022004


ここでは個人でも行える、「オプション1」のクレジットカード登録の手順を紹介します。まず請求先地域として「日本 - 日本語」を選択し、「クレジット・カードの追加」ボタンをクリックします:
2015022005


クレジットカードを登録する画面が表示されます。注意書きには以下のような内容が記載されています:
・アプリケーションサーバーは1ヶ月に 375 H/GB 以内の利用であれば課金されない
・有償サービスを利用しない限りは課金されない

1ヶ月は31日でも744時間なので、アカウント辺りのアプリケーションサーバー利用メモリが 512MB であれば(1ヶ月でも372GBなので)課金されない、という解釈になります。逆に言うとこれを超えた場合、アプリケーションサーバーは課金対象となります。また各種サービスについても無料のものがあったり、有料のものがあったり、無用枠のある有料サービスがあったりします。有料サービスを利用しない間は課金対象になりません。
2015022006


Eメールアドレスは IBM Bluemix のログイン ID になっています。また姓名は IBM Bluemix サインアップ時に指定したものが表示されているはずです(ここまで変更できない情報です)。 会社名はオプションですが、住所、郵便番号、電話番号は必須項目です。最後に「IBM のご使用条件を読み、同意しました」のチェックを入れます:
2015022007


入力項目にエラーがなければクレジットカード情報を登録するフォームが表示されます。ここにカード番号、有効期限、セキュリティコードを入力して、最後に「送信」ボタンをクリックします:
2015022008


クレジットカード確認中の画面です。しばらく待ちます:
2015022009


この画面が出ると無料アカウントが有料アカウントに切り替わりました:
2015022010


この切り替えが行われると、画面右上から無料トライアルの残り期間の表示が消えます。またアカウント情報からアカウントタイプを確認すると「従量課金」に切り替わっていることが確認できます:
2015022011


同時にダッシュボード画面では利用可能なアプリケーション・サーバーの総メモリ量が 2GB から 512 GB まで増え、サービスの数も 10 個から 2000 個に増えていることが確認できます(無料枠の話は別です、念のため。あと欧州リージョンの場合に使えるサービスは 1500 個でした):
2015022012




この状態になれば、メモリ 512MB までのアプリケーションサーバーを立てて、MySQL など無料のデータストア等のサービスを使ったアプリケーションを"ずっと"運用できます。WordPress とかでブログを作って運用するには、ボイラープレートと呼ばれる簡単に作れるテンプレートも用意されているし、なかなか便利だと思います。














 

CentOS / RHEL(RedHat Enterprise Linux) に Ruby 2.x をインストールする手順を紹介します。

Ruby のバージョンにこだわらないのであれば、コマンドラインから
# yum install ruby
と入力するだけでインストールできます。ただ 2015/Feb/18 現在、この方法でインストールできる Ruby のバージョンは 1.8.7 でした。このバージョンで特に支障がなければこの方法が一番簡単だと思っています。


以下、どうしても Ruby 2.x を使いたい、という人のための導入方法の紹介です。CentOS で Ruby 2.x を導入する方法はいくつかあって、ソースコードからビルドするという一般的な手順もあるのですが、ここでは rbenv を使った方法を紹介します。

rbenv は複数バージョンの Ruby を同一コンピュータ上で管理する GitHub 提供のツールです。2.x に限らず 1.x も含めた複数バージョンの Ruby を同じマシンにインストールし、実際に利用するバージョンを管理しながら使えるようにできます。このツールを使って Ruby の最新版をインストールしてみます。


まず、rbenv は GitHub から提供されていることもあり、git の入手が必須です。まだ導入できていない場合はこのコマンドで git を導入してください:
# yum install git

そして git を使って GitHub から rbenv をチェックアウトします。今回は /opt/ 以下に Ruby をインストールするという前提にします:
# cd /opt
# git clone git://github.com/sstephenson/rbenv.git

続けて ruby-build プラグインを rbenv の plugins フォルダにインストールします:
# mkdir /opt/rbenv/plugins
# cd /opt/rbenv/plugins
# git clone git://github.com/sstephenson/ruby-build.git

最後に /etc/profile に以下の3行を追加して、rbenv を初期化&実行するための環境設定を行います:
export RBENV_ROOT="/opt/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

ここまでの作業で rbenv の導入が完了しました。再ログインするとか、シェルを再起動するなりして最後の環境設定までが反映された状態にしてください。

更に、この後の作業で必要になるモジュールを(エラーが出る前に)yum でインストールしておきます:
# yum install gcc make openssl-devel libffi-devel

ここまでの準備ができていれば Ruby のインストール作業に移れます。まずは rbenv でインストールできる Ruby のバージョン一覧を確認してみます:
# rbenv install -l
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p334
  1.8.7-p352
  1.8.7-p357
  1.8.7-p358
    :
    :
  2.1.5
  2.2.0-dev
  2.2.0-preview1
  2.2.0-preview2
  2.2.0-rc1
  2.2.0
  2.3.0-dev
  jruby-1.5.6
    :
    :
  ree-1.8.7-2012.02
  topaz-dev

JRuby とかもリストされてますが、今回は普通(?)の Ruby だけで考えます。バージョン番号に rc とか dev とか preview とか付いているのは開発中のものだったりします。この一覧を見る限り安定版では 2.2.0 が最新のようなので、これをインストールしてみましょう(結構時間かかります):
# rbenv install 2.2.0
Downloading ruby-2.2.0.tar.gz...
    :
    :


そして、この Ruby 2.2.0 をシステムで使うデフォルトバージョンとして設定した上で動作確認します:
# rbenv global 2.2.0
# ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]

Ruby 2.2.0 が導入できました! 


この後で別のバージョンが必要になった場合は同様に
# rbenv install X.X.X

でインストールし、
# rbenv global X.X.X

でデフォルトバージョンを変更できます。







 

KVM(Kernel-based Virtual Machine) は CentOS/RHEL(RedHat Enterprise Linux) 環境に標準装備の仮想ハイパーバイザーです。わかりやすく言えば、VMWare Server のような機能がカーネルにはじめから用意されている(はじめから有効にはなっていない)ので、CentOS/RHEL でも、それ以外の Linux ディストリビューションでも単体で仮想環境を構築することができます。 僕も自宅の個人環境で使っています。KVM 環境の構築手順はこちらのエントリを参照ください:
CentOS に KVM 環境を構築する


KVM には GUI/CUI 両方の管理ツール/コマンドが用意されていて、仮想イメージのクローン(複製)なども行うことができます。ただこの複製ツールが手軽に使えるかというと、実用上ちょっとした問題がありました。
2015021801


その問題点は、この「複製」というのは「仮想イメージをまるごと複製」するのですが、ホスト名と MAC アドレスまでまるごと複製してしまう、という点でした。つまりあるサーバーインスタンスのイメージを複製すると、同じホスト名で、同じ MAC アドレスのネットワークインターフェースを持った異なるサーバーが用意される、ということです。 またネットワーク設定も複製されるため、例えば固定 IP アドレスが設定されている環境であれば同じ IP アドレスが割り振られることになりますし、DHCP 設定だとすると、同じ MAC アドレスのサーバーが別に存在していることになり、DHCP サーバーからは区別ができません(結果、正しい IP アドレスが取得できず、ネットワークが使えない状態で起動してしまいます)。


要は、複製コマンドそのものに問題があるわけではない(むしろ、複製という意味では正しい)のですが、イメージを複製した後にホスト名と MAC アドレスを変更したい(そこまで含めて自動化したい)のです。ただホスト名は AAA から BBB に変更すればよい、という正解が決まっているのでいいとして、MAC アドレスは変更したいといっても「では変更後の値を何にするのか?、一意に生成できるのか?」という問題もあったりして単純ではありません。またこれらの処理を自動化するとなると、起動していない仮想サーバーイメージ内のファイルシステムを外から操作することになるので、これも特殊なコマンドを使うことになります。その辺りを含めてシェルスクリプト化するまでを紹介します。


というわけで、目標として今回は clone-guest.sh というシェルスクリプトを作って、
# clone-guest.sh AAA BBB
というコマンドで、AAA という仮想マシンイメージを BBB という仮想マシンに複製できるようにします。複製そのものは /usr/bin/virt-clone コマンドを使えばできるのですが、その際に BBB は AAA とは異なる MAC アドレスを持っているように変更します。また複製後にこの BBB を自動起動するようにしてみます。また今回作成するシェルスクリプトでは複製の対象を CentOS/RHEL とします(これらのシステムを前提として MAC アドレス変更の処理を追加するためです)。


まず最初に「そもそもホスト名と MAC アドレスの変更ってどうやるの?」という疑問が生じます。ホスト名については CentOS/RHEL では /etc/sysconfig/network 内に HOSTNAME=**** として記載されているので、ここを書き換えるだけで済みます。具体的には例えば複製元の /etc/sysconfig/network に HOSTNAME=AAA.domain.com のような記載が含まれていたら、複製先では HOSTNAME=BBB.domain.com と書き換えればいい、ということになります。

一方、MAC アドレスはちと複雑です。まず MAC アドレスを書き換える必要のあるファイルが、
 - /etc/sysconfig/network-scripts/ifcfg-eth0
 - /etc/udev/rules.d/70-persistent-net.rules
の2つあります。更に書き換え後の MAC アドレスは現在とは異なる一意の値にする必要があるため、どのように生成するか、という問題も含まれているのでした。ここは詳しくは後述しますが /usr/bin/uuidgen コマンドを使って動的に取得するようにします。
 

次に、起動していない仮想イメージファイル内のファイルシステムへどのようにアクセスするか? ですが、こちらは KVM 標準の以下のコマンドを活用して実現します:
- /usr/bin/virt-cat     外部から仮想イメージ内の特定ファイルに対して cat を実行する
- /usr/bin/virt-copy-in 外部から仮想イメージ内の特定ファイルにコピーする

これらのツールと、KVM の一般的な仮想管理コマンドである virsh(/usr/bin/virsh) を組み合わせて、clone-guest.sh を以下のような内容で作りました。青字は僕のコメントです:
#!/bin/sh

# 作業ディレクトリ
work_dir=/tmp/clone-guest

# この作業で使う各種コマンド
cmd_awk=/bin/awk
cmd_cat=/bin/cat
cmd_cut=/bin/cut
cmd_grep=/bin/grep
cmd_mkdir=/bin/mkdir
cmd_sed=/bin/sed
cmd_uuidgen=/usr/bin/uuidgen
cmd_arp=/sbin/arp
cmd_virsh=/usr/bin/virsh
cmd_virt_cat=/usr/bin/virt-cat
cmd_virt_clone=/usr/bin/virt-clone
cmd_virt_copy_in=/usr/bin/virt-copy-in

source_bridge=br0 # KVM のブリッジインターフェース名(デフォルトだと virbr0)
original_domain_name=$1 # 複製元(AAA)
clone_domain_name=$2 # 複製先(BBB)

# 仮想イメージのあるディレクトリ
domain_image_dir=/var/lib/libvirt/images
clone_domain_image_path=$domain_image_dir/$clone_domain_name.img # 複製先仮想イメージファイル


# パラメータを2つ(複製元と複製先)指定して実行していることを確認
if [ "$clone_domain_name" = "" ] ; then
echo "Usage: clone-guest.sh <domain_name> <clone_name>"
exit 0
fi

# 作業ディレクトリが存在していなかったら作成
[ ! -e $work_dir ] && $cmd_mkdir -p $work_dir


# virt-clone コマンドで普通に複製
$cmd_virt_clone \
  --original $original_domain_name \
  --name $clone_domain_name \
  --file $clone_domain_image_path 

# 複製前の仮想イメージ内の /etc/sysconfig/network を取り出して作業ディレクトリに保存
$cmd_virt_cat -d $original_domain_name \
  /etc/sysconfig/network \
  > $work_dir/network.org

# 複製前の仮想イメージ内の /etc/sysconfig/network-scripts/ifcfg-eth0 を取り出して作業ディレクトリに保存
$cmd_virt_cat -d $original_domain_name \
  /etc/sysconfig/network-scripts/ifcfg-eth0 \
  > $work_dir/ifcfg-eth0.org

# 複製前後の仮想イメージの MAC アドレスを取り出す
original_mac_addr=$( \
$cmd_virsh domiflist $original_domain_name \
| $cmd_grep $source_bridge \
| $cmd_awk '{print $5}' \
)
clone_mac_addr=$( \
$cmd_virsh domiflist $clone_domain_name \
| $cmd_grep $source_bridge \
| $cmd_awk '{print $5}' \
)

# 複製前後の仮想イメージの UUID を取り出す
original_nic_uuid=$( \
$cmd_cat $work_dir/ifcfg-eth0.org \
| $cmd_grep -i uuid \
| $cmd_cut -d'=' -f2 \
| $cmd_sed 's/"//g' \
)
clone_nic_uuid=$($cmd_uuidgen)

# 複製後の仮想イメージの ifcfg-eth0 を書き換え
$cmd_cat $work_dir/ifcfg-eth0.org \
| $cmd_sed -e "s/$original_mac_addr/$clone_mac_addr/i" \
-e "s/$original_nic_uuid/$clone_nic_uuid/i" \
> $work_dir/ifcfg-eth0

# 複製後の仮想イメージに書き換え後の ifcfg-eth0 を書き戻す
$cmd_virt_copy_in -d $clone_domain_name \
  $work_dir/ifcfg-eth0 \
  /etc/sysconfig/network-scripts/

# 複製前の仮想イメージ内の /etc/udev/rules.d/70-persistent-net.rules を取り出して作業ディレクトリに保存
$cmd_virt_cat -d $original_domain_name \
  /etc/udev/rules.d/70-persistent-net.rules \
  > $work_dir/70-persistent-net.rules.org

# 複製後の仮想イメージの 70-persistent-net.rules を書き換え
$cmd_cat $work_dir/70-persistent-net.rules.org \
  | $cmd_sed "s/$original_mac_addr/$clone_mac_addr/i" \
  > $work_dir/70-persistent-net.rules

# 複製後の仮想イメージに書き換え後の 70-persistent-net.rules を書き戻す
$cmd_virt_copy_in -d $clone_domain_name \
  $work_dir/70-persistent-net.rules \
  /etc/udev/rules.d/

# 複製後の仮想イメージの network を書き換え
$cmd_cat $work_dir/network.org \
| $cmd_sed -e "s/$original_domain_name/$clone_domain_name/i" \
> $work_dir/network

# 複製後の仮想イメージに書き換え後の network を書き戻す
$cmd_virt_copy_in -d $clone_domain_name \
  $work_dir/network \
  /etc/sysconfig/

# 複製後の仮想イメージを起動
$cmd_virsh start $clone_domain_name

echo "Clone $clone_domain_name has been started."
exit 0

sed だの awk だのを駆使してなんとか作った、という感じです(苦笑)。あとはこのファイルを clone-guest.sh という名前で保存し、実行権限を与え、パスの通ったディレクトリに置いておけば、
# clone-guest.sh AAA BBB

という感じで、既存の AAA という仮想環境を BBB という名前で複製して、各種設定ファイルまで書き換えて、起動する、という使い方ができるはずです。 ここまでできるようになると、KVM もかなり便利に使えてます。










 

IBM Bluemix 環境に cf ツールでアプリケーションを push した後にログが表示されますが・・・
2015021601



このログを詳しく調べて、「コマンド実行後に何をやっているのか?」の説明をします。

なお、今回の説明内容の前提として、2015/02/16 時点の、Liberty Java アプリケーション(war ファイル)1インスタンスをデプロイしています。このアプリケーションでは MySQL をデータストアとしてバインドしています。その条件下でのログを紹介します:

まずログ全文はこんな感じです:
$ cf push dotnsf-20150212 -p GeoImgWeb.war
Updating app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
OK

Uploading dotnsf-20150212...
Uploading app files from: GeoImgWeb.war
Uploading 2.4M, 258 files
Done uploading
OK

Stopping app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
OK

Starting app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
-----> Downloaded app buildpack cache (224K)
-----> Retrieving IBM 1.7.1_sr2fp1ifx-20141220 JRE (ibm-java-jre-7.1-2.1-pxa6470
_27sr2fp1ifx-20141220_02-sfj.tgz) ... (0.0s)
         Expanding JRE to .java ... (0.8s)
-----> Retrieving App Management Agent 2015.02.04_102631 (com.ibm.ws.cloudoe.app
-mgmt-proxy-agent.zip) ... (0.0s)
         Expanding App Management to .app-management (0.0s)
-----> Downloading and installing client jar(s) from https://download.run.pivota
l.io/mariadb-jdbc/mariadb-jdbc-1.1.8.jar (0.0s)
-----> Auto-configuration is creating config for service instance 'mysql-x3' of
type 'mysql'
-----> Liberty buildpack is done creating the droplet



-----> Uploading droplet (116M)

0 of 1 instances running, 1 starting
1 of 1 instances running

App started


OK

App dotnsf-20150212 was started using this command `.liberty/initial_startup.rb`


Showing health and status for app dotnsf-20150212 in org (ユーザー名) / spa
ce dev as (ユーザー名)...
OK

requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: dotnsf-20150212.eu-gb.mybluemix.net
package uploaded: Mon Feb 16 01:15:44 +0000 2015

     state     since                    cpu    memory           disk
#0   running   2015-02-16 10:16:46 AM   2.8%   149.4M of 512M   182M of 1G

$ 

まず、push コマンド:
$ cf push dotnsf-20150212 -p GeoImgWeb.war

で「dotnsf-20150212 という Bluemix アプリケーションに、GeoImgWeb.war という Java アプリケーションをデプロイする」という命令をしています。この GeoImgWeb.war はカレントディレクトリに存在しているものとします。

その直後のログは以下のようになっています:
Updating app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
OK

Uploading dotnsf-20150212...
Uploading app files from: GeoImgWeb.war
Uploading 2.4M, 258 files
Done uploading
OK

Stopping app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
OK

デプロイ先のアプリケーションを更新するため、GeoImgWeb.war をアップロードして、そして dotnsf-20150212 を一旦停止しています。ここまではまあ一般的というか、Bluemix / Cloud Foundry 環境に特化した内容ではないのでわかりやすいと思います。

この後から少し特殊な処理になります:
Starting app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
-----> Downloaded app buildpack cache (224K)
-----> Retrieving IBM 1.7.1_sr2fp1ifx-20141220 JRE (ibm-java-jre-7.1-2.1-pxa6470
_27sr2fp1ifx-20141220_02-sfj.tgz) ... (0.0s)
         Expanding JRE to .java ... (0.8s)
-----> Retrieving App Management Agent 2015.02.04_102631 (com.ibm.ws.cloudoe.app
-mgmt-proxy-agent.zip) ... (0.0s)
         Expanding App Management to .app-management (0.0s)
-----> Downloading and installing client jar(s) from https://download.run.pivota
l.io/mariadb-jdbc/mariadb-jdbc-1.1.8.jar (0.0s)
-----> Auto-configuration is creating config for service instance 'mysql-x3' of
type 'mysql'
-----> Liberty buildpack is done creating the droplet

dotnsf-20150212 を起動する処理の中身です。Java アプリケーションとしての基板となる Liberty Buildpack をダウンロードし、IBM Java 1.7.1 & App Management Agent & MariaDB JDBC 1.1.8 を続けてビルド(実際にはダウンロード)しています。これらはビルドパック内で定義されている処理です。これで droplet と呼ばれる実行可能なアプリケーションが作成されます。

その後、作成した droplet をアップロードしてアプリケーションインスタンスを起動します。ここでちょっと時間がかかります:
-----> Uploading droplet (116M)

0 of 1 instances running, 1 starting
1 of 1 instances running

App started

OK

実はここまでの段階でアプリケーションとしては利用可能になっています。最後にアプリケーションやサーバーリソースの状態を確認するためのコマンドが実行され、その結果が表示されています:
App dotnsf-20150212 was started using this command `.liberty/initial_startup.rb`


Showing health and status for app dotnsf-20150212 in org (ユーザー名) / spa
ce dev as (ユーザー名)...
OK

requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: dotnsf-20150212.eu-gb.mybluemix.net
package uploaded: Mon Feb 16 01:15:44 +0000 2015

     state     since                    cpu    memory           disk
#0   running   2015-02-16 10:16:46 AM   2.8%   149.4M of 512M   182M of 1G

CPU やメモリ、ディスクリソースの状態と合わせてアプリケーションの状態が最後に表示されています。この例ではサーバーは1インスタンスなので1行だけで表示されていますが、複数インスタンスで起動している場合は複数行の結果になります。



 

このページのトップヘ