「Cloud Foundry 百日行」第98日目は、RailsベースのWeb会議システム、Mconf-Webです。
Mconf-Webは、会議ごとに参加するユーザ間での情報共有やビデオ会議が行えるアプリです。
ビデオ会議の機能については、残念ながら、今回の検証時間内で動かすことができませんでしたが、会議自体の管理や会議毎の情報共有をする目的で利用する場合、便利だと思います。
基本情報
-
公式サイト
http://mconf.org/
デプロイ準備から動作確認までの手順は以下の通りです。
- 1) ソースコードの取得
- 2) サービスの作成
- 3) ファイルの修正
- 4) 設定ファイルの準備
- 5) デプロイ
- 6) 動作確認
- 7) まとめ
1. ソースコードの取得
Mconf-Webのソースを、GitHubから取得します。
最新版はv2.0.0なので、チェックアウトします。
$ git clone https://github.com/mconf/mconf-web.git
$ cd mconf-web
mconf-web$ git checkout v2.0.0 -b mc-v2
Switched to a new branch 'mc-v2'
mconf-web$ ls -a
. Cheffile cookbooks-local Gemfile.lock LICENSE .rails_footnotes .ruby-version tmp
.. Cheffile.lock db .git log Rakefile .rvmrc .travis.yml
app config doc .gitignore private README.rdoc script Vagrantfile
bin config.ru Gemfile lib public .rspec spec vendor
2. サービスの作成
Mconf-WebはMySQL
とRedis
を使用するため、作成しておきます。
mconf-web$ cf create-service p-mysql 100mb mw-mysql
:
OK
mconf-web$ cf create-service p-redis shared-vm mw-redis
:
OK
mconf-web$ cf services
:
name service plan bound apps last operation
mw-mysql p-mysql 100mb create succeeded
mw-redis p-redis shared-vm create succeeded
後ほど、Redisの接続設定を取得するため、no-start
でcf push
した本アプリに作成したRedisサービスをバインドしておきます。
MySQLについては、Cloud Foundryのauto-reconfiguration
機能で自動的に接続設定されるため、この操作は不要です。
mconf-web$ cf push --no-start mconf-100
:
Uploading 3.3M, 1708 files
Done uploading
OK
mconf-web$ cf bind-service mconf-100 mw-redis
:
OK
3. ファイルの修正
3-1. Gemfileファイルの修正
RailsアプリをCloud Foundryで動かす場合、画面が予期したスタイルにならない等などの不具合を解消するため、Gemfile
にrails_12factor
を追加します。
mconf-web$ git diff --no-prefix Gemfile
diff --git Gemfile Gemfile
index c828719..9495583 100644
--- Gemfile
+++ Gemfile
@@ -100,6 +100,9 @@ gem "logstash-event"
gem 'fineuploader-rails', git: 'https://github.com/mconf/fineuploader-rails.git'
gem 'filesize'
+# for Cloud Foundry
+gem "rails_12factor"
+
#
# TODO: Gems to review if we can remove/update
#
3-2. Gemfile.lockファイルの生成
修正したGemfile
から、Gemfile.lock
を再生成します。
.ruby-version
で2.2.0
が指定されているので、予め環境にインストールしておいて下さい。
mconf-web$ bundle install --path vendor/bundle
mconf-web$ git diff --no-prefix Gemfile.lock
diff --git Gemfile.lock Gemfile.lock
index cf80c96..99952ac 100644
--- Gemfile.lock
+++ Gemfile.lock
@@ -397,8 +397,13 @@ GEM
sprockets-rails (~> 2.0)
rails-footnotes (4.0.2)
rails (>= 3.2)
+ rails_12factor (0.0.3)
+ rails_serve_static_assets
+ rails_stdout_logging
rails_autolink (1.1.6)
rails (> 3.1)
+ rails_serve_static_assets (0.0.4)
+ rails_stdout_logging (0.0.4)
railties (4.1.11)
actionpack (= 4.1.11)
activesupport (= 4.1.11)
@@ -622,6 +627,7 @@ DEPENDENCIES
rack (~> 1.5.4)
rails (~> 4.1.11)
rails-footnotes
+ rails_12factor
rails_autolink (~> 1.1.0)
rake
resque
@@ -658,3 +664,6 @@ DEPENDENCIES
yui-compressor
zip-zip
zonebie
+
+BUNDLED WITH
+ 1.10.6
副産物のvendor/bundle
配下のファイルは、アプリのデプロイには不要ですので、削除するか、第89日目でも記述されているように.cfignore
でプッシュ対象から除外して下さい。
4. 設定ファイルの準備
デプロイに必要な各種設定ファイルの作成を行っていきます。
4-1. setup_conf.ymlの設定
Mconf-Web用の設定ファイル setup_conf.yml
を作成します。
ベースは、Mconf-WebのDeploymentマニュアルに従って、用意されているsetup_conf.yml.example
をコピーして作成します。
mconf-web$ cp config/setup_conf.yml.example config/setup_conf.yml
次に、RedisのCredential情報を設定します。
cf env
で、RedisのCredential情報を確認します。
mconf-web$ cf env mconf-100
:
System-Provided:
{
"VCAP_SERVICES": {
"p-redis": [
{
"credentials": {
"host": "10.244.3.46",
"password": "1e03a94f-5bb1-42cd-9bd4-ce289b6f6dea",
"port": 50120
},
"label": "p-redis",
"name": "mw-redis",
"plan": "shared-vm",
"tags": [
"pivotal",
"redis"
]
}
]
}
}
config/setup_conf.yml
に、取得したCredential情報を設定します。
mconf-web$ git diff --no-prefix config/setup_conf.yml
diff --git config/setup_conf.yml config/setup_conf.yml
index 4ab5da0..6fba9b6 100644
--- config/setup_conf.yml
+++ config/setup_conf.yml
@@ -47,11 +47,11 @@ default:
# If you're running redis on the same server and without a password, you
# can leave this block commented
- # redis:
- # host: 'localhost'
- # port: '6379'
- # db: 0
- # password: '1234567890'
+ redis:
+ host: '10.244.3.46'
+ port: '50120'
+ db: 0
+ password: '1e03a94f-5bb1-42cd-9bd4-ce289b6f6dea'
# Configurations for each environment
# You can find below the sections for each environment available.
4-2. Aptfileファイルの作成
Mconf-WebのDeploymentマニュアルに記述されているaptパッケージの中で、RootFSに入っていないと思われるものから、入れる必要があるパッケージをピックアップしてデプロイ時にインストールするようにします。
インストールは、heroku-buildpack-aptを使って行います。
インストールするパッケージは、本アプリのルートディレクトリにAptfile
ファイルを作成して定義します。
mconf-web$ vi Aptfile
aspell-es
aspell-en
nfs-common
libreadline-dev
libffi-dev
openjdk-7-jre
libapache2-mod-xsendfile
4-3. .buildpacksファイルの作成
複数のBuildPackを指定してデプロイをする必要があるため、heroku-buildpack-multiを使ってデプロイを行います。
使用するBuildPackは、アプリのルートディレクトリに.buildpacks
ファイルを作成して定義します。
ruby-buildpack
のバージョンは、今回の検証環境として使用しているcf-release v211
のadmin buildpack
と同じものを指定しています。
mconf-web$ vi .buildpacks
https://github.com/ddollar/heroku-buildpack-apt.git
https://github.com/cloudfoundry/ruby-buildpack.git#v1.6.7
4-4. manifes.tymlファイルの作成
デプロイ用のマニフェストを作成します。
mconf-web$ vi manifest.yml
applications:
- name: mconf-100
memory: 1G
buildpack: https://github.com/ddollar/heroku-buildpack-multi.git
command: 'bundle exec rake db:migrate && bundle exec rake db:seed && bundle exec rackup --port $PORT'
domain: 192.168.15.91.xip.io
timeout: 180
services:
- mw-mysql
- mw-redis
env:
PATH: '$PATH:/tmp/staged/app/.apt/usr/lib/jvm/java-7-openjdk-amd64/bin'
設定について、特徴的な箇所について記述します。
* memory: デプロイ直後でメモリがデフォルトの256MBでギリギリでしたので、念のため1Gとしました。
* buildpack: heroku-buildpack-multi
を指定します。
* timeout: 起動に若干時間がかかるため、Max値の180秒を指定しました。
* env: Aptfileで指定したjava-7
の展開先が、heroku-buildpack-apt
の想定箇所と異なるため、手動で指定します。
5. デプロイ
デプロイ準備が完了したら、cf push
します。
mconf-web$ cf push
:
OK
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: mconf-100.192.168.15.91.xip.io
last uploaded: Wed Nov 11 10:23:21 UTC 2015
stack: cflinuxfs2
buildpack: https://github.com/ddollar/heroku-buildpack-multi.git
state since cpu memory disk details
#0 running 2015-11-11 07:34:33 PM 0.0% 271.8M of 1G 0 of 1G
無事、デプロイは成功しました。
6. 動作確認
ブラウザから払いだされたアプリのURLへアクセスすると、トップページが表示されます。
初期ユーザは admin
/admin
なのでSign in to your account
のほうに入力してログインすると、ホーム画面が表示されます。
まずは、上段にあるManage
をクリックし、Site Management
ページからMconf-Webの設定を行ってみます。
各ユーザからの会議への参加申し込み・承認等ではメール通知が行われるため、SMTPサーバ等の設定が必要です。ただ、今回はGmailのアカウントを登録してみましたが、上手くメールが配信出来ませんでした。
次に、Spaceを作っていきます。Mconf-Webでは、各会議(Conference)はSpace
という単位で管理します。
ホーム画面の右側にあるCreate a new space
ボタンをクリックし、Spaceを作成します。
Space作成用のフォームに会議名や説明を入力し、Create
ボタンをクリックすると、Spaceが作成されます。
今度は、新しくユーザを作成してみます。ログアウトしてトップ画面に戻り、Create a new account
からユーザを作成すると、ホーム画面が表示されます。
自分で会議(Space)を新規作成することもできますが、公開されている会議があれば、へ参加申し込み(Join this space
)を出すことができます。
各会議のページでは、コメント共有やビデオ会議(上手く起動しませんでしたが…)などが行えます。
コメントの共有は、Wall
からメッセージを登録します。登録されたメッセージは、参加メンバーのホームにも表示されます。
ビデオ会議は、Webconference
のStart
ボタンを押すと開催できるはずですが、今回はエラーとなってしましました。
7. まとめ
公式サイトやGithubの説明をみると、ビデオ会議を行うには Mconf-Live
かBigBlueButton
サーバが必要なようです。
今回、Docker Hubに登録されているBigBlueButtonで立ち上げ、以下のようにSite Management
ページから設定しましたが、残念ながら上手く接続できない状態でタイムアップとなってしまいました…
今後、もう少し検証しよい結果がでましたら、本ページのほうを更新したいと思います。
もしも何か知見をお持ちの方は、 Twitter で @horiu_jnにmentionを飛ばして頂ければと思います。
今回使用したソフトウェア
- 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 CLI (v6.12.0-8c65bbd-2015-06-30T00:10:31+00:00)
https://github.com/cloudfoundry/cli/tree/v6.12.0 (https://github.com/cloudfoundry/cli/tree/8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48) - heroku-buildpack-multi
https://github.com/ddollar/heroku-buildpack-multi/tree/c41ef671cc9c8ff7d5cc7ad412654fbf9cffbce5 - ruby-buildpack (v1.6.7)
https://github.com/cloudfoundry/ruby-buildpack/tree/v1.6.7
(https://github.com/cloudfoundry/ruby-buildpack/tree/9da4b449086abde328f29ed27767211a64aa11eb) - heroku-buildpack-apt
https://github.com/ddollar/heroku-buildpack-apt/tree/7954acd0aa932201377187402d8a0794f535c738 - cf-mysql-release(v20)
https://github.com/cloudfoundry/cf-mysql-release/tree/v20
(https://github.com/cloudfoundry/cf-mysql-release/tree/8f7f6916b75a2e01332cc91df8c285dabe698703) - cf-redis-release
https://github.com/pivotal-cf/cf-redis-release/tree/15379462d9bd461ce6a0d6a38ab665258f28c301 - Mconf-Web(v2.0.0)
https://github.com/mconf/mconf-web/tree/v2.0.0
(https://github.com/mconf/mconf-web/tree/f1ca08c4c0ee4e79695bfc30ce753394ff9f1bfc)
投稿者:NTTソフトウェア株式会社 堀内 純