「Cloud Foundry 百日行」第33日目は,PHP 製の BBS アプリ Simple Machines Forum です。 AlternativeTo で見ると,同種の OSS の中では比較的人気が高いもののようです。開発も活発に継続しているようで,最新安定版が今年(2015年)の4月に出ています。
基本情報
-
ソースコード
http://download.simplemachines.org/
SCM で管理されたコードが見つからなかったので,ここからダウンロードした tar.bz2 を使いました。今回使用したバージョンは最新安定版の 2.0.10 です。
手順の概要は以下の通りです。
- 1) ソースコードの取得・展開
- 2) PHP 拡張の設定
- 3) データベース・サービスの作成・バインドとアプリのプッシュ
- 4) インストール・ウィザード
- 5) 動作確認
- 6) 初期設定の保存&動作確認
1. ソースコードの取得・展開
$ wget http://download.simplemachines.org/index.php/smf_2-0-10_install.tar.bz2
$ mkdir smf
$ cd smf
$ tar xjf ../smf_2-0-10_install.tar.bz2
落としてきた tarball は,展開すると今居るディレクトリーにファイルが展開されるので要注意です。あらかじめ空のディレクトリーを作り,そこに移動してから展開するほうが良いと思います。
2. PHP 拡張の設定
http://wiki.simplemachines.org/smf/SMF2.0:Requirements_and_recommendations を参考に,必要な PHP 拡張を .bp-config/options.json に記していきます。この作業については,以前 別の PHP アプリ の記事でも書いたので,詳細はそちらをご覧ください。
今回の options.json は,けっきょく以下のようになりました。
$ cat .bp-config/options.json
{
"PHP_EXTENSIONS": ["mysql", "mysqli", "gd", "mbstring"]
}
データベースとして MySQL を使うのでそれ関係の拡張を追加し,上記のドキュメントに GD が必要と書かれていたのでそれも追加,さらに日本語の入力にたぶん必要だろうということで Multibyte String の拡張も追加しました。
3. データベース・サービスの作成・バインドとアプリのプッシュ
いよいよ Cloud Foundry 上の操作に入っていきます。
まずはデータベース・サービスの作成です。 この文書 によると,本アプリは MySQL, PostgreSQL, SQLite に対応しているということですが,PHP と組み合わせるなら安定の MySQL だろうということで MySQL にします。
$ cf create-service p-mysql 100mb my4smf
Creating service instance my4smf in org nota-ja / space 100 as nota-ja...
OK
次に,アプリを停止状態で Cloud Foundry にプッシュします。
$ cf push smf --no-start
Creating app smf in org nota-ja / space 100 as nota-ja...
OK
..
Done uploading
OK
アプリと MySQL サービスをバインドします。
$ cf bind-service smf my4smf
Binding service my4smf to app smf in org nota-ja / space 100 as nota-ja...
OK
TIP: Use 'cf restage smf' to ensure your env variable changes take effect
アプリを起動すると,ステージングが行われてアプリが起動します。
$ cf start smf
Starting app smf in org nota-ja / space 100 as nota-ja...
..
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: smf.10.244.0.34.xip.io
last uploaded: Thu Jul 16 12:01:44 UTC 2015
stack: cflinuxfs2
buildpack: PHP
state since cpu memory disk details
#0 running 2015-07-16 09:02:34 PM 1.5% 31.8M of 256M 0 of 1G
無事起動しました。
4. インストール・ウィザード
PHP のアプリではおなじみのインストール・ウィザードです。
以下,全て説明するのは面倒なので,キーになる画面だけ解説します。
【Step 3】で,データベース接続情報の入力を求められますので,先ほどバインドしたサービスの情報を cf env
で取得して入力します。
$ cf env smf
Getting env variables for app smf in org nota-ja / space 100 as nota-ja...
OK
System-Provided:
{
"VCAP_SERVICES": {
"p-mysql": [
{
"credentials": {
"hostname": "10.244.7.6",
"jdbcUrl": "jdbc:mysql://10.244.7.6:3306/cf_06aed91b_25f5_46b8_a13b_5b683325cec9?user=8kV9FdQJsJ6pX60R\u0026password=woXGzdBNGf7mQGhg",
"name": "cf_06aed91b_25f5_46b8_a13b_5b683325cec9",
"password": "woXGzdBNGf7mQGhg",
"port": 3306,
"uri": "mysql://8kV9FdQJsJ6pX60R:woXGzdBNGf7mQGhg@10.244.7.6:3306/cf_06aed91b_25f5_46b8_a13b_5b683325cec9?reconnect=true",
"username": "8kV9FdQJsJ6pX60R"
},
"label": "p-mysql",
"name": "my4smf",
"plan": "100mb",
"tags": [
"mysql"
]
}
]
}
}
..
【Step 4】の【Forum URL】には,Cloud Foundry 上にデプロイしたアプリのURLを入力してください。
【Step 6】でもデータベース・パスワードの入力を求められますが,【Step 3】と同じ値を入れればOKです。
5. 動作確認
インストール・ウィザードの設定が正常に終わると,そこで入力した admin account でログインした状態でトップ画面に遷移します。
【General Discussion】をクリックすると,最初の投稿として Welcome メッセージが投稿されている状態になっています。
日本語も問題ありません。
6. 初期設定の保存&動作確認
単に動かしてみるだけならここまでで良いのですが,使い続けることを考えて, SugarCRM の時 と同様,初期設定ファイルをダウンロードして保存し,プッシュ時に一緒にアップロードすることで設定の再初期化を避けることを試みます。
今回は app/htdocs/Settings.php
に設定が保存されているようなので,これをダウンロードして保存します。
$ cf files smf app/htdocs/Settings.php
内容をファイルに保存して差分を取ると,先ほど入力した値が見えるので,これで間違いないようです。
$ git diff
diff --git a/Settings.php b/Settings.php
index 7a8ae98..2bc786c 100644
--- a/Settings.php
+++ b/Settings.php
@@ -18,18 +18,18 @@ $mtitle = 'Maintenance Mode'; # Title for the Maintenance Mode message.
$mmessage = 'Okay faithful users...we\'re attempting to restore an older backup of the database...news will be
########## Forum Info ##########
-$mbname = 'My Community'; # The name of your forum.
+$mbname = 'Cloud Foundry'; # The name of your forum.
$language = 'english'; # The default language file set for the forum.
-$boardurl = 'http://127.0.0.1/smf'; # URL to your forum's folder. (without the trailing /!)
-$webmaster_email = 'noreply@myserver.com'; # Email address to send emails from. (like noreply@yourd
-$cookiename = 'SMFCookie11'; # Name of the cookie to set for authentication.
+$boardurl = 'http://smf.10.244.0.34.xip.io'; # URL to your forum's folder. (without the trailing /!)
+$webmaster_email = '3bgmhc@ahk.jp'; # Email address to send emails from. (like noreply@yourdomain.co
+$cookiename = 'SMFCookie67'; # Name of the cookie to set for authentication.
########## Database Info ##########
$db_type = 'mysql';
-$db_server = 'localhost';
-$db_name = 'smf';
-$db_user = 'root';
-$db_passwd = '';
+$db_server = '10.244.7.6';
+$db_name = 'cf_06aed91b_25f5_46b8_a13b_5b683325cec9';
+$db_user = '8kV9FdQJsJ6pX60R';
+$db_passwd = 'woXGzdBNGf7mQGhg';
$ssi_db_user = '';
$ssi_db_passwd = '';
$db_prefix = 'smf_';
@@ -38,18 +38,14 @@ $db_error_send = 1;
########## Directories/Files ##########
# Note: These directories do not have to be changed unless you move things.
-$boarddir = dirname(__FILE__); # The absolute path to the forum's folder. (not just '.'!)
-$sourcedir = dirname(__FILE__) . '/Sources'; # Path to the Sources directory.
-$cachedir = dirname(__FILE__) . '/cache'; # Path to the cache directory.
+$boarddir = '/home/vcap/app/htdocs'; # The absolute path to the forum's folder. (not just '.'!)
+$sourcedir = '/home/vcap/app/htdocs/Sources'; # Path to the Sources directory.
+$cachedir = '/home/vcap/app/htdocs/cache'; # Path to the cache directory.
########## Error-Catching ##########
# Note: You shouldn't touch these settings.
$db_last_error = 0;
-if (file_exists(dirname(__FILE__) . '/install.php'))
-{
- header('Location: http' . (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 's' : ''
-}
# Make sure the paths are correct... at least try to fix them.
if (!file_exists($boarddir) && file_exists(dirname(__FILE__) . '/agreement.txt'))
@@ -59,4 +55,5 @@ if (!file_exists($sourcedir) && file_exists($boarddir . '/Sources'))
if (!file_exists($cachedir) && file_exists($boarddir . '/cache'))
$cachedir = $boarddir . '/cache';
-?>
\ No newline at end of file
+$db_character_set = 'utf8';
+?>
さらに, install.php
を削除します。
$ git rm install.php
rm 'install.php'
これを削除しないと,再起動後にアプリにアクセスした後,警告付きで再初期化しようとしたり,トップ画面に警告が表示されたりすることがあります。
この状態でアプリを更新します。
$ cf push smf
Updating app smf in org nota-ja / space 100 as nota-ja...
OK
..
state since cpu memory disk details
#0 running 2015-07-17 10:25:43 PM 1.6% 31.7M of 256M 0 of 1G
再ステージング・再起動が行われますが,ブラウザーのトップ画面をリロードしても,インストール・ウィザードは実行されませんでした。
今回使用したソフトウェア
- cf-release (v211)
https://github.com/cloudfoundry/cf-release/tree/v211
( https://github.com/cloudfoundry/cf-release/tree/2121dc6405e0f036efa4dba963f7f49b07e76ffa ) - bosh-lite
https://github.com/cloudfoundry/bosh-lite/tree/552dc6869600c5350eb7ffb4fb9c9c5e79e3889d - cf-mysql-release (v20)
https://github.com/cloudfoundry/cf-mysql-release/tree/v20
(https://github.com/cloudfoundry/cf-mysql-release/tree/8f7f6916b75a2e01332cc91df8c285dabe698703) - CF CLI (v6.12.0-8c65bbd-2015-06-30T00:10:31+00:00)
https://github.com/cloudfoundry/cli/tree/v6.12.0 - Simple Machines Forum v2.0.10
http://download.simplemachines.org/index.php/smf_2-0-10_install.tar.bz2