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

2015-09-01

Camaleon CMS を Cloud Foundry で動かす

「Cloud Foundry 百日行」後半戦第1弾。第51日目は、Ruby-on-Rails ベースの CMS Camaleon CMS です。ちょっとしたWebサイトをプライベートで立ち上げたい時などにデプロイすると便利かもしれません。
ただしCloud Foundryの特性上、考慮しなければならない制約があります。それについては補足で後述したいと思います。

基本情報

デプロイ準備から動作確認までの手順は以下の通りです。

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

1. ソースコードの取得

GitHub からソースコードをクローンします。

$ git clone https://github.com/owen2345/camaleon-cms.git
$ cd camaleon-cms
camaleon-cms$ ls
app  app.json  bin  config  config.ru  db  Gemfile  Gemfile.lock  lib  license.txt  public  Rakefile  README.md  test  vendor

2. デプロイ

まず Camaleon CMS 用のデータベースを作成します。
ReadMe の Requirements をみると、 MySQL5 or Sqlite or PostgreSQL と書いてあるので、 今回は PostgreSQL を使って起動したいと思います。
というわけで、まずは PostgreSQL のサービスを作成します。 もしデプロイする bosh-lite 環境に PostgreSQL サービスブローカがない場合、 百日行の「postgresql-cf-service-broker を Cloud Foundry で動かす 」を参考に、事前に準備をしてください。

camaleon-cms$ cf create-service PostgreSQL 'Basic PostgreSQL Plan' came-pg
Creating service instance spwd-pg in org horiu-jn / space horiu-jn as horiu-jn...
OK

次に、デプロイ用のマニフェストを作成します。

camaleon-cms$ vi manifest.yml
applications:
- name: came-100
  memory: 1G
  command: 'RAILS_ENV=production bundle exec rake db:migrate && bundle exec rackup --port $PORT'
  services:
    - came-pg
  • アプリのメモリ量を 256MB として試した結果、立ち上がらなかったため、今回は余裕をみて memory:1G を設定しました。
  • db/seeds.rb を確認すると、何も設定されていないため、command: で指定するデータベースへの操作は db:migrate のみ実行します。
  • services: にバインドするサービス名を記述しておくと、 cf push した際に自動でバインドを実行してくれるため、設定しておきます。

マニフェストが作成できたら、アプリをプッシュします。

camaleon-cms$ cf push
Using manifest file /home/horiu-jn/workspace/apps/camaleon-cms/manifest.yml

Creating app came-100 in org horiu-jn / space 100nichi as horiu-jn...
OK

Using route came-100.10.244.0.34.xip.io
Binding came-100.10.244.0.34.xip.io to came-100...
OK

Uploading came-100...
Uploading app files from: /home/horiu-jn/workspace/apps/camaleon-cms
Uploading 5.3M, 1341 files
Done uploading
OK
Binding service came-pg to app came-100 in org horiu-jn / space 100nichi as horiu-jn...
OK

Starting app came-100 in org horiu-jn / space 100nichi as horiu-jn...

:

0 of 1 instances running, 1 starting
1 of 1 instances running

App started


OK

App came-100 was started using this command `RAILS_ENV=production bundle exec rake db:migrate && bundle exec rackup --port $PORT`

Showing health and status for app came-100 in org horiu-jn / space 100nichi as horiu-jn...
OK

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: came-100.10.244.0.34.xip.io
last uploaded: Thu Aug 20 06:47:26 UTC 2015
stack: cflinuxfs2
buildpack: Ruby

     state     since                    cpu    memory           disk      details
#0   running   2015-08-20 03:49:27 PM   0.0%   172.7M of 256M   0 of 1G

無事成功しました。

3. 動作確認

ブラウザから、払いだされたアプリのURLへアクセスします。

Name にサイト名を入力し Submit ボタンを押すとサイトが作成され、 admin のアカウント情報が表示されます。

Visit Admin Panel Here をクリックすると、ログイン画面が表示されます。
admin のアカウント情報を入力しログインすると、サイト管理用のダッシュボードが表示されます。

左側のメニューから、サイトへの投稿やファイルのアップロード、ユーザ追加等々の操作を行うことが出来ます。
ここではすべての操作を紹介できないため、今回はメインであるサイトへの投稿を行ってみます。

メニューから Content > Post > Add New を選択し、記事作成用のフォーム画面を表示します。
画面表示までに少し時間がかかりましたので、少し辛抱して待ってください。
画面が表示されたら、required となっている情報をすべて記入し、 Create ボタンを押します。

成功すると、 Content > Post > All Items で表示される投稿一覧に、作成した投稿がリストアップされます。

では、実際にこのサイトのページを見てみましょう。 画面の上のほうにあるプルダウンメニューで Visit を選択するとページを表示することが出来ます。

ちゃんと投稿した記事がページに表示されています。

補足

Camaleon CMS では、投稿記事やユーザ情報、設定情報などはデータベースで管理されてます。しかし画像やドキュメントなどアップロードしたファイルは、インスタンス内のファイルシステムで管理されています。そのため cf restart などでアプリを再起動しインスタンスが再作成されると、それらのファイルはすべて消えてしまいます。

[cf restart前]

[cf restart後]

cf restart 後、画像のみが表示されなくなってしまいました。

ファイルを永続的に管理して Camaleon CMS を運用したい場合には、永続化する方法の検討と Camaleon CMS の修正が必要となります。

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



投稿者:NTTソフトウェア株式会社 堀内 純