2015-09-04

WebCollab を Cloud Foundry で動かす

「Cloud Foundry 百日行」第54日目、本日取り上げるアプリは、プロジェクト管理ツール WebCollab です。

この百日行シリーズでは、これまで既にいくつかのプロジェクト管理ツールを取り上げてきました。主なところでは、 Redmine 。また、 KADOS というツールも便利でしたね。
今回の WebCollab の特徴は、手軽に使えるところ。数ヶ月単位の開発プロジェクトで無くても、どこの会社でも、日常大小様々な案件やタスクが進行しています。それらを手軽に管理して見える化したい。そんな時に使えそうなのが WebCollab です。

基本情報

手順は以下の通りです。

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

1. ソースコードの取得

まずはソースコードの取得から。

~$ wget http://sourceforge.net/projects/webcollab/files/webcollab/webcollab-3.43%20%28Harrison%20130%29/webcollab-3.43.tar.gz
~$ tar zxvf webcollab-3.43.tar.gz
~$ cd webcollab-3.43/
~/webcollab-3.43$ ls
admin        calendar.php  css       files.php  icalendar.php  lang             path.php           setup.php       update.php
admin.php    CHANGELOG     database  forum      images         LICENSE          RELEASE_NOTES      taskgroups      usergroups
archive      config        db        forum.php  includes       logout.php       rss                taskgroups.php  usergroups.php
archive.php  contacts      docs      help       index.php      main.php         setup              tasks           users
calendar     contacts.php  files     icalendar  js             path_config.php  setup_handler.php  tasks.php       users.php

2. 事前準備

2.1 PHP拡張モジュール追加

環境要件 に従い、 mbstringPDO の各PHP拡張モジュールの対応を行います。
同じ対応が、過去の百日行記事、例えば 第44日目の Anchor CMS 等で紹介されていますので、適宜参考にしてください。

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

2.2 ファイル書き込み権限設定

INSTALLATION に従い、 config/config.php の書き込み権限を設定します。

~/webcollab-3.43$ ll config/config.php 
-rw-rw-r-- 1 ueno ueno 7627 Feb 17  2015 config/config.php
~/webcollab-3.43$ chmod 666 config/config.php
~/webcollab-3.43$ ll config/config.php 
-rw-rw-rw- 1 ueno ueno 7627 Feb 17  2015 config/config.php

2.3 MySQL サービスの準備

MySQL サービスとバインドするために、いつも通りにまずは --no-start で アプリを push。

~/webcollab-3.43$ cf push webcol --no-start

cf marketplace で使用できるサービスを確認し、

~/webcollab-3.43$ cf marketplace
Getting services from marketplace in org ueno / space test1 as ueno...
OK

service      plans                     description   
Mongo DB     Default Mongo Plan*       A simple mongo implementation   
PostgreSQL   Basic PostgreSQL Plan*    PostgreSQL on shared instance.   
p-mysql      100mb, 1gb                MySQL databases on demand   
p-redis      shared-vm, dedicated-vm   Redis service to provide a key-value store   

:

MySQL サービスを作成。

~/webcollab-3.43$ cf create-service p-mysql 100mb wc-msql

そして、アプリと MySQL サービスをバインド。

~/webcollab-3.43$ cf bind-service webcol wc-msql

3. アプリのデプロイ

サービスとバインドしたアプリを再起動することで、デプロイが開始されます。

~/webcollab-3.43$ cf restart webcol

Starting app webcol in org ueno / space test1 as ueno...
-----> Downloaded app package (756K)
-------> Buildpack version 3.2.1

:

-----> Uploading droplet (18M)

1 of 1 instances running

App started


OK

App webcol was started using this command `$HOME/.bp/bin/start`

Showing health and status for app webcol in org ueno / space test1 as ueno...
OK

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: webcol.10.244.0.34.xip.io
last uploaded: Fri Aug 28 07:20:46 UTC 2015
stack: cflinuxfs2
buildpack: PHP

     state     since                    cpu    memory          disk      details   
#0   running   2015-08-28 04:21:30 PM   1.7%   35.3M of 256M   0 of 1G         

無事、アプリが起動しました。

4. セットアップ

アプリが起動しましたが、 INSTALLATION に従って、まずはインストーラの URL http://webcol.10.244.0.34.xip.io/setup.php にアクセス。

言語の選択に日本語は無いので、英語のままで Submit をクリック。

Do you wish to create a database now? と聞かれているので、Yes をクリック。
すると、DB 登録画面へ。

DB 接続のため、まず環境変数から各情報を取得。

~/webcollab-3.43$ cf env webcol
Getting env variables for app webcol in org ueno / space test1 as ueno...
OK

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

:

そして、登録画面内に下記を投入し、Submit をクリック。

Your database namecf_47617b31_0735_4bef_b3ba_0d6dc1f166a3
Database userk4qzUjdrmMmJKw6V
Database passwordBtBKOxxJjA3R2Hyf
Database host10.244.7.6
Database typemysql

DB 登録は成功したので、Continue to configuration をクリックし、設定画面へ。

ここでは以下を設定し、Submit をクリック。

LanguageJapanese
TimezoneGMT +9000
Use email? (今回は使わないからチェックを外す)。

確認画面が表示。

表示された Warning は本質的なものではないので、Write Data to Config File をクリック。

Success しました。

Continue to next page クリックし、Admin の ID/Passwd 設定画面へ。

適宜入力して Submit

Finish をクリック。

ログイン画面が出るので、Admin で入り、ホーム画面へ。

左の UsersAdd から、一般ユーザを作成。

これでセットアップは全て完了しましたので、次は作成した一般ユーザでログインしてアプリの動作を確認していきます。

5. 動作確認

先ほど作成したユーザアカウントでログイン。

ではまず、プロジェクトを作成してみます。

カレンダー表示できます。

その他、タスクの作成、ファイル共有、フォーラム利用、プロジェクト進捗管理等ができます。確認して使ってみてください。

おまけ: config.php の保存

4. セットアップ で設定した内容は、 config.php に書き込まれます。しかし、Cloud Foundry ではファイルシステムが揮発性で、アプリの再起動でファイルが消えてしまいます。
この事象への対応は、百日行記事の第50日目 Tiny Tiny RSS の最後のおまけで取り上げられています。
同じように config.php をダウンロードしておきましょう。

~/webcollab-3.43$ cp -p config/config.php config/config.php.org
~/webcollab-3.43$ cf files webcol app/htdocs/config/config.php > config/config.php

これで、次回以降アプリを更新するときも設定内容は引き継がれるようにできました。

しかし、クラウドアプリとして望ましいのは、DB 接続情報が環境的に変わっても動的に接続対応する、というものです。
これは config.php を修正することで対応可能と思われます。
余力のある読者は是非チャレンジしてみてください。

まとめ

本日のアプリは基本的には、DB とバインドしてデプロイする、という Cloud Foundry の一般的なデプロイ手順でした。

この WebCollab、プロジェクト管理ツールとしては、シンプルですが、逆に日常でも使いやすそうなアプリでした。このようなシンプルだが実用的なアプリが今後もっと Cloud Foundry 対応していけば、業務もさらにスピーディーに進めていけるようになるかもしれません。

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