「Cloud Foundry 百日行」第56日目、本日取り上げるアプリは、CMS Raneto です。
この百日行シリーズでは、これまでにも既にいくつかの CMS アプリを取り上げてきました。CMS の場合、扱うデータの永続性の有無が、そのアプリの、あるいはそのデプロイ方法の一つの評価ポイントになります。例えば、 WonderCMS は、比較的簡単に web ページを作れる便利ツールでしたが、アプリを再起動すると、作成した項目が全て消えて初期状態に戻りました。 Camaleon CMS は、投稿記事やユーザ情報、設定情報などはデータベースで管理されていましたが、画像やドキュメントなどのアップロードしたファイルは、インスタンス内のファイルシステムで管理されていたため、アプリ再起動により、それらのファイルはすべて消えてしまいました。
他にも、 pimcore 、 AnchorCMS がありましたので、それぞれ比べてみると良いですね。
さて、本日の Raneto ですが、これは、ローカルでファイルとして持つドキュメントをナレッジベースとしてデプロイして使う原始的なタイプの CMS です。アプリはシンプルな作りで、データベースは使いません。しかし、Cloud Foundry にデプロイする場合、そのコンテンツの更新を、「ローカルでファイルを更新」→「更新したファイルを Cloud Foundry へデプロイ」という形で行うことで、ローカルにコンテンツの最新版が残ります。従って、広義の意味での永続性はローカルにて保たれることになります。
では見ていきましょう。
基本情報
手順
デプロイ手順として、まずは、 README にある 標準のインストール手順 (以下)を参考にします。
- Download the latest version of Raneto from the releases page
- Create a new directory where you would like to run the app, and un-zip the package to that location
- Fire up a Terminal, the Node Command Prompt or shell and change directory to the root of the Raneto application (where app.js and config.js are)
- run npm install to install the node dependencies
- To start Raneto, run npm start
- Visit http://localhost:3000 in your web browser
#3〜#5 は Node.js Buildpack にまずは頼ることにしましょう。
そうすると、ソースコード取得後、そのまま push 一発、ということになりそうです。
以下のように進めていきます。
- 1) ソースコードの取得
- 2) アプリのデプロイ
- 3) 動作確認
1. ソースコードの取得
まずはソースコードを取得し、中身を確認します。
~$ mkdir raneto
~$ cd raneto/
~/raneto$ wget https://github.com/gilbitron/Raneto/archive/0.6.0.tar.gz
~/raneto$ tar zxvf 0.6.0.tar.gz
~/raneto$ ls
0.6.0.tar.gz Raneto-0.6.0
~/raneto$ rm 0.6.0.tar.gz
~/raneto$ cd Raneto-0.6.0/
~/raneto/Raneto-0.6.0$ ls
app.js bin changelog.txt config.js content LICENSE package.json public README.md
Node.js のアプリなので、 package.json
が存在しています。
2. アプリのデプロイ
予定通り、そのまま push と行きましょう。
~/raneto/Raneto-0.6.0$ cf push raneto
Creating app raneto in org ueno / space test1 as ueno...
OK
Creating route raneto.10.244.0.34.xip.io...
OK
Binding raneto.10.244.0.34.xip.io to raneto...
OK
Uploading raneto...
Uploading app files from: /home/ueno/raneto/Raneto-0.6.0
Uploading 2.5M, 381 files
Done uploading
OK
Starting app raneto in org ueno / space test1 as ueno...
-----> Downloaded app package (912K)
-------> Buildpack version 1.3.1
Node.js Buildpack v64
:
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: raneto.10.244.0.34.xip.io
last uploaded: Mon Aug 31 07:55:31 UTC 2015
stack: cflinuxfs2
buildpack: Node.js
state since cpu memory disk details
#0 running 2015-08-31 04:55:54 PM 0.0% 58.7M of 256M 0 of 1G
デプロイ成功し、アプリが起動しました。
Node.js Buildpack が自動で選択されていたこともログに出ています。
3. 動作確認
3.1 コンテンツの閲覧
ブラウザからアプリにアクセスします。
デフォルトとして、Raneto 関連のドキュメントがカテゴリ毎に置かれています。
その中の一つのリンク Installing Raneto
をクリックしてみます。
Raneto のインストール手順が表示されました。
トップ画面に出ていた目次は左側へ移りました。
検索機能を確認してみましょう。Search
欄にキーワード “Raneto” を入力して検索してみると、
全体の中から、”Raneto” にヒットしたコンテンツが一覧表示されました。
3.2 コンテンツの追加
では続いて、コンテンツの追加を確認してみましょう。
まず、現状のコンテンツの配置状況を確認するため、ローカルにて、 content
ディレクトリ配下のディレクトリ構成をチェックします。
~/raneto/Raneto-0.6.0$ ll content/
total 36
drwxrwxr-x 7 ueno ueno 4096 Jun 9 2014 ./
drwxrwxr-x 6 ueno ueno 4096 Jun 9 2014 ../
-rw-rw-r-- 1 ueno ueno 824 Jun 9 2014 contributing.md
drwxrwxr-x 2 ueno ueno 4096 Jun 9 2014 install/
drwxrwxr-x 2 ueno ueno 4096 Jun 9 2014 templates/
drwxrwxr-x 2 ueno ueno 4096 Jun 9 2014 tutorials/
drwxrwxr-x 2 ueno ueno 4096 Jun 9 2014 updates/
drwxrwxr-x 2 ueno ueno 4096 Jun 9 2014 usage/
-rwxrwxr-x 1 ueno ueno 1145 Jun 9 2014 what-is-raneto.md*
アプリのトップ画面の各カテゴリが、フォルダとして存在しています。
そのうちの一つ install
の中を確認してみましょう。
~/raneto/Raneto-0.6.0$ ll content/install/
total 20
drwxrwxr-x 2 ueno ueno 4096 Jun 9 2014 ./
drwxrwxr-x 7 ueno ueno 4096 Aug 31 17:02 ../
-rw-rw-r-- 1 ueno ueno 888 Jun 9 2014 installing-raneto.md
-rw-rw-r-- 1 ueno ueno 284 Jun 9 2014 requirements.md
-rw-rw-r-- 1 ueno ueno 2 Jun 9 2014 sort
マークダウンのコンテンツ(*.md)と共に、 sort
というファイルがあります。他のカテゴリ内にも同じ名前のファイルがあるようです。その中をチェックしておきましょう。
~/raneto/Raneto-0.6.0$ cat content/install/sort
1
~/raneto/Raneto-0.6.0$ cat content/usage/sort
2
~/raneto/Raneto-0.6.0$ cat content/tutorials/sort
5
なるほど、画面上のコンテンツの並び順を表しているのですね。
現状の sort
ファイル全てを見ておきましょう。
~/raneto/Raneto-0.6.0$ cat */*/sort
1
4
5
3
2
現在の最高値は 5
になっています。これは、トップ画面の Main Contents
を除いたコンテンツ数と一致しています。
では、新しいカテゴリ Test
を作り、そこに新しいコンテンツ Test
を作りましょう。
~/raneto/Raneto-0.6.0$ mkdir content/test
sort
は 6
とします。
~/raneto/Raneto-0.6.0$ vi content/test/sort
~/raneto/Raneto-0.6.0$ cat content/test/sort
6
Test
コンテンツを作成します。
~/raneto/Raneto-0.6.0$ vi content/test/test.md
~/raneto/Raneto-0.6.0$ cat content/test/test.md
/*
Title: Test
Sort: 1
*/
Test content.
これはテストです。
これでローカルに新しいコンテンツが追加されました。
ではこの新コンテンツが追加されたアプリを再度プッシュしましょう。
~/raneto/Raneto-0.6.0$ cf push raneto
新たにデプロイされたアプリにアクセスしてみると、トップ画面に新カテゴリ Test
が反映されています。
新コンテンツ Test
をクリックしてみましょう。
コンテンツの中身が表示されました。
まとめ
本日のアプリは、データベースを使わないシンプルなナレッジベースの CMS でした。
ローカルに置いたコンテンツをデプロイして反映させるという仕組みになっているため、Cloud Foundry 側にデプロイしたファイルの揮発性は気にすることなく使えます。
グループ内の情報やドキュメントは、マークダウン形式のファイルにして、ローカルに置き、デプロイすればアプリに反映される、という手軽に使える仕組みですね。
デプロイ手順も push 一発。Node.js Buildpack を自動で選択してビルドしてくれました。
手軽にデプロイして、手軽に使う。Cloud Foundry ならではのアプリでした。
今回使用したソフトウェア
- 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) - Raneto (v0.6.0)
https://github.com/gilbitron/Raneto/archive/0.6.0.tar.gz