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

2015-10-08

PullUp を Cloud Foundry で動かす

「Cloud Foundry 百日行」第75日目、本日のアプリは PullUp 。これは、ある話題に対してコメント、また評価していくといったもので、先日取り上げた Pumpkin にも似たコミュニティツールです。

このアプリは Node.js 製で、Mongo DB を使います。そして、Node.js から MongoDB にアクセスするためのライブラリ Mongoose が内部で使われています。

またこのアプリの仕様としての面白いところは、それ自身のツール内での参加メンバの活動を活性化させるための仕組みです。そもそもコミュニティというのは、参加メンバが積極的に活動することで成り立つものです。このアプリでは、サインアップの条件として、このアプリの改善に貢献し、GitHub のアプリ本家へプルリクエストを出して、ユーザ登録してもらうことで初めてフルに機能を使える、というハードルを設けています。それによって、参加メンバのツール内活動が必然的に活発になる、という仕組みになっています。

基本情報

手順の概要は以下の通りです。

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

1. ソースコードの取得

まずはソースコードを取得します。

~$ git clone https://github.com/larvalabs/pullup
~$ cd pullup
~/pullup$ ls
app.js          components  constants.js     controllers     forever.js    gulpfile.js                  LICENSE  package.json  Procfile.local  README.md  test   vagrant      views
cluster_app.js  config      CONTRIBUTING.md  _Design Assets  Gruntfile.js  hackathon-starter-readme.md  models   Procfile      public          tasks      utils  Vagrantfile

2. アプリのデプロイ

Development Setup の手順を参考にします。

2.1 Mongo DB サービスの作成とバインド

Mongo DB が必要になっているので、その対応をしますが、まずは --no-start でプッシュしておきます。

~/pullup$ cf push pullup --no-start
Creating app pullup in org ueno / space test1 as ueno...
OK

Using route pullup.10.244.0.34.xip.io
Binding pullup.10.244.0.34.xip.io to pullup...
OK

Uploading pullup...
Uploading app files from: /home/ueno/pullup
Uploading 721.3K, 165 files
Done uploading               
OK

Mongo DB サービスを作成します。

~/pullup$ cf create-service 'Mongo DB' 'Default Mongo Plan' mongo-pullup

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

~/pullup$ cf bind-service pullup mongo-pullup

2.2 環境設定

Development Setup で指定されている環境変数を設定します。

~/pullup$ cf set-env pullup GITHUB_CLIENTID 'CLIENTID'
~/pullup$ cf set-env pullup GITHUB_SECRET 'SECRET'

ここでもう一つ。Mongo DB の URL を設定しておく必要があります。

ソースコードでは、 config/secrets.js にて、

~/pullup$ cat config/secrets.js
module.exports = {
  db: process.env.MONGOHQ_URL || 'localhost',

:

とあるように、Mongo DB の URL は、設定されていない場合のデフォルト値が localhost になっています。

このファイルのこの箇所を書き換えてもいいのですが、ここでは、環境変数 MONGOHQ_URL に環境設定することにします。

~/pullup$ cf set-env pullup MONGOHQ_URL 192.168.15.91

では、アプリに対して実行した一連の環境設定を確認しておきましょう。

~/pullup$ cf env pullup
Getting env variables for app pullup in org ueno / space test1 as ueno...
OK

System-Provided:
{
 "VCAP_SERVICES": {
  "Mongo DB": [
   {
    "credentials": {
     "uri": "mongodb://f9e5a2c2-5893-4abc-b2f8-715a0e6a8f0d:password@192.168.15.91:27017/9185e646-4e60-4269-a14a-f594d38ab357"
    },
    "label": "Mongo DB",
    "name": "mongo-pullup",
    "plan": "Default Mongo Plan",
    "tags": [
     "mongodb",
     "document"
    ]
   }
  ]
 }
}

{
 "VCAP_APPLICATION": {
  "application_name": "pullup",
  "application_uris": [
   "pullup.10.244.0.34.xip.io"
  ],
  "application_version": "accada52-d52a-452e-851c-b8f92a037934",
  "limits": {
   "disk": 1024,
   "fds": 16384,
   "mem": 256
  },
  "name": "pullup",
  "space_id": "b4706364-1075-4cb5-82dc-5b8b45571434",
  "space_name": "test1",
  "uris": [
   "pullup.10.244.0.34.xip.io"
  ],
  "users": null,
  "version": "accada52-d52a-452e-851c-b8f92a037934"
 }
}

User-Provided:
GITHUB_CLIENTID: CLIENTID
GITHUB_SECRET: SECRET
MONGOHQ_URL: 192.168.15.91

No running env variables have been set

No staging env variables have been set

Mongo DB の接続情報、そして、先ほど設定した GITHUB_CLIENTID , GITHUB_SECRET , MONGOHQ_URL 等の情報が確認できました。

2.3 アプリのデプロイ

ではアプリをデプロイします。

このアプリは、Node.js を使うので、 Development Setup に指定されている通り、デプロイの際、 node app.js-c オプションによって実行させます。

~/pullup$ cf push pullup -c 'node app.js'
Updating app pullup in org ueno / space test1 as ueno...
OK

:

App started


OK

App pullup was started using this command `node app.js`

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

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: pullup.10.244.0.34.xip.io
last uploaded: Wed Oct 7 06:32:16 UTC 2015
stack: cflinuxfs2
buildpack: Node.js

     state     since                    cpu    memory          disk      details   
#0   running   2015-10-07 03:33:28 PM   0.0%   98.3M of 256M   0 of 1G    

アプリが起動しました。

3. 動作確認

ブラウザからアプリにアクセスします。

右上にある Signup をクリックしてみると、

「本アプリのユーザになるためには、プルリクエストするしかありません」とはねつけられましたね。

本日のところは、プルリクまでは割愛して、その限られた権限でも使えるチャット機能を確認しましょう。

画面上の Chat のリンクをクリック。

画面下の LOGIN WITH GITHUB TO START TALKING をクリックすると、GitHub の OAuth のページに飛び、アプリからの認証連携の許可を求められます。
許可すると、GitHub 認証によってログインでき、チャットできます。

ちなみに、このチャット機能の実体は Gitter です。
https://gitter.im/larvalabs/pullup にアクセスすると、同じ内容が表示されます。

まとめ

今回のアプリは、Node.js 製で、Mongo DB へアクセスするためのライブラリ Mongoose が内部では使われていました。今回は、Mongo DB の URL として、ソースコードのデフォルト値を上書きするために、環境変数 MONGOHQ_URL を設定しました。それをせずとも動的に DB 接続できるコーディングがクラウドでは理想ですが、そこはまた別途の機会とします。

PullUp の基本的な作りを振り返っておきたいと思います。サービス機能としては、 News , Issues , Chat の3つで、それぞれ提供形態が異なります。 News は、任意のコミュニティにおける活動(話題提供、コメント、評価等)を支援する本アプリのメインです。しかしながら、利用するには、PullUp 本家へプルリクエストし、権限付与の登録をしてもらう必要があります。 Issues は、本家の GitHub と連携し、GitHub での Issues における(本アプリ開発に関する)議論と紐付くようになっているようです。 Chat は、本家の Gitter と連携し、Gitter 上でチャットする形態になります。

本家ではプルリクを受けてマージする際、 config/userlist.js に該当の GitHub のアカウントを登録するようですが、ローカルで同じように検証してみると、それだけでは権限付与されませんでした。やはり、本家へのプルリクが必須のようです。それがもし、ローカルコミュニティ内に閉じたプルリク & 登録でフル機能が使えるようになると、そのアプリとその仕組みは各地でローカルに使うことができるようになるのでいいですよね。残念ながら現状は本アプリはそのようにローカルに閉じては使えないので、頑張れる読者は是非改善を検討して本家へプルリク出してみてください!

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