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

2015-06-24

WonderCMS を Cloud Foundry で動かす

本日の第15回「Cloud Foundry 百日行」は、WonderCMSです。
謳い文句は the smallest CMS in the world ということで、百日行ラインナップの中にもいくつかあるCMSアプリの第一歩としてチャレンジしてみます。
ちなみにCMSとは Content Management System の略で、Webサイトなどのコンテンツの構成要素(テキスト、イメージetc)を管理してくれるソフトウェアの事です。

WonderCMS基本情報

デプロイ

手順

  • 0) 準備
  • 1) アプリの起動
  • 2) 動作確認

0.準備

まずはいつものようにソースコードの取得から。
今回はソースコードがgithubリポジトリ上に無いため公式サイトのZIP形式の物を取得してきましょう。

$ wget http://wondercms.com/download/beta/wondercms-0.6-BETA.zip
$ unzip wondercms-0.6-BETA.zip 
$ cd wondercms
wondercms$ ls
editText.php  files  index.php  js  plugins  themes

1.アプリの起動

さて、公式サイトによればこのアプリは展開→アップロードでセットアップが終了するそうです。smallestを自負するだけのことはあります。
展開はすでに終わってしまっているので早速アップロード、この場合はCloud Foundryへのデプロイをしてみましょう。

wondercms$ cf push wondercms
(一部略)
Creating app wondercms in org ukaji / space default as ukaji...
OK

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

Uploading wondercms...
Uploading app files from: /home/ukaji/workspace/wondercms
Uploading 16.2K, 12 files
Done uploading               
OK

Starting app wondercms in org ukaji / space default as ukaji...
-----> Downloaded app package (12K)
-------> Buildpack version 1.0.2
Use locally cached dependencies where possible
 !     WARNING:        No composer.json found.
       Using index.php to declare PHP applications is considered legacy
       functionality and may lead to unexpected behavior.
       See https://devcenter.heroku.com/categories/php
-----> Setting up runtime environment...
       - PHP 5.5.12
       - Apache 2.4.9
       - Nginx 1.4.6
-----> Installing PHP extensions:
       - opcache (automatic; bundled, using 'ext-opcache.ini')
-----> Installing dependencies...
       Composer version ac497feabaa0d247c441178b7b4aaa4c61b07399 2014-06-10 14:13:12
       Warning: This development build of composer is over 30 days old. It is recommended to update it by running "/app/.heroku/php/bin/composer self-update" to get the latest version.
       Loading composer repositories with package information
       Installing dependencies
       Nothing to install or update
       Generating optimized autoload files
-----> Building runtime environment...
       NOTICE: No Procfile, defaulting to 'web: vendor/bin/heroku-php-apache2'

-----> Uploading droplet (64M)

1 of 1 instances running

App started


OK

App wondercms was started using this command `vendor/bin/heroku-php-apache2`

Showing health and status for app wondercms in org ukaji / space default as ukaji...
OK

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: wondercms.10.244.0.34.xip.io
last uploaded: Mon Jun 22 10:15:27 +0000 2015
stack: lucid64

     state     since                    cpu    memory          disk      details   
#0   running   2015-06-22 07:16:04 PM   0.0%   92.6M of 256M   0 of 1G   

すぐに起動してくれました。

2.動作確認

それでは、動作確認です。
いつものようにブラウザでアクセスをします。

特にエラーが出ることもなく動いています。
最初は特にやることもないので早速右下から Login を押してログインしてみましょう。
デフォルトのPasswordは「admin」です。

ログインをしても一見何が変わったのかという感じなのですが、よくよく見ると上の方に Setting という項目が追加されています。

試しに「PaaS」というページを作るためにこのような状態でNavigationの項目にある click here to refresh を押してみましょう。
すると一通り更新が反映され、新しく作った「PaaS」のページが右上から編集できるようになります。
各ページではコンテンツをHTMLで編集することができます。

Webページの作成ノウハウが無くても比較的簡単にWebページを作れる便利ツール、といったところでしょうか。

おまけ

さて、今回のWonderCMSですが、シンプルなだけあってCloud Foundry上に非常に簡単にデプロイすることができました。
しかし実はこのアプリ、Databaseが不要というシンプルな構造が影響し、このままCloud Foundry上で運用するには気に留めておかなければいけない点があります。

突然ですが、Cloud Foundry上のアプリには「永続性」が存在しません。つまり、アプリは永続的な状態を保持してくれないため、もし再起動がかかった場合などは初期状態に戻ることを意識しておく必要があります。
論より証拠ということで、実際にやってみましょう。
先ほど編集をした状態から、アプリケーションを再起動してみます。

wondercms$ cf restart wondercms

(一部略)

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: wondercms.10.244.0.34.xip.io
last uploaded: Mon Jun 22 23:40:34 +0000 2015
stack: lucid64

     state     since                    cpu    memory          disk      details   
#0   running   2015-06-23 01:16:43 PM   0.0%   92.4M of 256M   0 of 1G

再起動が完了しました。
URLに再びアクセスしてみると・・・

作成した項目などが消えてしまい、初期状態に戻っているのがわかります。

では、Cloud Foundry上で動作する全てのものは永続的な状態を保持できないのか、というと、もちろんそんなことはありません。
普段からCloud Foundryをご利用の方、百日行の記事をお読み頂いている方はすでにお気づきかも知れませんが、「アプリの状態」を保存しておきたい場合には、過去の記事でも何度か触れられている「Service」という機能を使えばOKです。

※参考:現在の環境で利用できるService一覧

wondercms$ cf marketplace
Getting services from marketplace in org ukaji / space default as ukaji...
OK

service      plans                     description   
PostgreSQL   Basic PostgreSQL Plan*    PostgreSQL on shared instance.   
p-mysql      100mb-dev, 1gb-dev        A MySQL service for application development and testing   
p-redis      shared-vm, dedicated-vm   Redis service to provide a key-value store

(環境に登録されているServiceを利用する以外にもUserprovided Serviceを用いるなどの方法も存在します。)

今回のようなCMSを例に挙げるならば、「ページの編集履歴を保存しておきたい」「ユーザの登録情報を保存しておきたい」などは別途用意したServiceに保存しておく、というような形になるでしょう。
そのように設計されたアプリであれば、再起動を行ってもServiceに保存された情報は失われることなく取り出すことが可能となります。

DatabaseをServiceとして利用したCMSアプリに関しては、また後日ご紹介したいと思います。

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