オープンソースのPaaSソフトウェア CloudFoundry の技術情報やイベント告知などを掲載します

2015-09-07

KanboardをCloud Foundryで動かす

「Cloud Foundry 百日行」第55日目。 前回 に引き続きプロジェクト管理で利用出来るKanban方式の Kanboard です。

このアプリはこれまで紹介されたプロジェクト管理ツールに比べて機能は限定的ですが、シンプルにタスク管理を行うだけなら十分なケースも多いはずです。
検証を始めてから気がついたのですが、このアプリはCloud Foundryと同様のPaaSであるHeroku対応がされているので簡単にデプロイすることが出来ます。

基本情報

手順は以下の通りです。

  • 1) ソースコードの取得
  • 2) 事前準備
  • 3) アプリのデプロイ
  • 4) 動作確認

1. ソースコードの取得

今回も公式サイトからZIPファイルでダウンロードします。
ちなみに検証した際のバージョンはv1.0.17でした。

$ wget http://kanboard.net/kanboard-latest.zip
$ unzip kanboard-latest.zip
$ cd kanboard
$ ls
app  assets  ChangeLog  config.default.php  data  index.php  jsonrpc.php  kanboard  LICENSE  robots.txt  vendor

2. 事前準備

2.1 PHP拡張モジュールの追加

Installation の要件に従い各PHP拡張モジュールの対応を行います。
しかし、既にSQLiteではアプリの再起動の際にDB情報が失われることが過去の記事でも紹介されていますので、今回はMySQLを利用するように読み替えて実施します。
MySQLの場合はmbstring , gd に加えて pdo_mysqlpdo を利用出来るようにします。

$ mkdir .bp-config
$ vi .bp-config/options.json 
$ cat .bp-config/options.json 
{
    "PHP_EXTENSIONS": ["pdo","pdo_mysql","gd","mbstring"]
}

2.2 MySQL サービスの準備

ここも 前回 と同じ手順なのでサクッと進めて行きましょう。

$ cf push kanboard --no-start
$ cf create-service p-mysql  100mb kandb
$ cf bind-service kanboard kandb
$ cf env kanboard
Getting env variables for app kanboard in org k-nagai / space work as k-nagai...
OK

System-Provided:
{
 "VCAP_SERVICES": {
  "p-mysql": [
   {
    "credentials": {
     "hostname": "10.244.7.6",
     "jdbcUrl": "jdbc:mysql://10.244.7.6:3306/cf_b25edd98_54fe_41d2_bf5e_9883e4925973?user=Xe40DtPu0xNyIPRO\u0026password=u1vFRM49kw4zp1Wo",
     "name": "cf_b25edd98_54fe_41d2_bf5e_9883e4925973",
     "password": "u1vFRM49kw4zp1Wo",
     "port": 3306,
     "uri": "mysql://Xe40DtPu0xNyIPRO:u1vFRM49kw4zp1Wo@10.244.7.6:3306/cf_b25edd98_54fe_41d2_bf5e_9883e4925973?reconnect=true",
     "username": "Xe40DtPu0xNyIPRO"
    },
    "label": "p-mysql",
    "name": "kandb",
    "plan": "100mb",
    "tags": [
     "mysql"
    ]
   }
  ]
 }
}

:

2.3 環境変数の設定

これまでの流れだと、ここで「 config.default.php をリネームしてMySQLの情報を編集」となりそうですが、今回は折角Heroku対応されているのでその機能を利用して進めます。

ここで重要になるのはこれまで使う機会があまり無かった cf env で取得した uri の情報です。
取得した uriDATABASE_URL という環境変数に設定します。

$ cf set-env kanboard DATABASE_URL "mysql://Xe40DtPu0xNyIPRO:u1vFRM49kw4zp1Wo@10.244.7.6:3306/cf_b25edd98_54fe_41d2_bf5e_9883e4925973?reconnect=true"

これで事前準備は完了です。

3. アプリのデプロイ

cf push します。

$ cf push kanboard
:
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: kanboard.10.244.0.34.xip.io
last uploaded: Wed Aug 19 07:16:14 UTC 2015
stack: cflinuxfs2
buildpack: PHP
 
     state     since                    cpu    memory        disk      details   
#0   running   2015-08-19 04:16:33 PM   1.7%   31M of 256M   0 of 1G  

問題なくアプリが起動。

4. 動作確認

最初、 http://kanboard.10.244.0.34.xip.io にアクセスすると少し間を置いてログイン画面が表示されます。
バックグランドでDB初期設定が走るようです。

初期のログインはデフォルトの admin/admin でログインします。

メニューから Settings を選んで Application Settings で言語やタイムゾーンを設定します。

あとはユーザ追加やプロジェクトの作成、タスク管理などいろいろ試して見て下さい。

最後に利用される際の注意点ですが、これまでにも度々出てきていますがこのアプリもファイルの永続化は取られていません。
DBに書き込まれているユーザやタスクの情報は問題ありませんが、添付ファイルはアプリを再起動すると削除されてしまいますので気をつけて下さい。
この辺りの対応が既にされているアプリもありますので、また次の機会にご紹介したいと思います。

おまけ: config.php を作った場合

2.3の手順で config.php を作った場合どうなるかという蛇足情報です。
作成した場合は app/common.php の処理で cf push の際に変数が重複してデプロイに失敗します。
中身を見ていただければ一目瞭然ですが、まず DATABASE_URL を分解して各変数に代入する記述があり、その後にconfig.phpから同じ変数に読み込む設定となっています。なのでどうしても config.php を利用したい場合(そんな方がいるかはわかりませんが・・・)は app/common.php の下記の部分をすべてコメントアウトすればうまくいくはずです。

 if (getenv('DATABASE_URL')) {
 
     $dbopts = parse_url(getenv('DATABASE_URL'));
 
     define('DB_DRIVER', $dbopts['scheme']);
     define('DB_USERNAME', $dbopts["user"]);
     define('DB_PASSWORD', $dbopts["pass"]);
     define('DB_HOSTNAME', $dbopts["host"]);
     define('DB_PORT', isset($dbopts["port"]) ? $dbopts["port"] : null);
     define('DB_NAME', ltrim($dbopts["path"], '/'));
 }

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