さくらのクラウド「スタートアップスクリプト」機能でconcrete5を自動インストール

みなさんこんにちは。
今回は「さくらのクラウド」のスタートアップスクリプト機能を利用して、オープンソースCMS「concrete5」のセットアップを行ってみたいと思います。

当記事は、「concrete5 Japan Advent Calendar 2014」に参加しております。前日の記事は、yuri.kamimoriさんの記事です。

なお、concrete5 は PortlandLabs および、コンクリートファイブジャパン株式会社の登録商標です。

concrete5とは

concrete5は、オープンソースのCMS(コンテンツマネジメントシステム)です。もともとは商用ソフトウェアであったものが、2008年にオープンソースソフトウェアとして公開されたものです。

サイトの構成要素をドラッグ&ドロップで移動できたり、実際のサイト表示を見たままのイメージでコンテンツの文言を編集できたりと、直感的な操作ができる等の特徴を持ったCMSです。

さくらのクラウド「スタートアップスクリプト」機能について

さくらのクラウドは、さくらインターネットが提供する、いわゆるIaaS型のクラウドサービスです。サーバやネットワークの環境を、ブラウザ上で作成し、管理するための様々な機能を備えています。

また、スタートアップスクリプト機能は、さくらのクラウドにおいてサーバをセットアップし、起動する際に自動実行するシェルスクリプトを設定することができる機能です。

これにより、サーバ環境構築時の定型的な作業を自動化することができます。

当社でWordPress等いくつかのサンプルスクリプトをご用意している他、お客様ご自身で独自のスクリプトを作成、登録いただくことも可能です。

今回は、あらかじめ用意されているWordPress用のスクリプトをもとに、concrete5 用のサンプルスクリプトを作成してみましたので、こちらを登録して、サーバ作成を行ってみたいと思います。

concrete5の自動インストールスクリプト

以下が、今回作成したconcrete5(バージョン5.6.3.2 日本語版)を自動インストールするためのスタートアップスクリプトのサンプルです。

#!/bin/bash

# @sacloud-once

# @sacloud-desc concrete5をインストールします。
# @sacloud-desc サーバ作成後、WebブラウザでサーバのIPアドレスにアクセスしてください。
# @sacloud-desc http://サーバのIPアドレス/
# @sacloud-desc (このスクリプトは、CentOS6.XもしくはScientific Linux6.Xでのみ動作します)

# @sacloud-password required shellarg maxlen=100 admin_password "adminのパスワード"
# @sacloud-text required shellarg maxlen=100 admin_email "adminのメールアドレス"

ADMIN_PASSWORD=@@@admin_password@@@
ADMIN_EMAIL=@@@admin_email@@@

#---------START OF iptables---------#
cat <<'EOT' > /etc/sysconfig/iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-SSH
-A INPUT -p TCP -m state --state NEW ! --syn -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A fail2ban-SSH -j RETURN
COMMIT
EOT
service iptables restart
#---------END OF iptables---------#
#---------START OF LAMP---------#
yum -y install expect httpd-devel mod_ssl php-devel php-pear mysql-server php-mbstring php-xml php-gd php-mysql|| exit 1
service httpd status >/dev/null 2>&1 || service httpd start

for i in {1..5}; do
sleep 1
service httpd status && break
[ "$i" -lt 5 ] || exit 1
done
chkconfig httpd on || exit 1

service mysqld status >/dev/null 2>&1 || service mysqld start
for i in {1..5}; do
sleep 1
service mysqld status && break
[ "$i" -lt 5 ] || exit 1
done
chkconfig mysqld on || exit 1

NEWMYSQLPASSWORD=`mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2`

/usr/bin/mysqladmin -u root password "$NEWMYSQLPASSWORD" || exit 1

cat <<EOT > /root/.my.cnf
[client]
host = localhost
user = root
password = $NEWMYSQLPASSWORD
socket = /var/lib/mysql/mysql.sock
EOT
chmod 600 /root/.my.cnf
#---------END OF LAMP---------#
#---------START OF concrete5---------#
USERNAME="c5_`mkpasswd -l 10 -C 0 -s 0`"
PASSWORD=`mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2`
curl -L http://concrete5-japan.org/index.php/download_file/view/1488/45/ > c5.zip || exit 1
unzip c5.zip
mv concrete5.6.3.2.ja /var/www/$USERNAME
cd /var/www
curl -s -f -L https://raw.githubusercontent.com/concrete5/concrete5/master/cli/install-concrete5.php -O
chmod 700 /var/www/install-concrete5.php

mysql --defaults-file=/root/.my.cnf <<-EOT
CREATE DATABASE IF NOT EXISTS $USERNAME;
GRANT ALL ON $USERNAME.* TO '$USERNAME'@'localhost' IDENTIFIED BY '$PASSWORD';
FLUSH PRIVILEGES;
EOT

cat <<EOT > /etc/httpd/conf.d/$USERNAME.conf
<VirtualHost *:80>
DocumentRoot /var/www/$USERNAME
AllowEncodedSlashes On
<Directory />
     Options FollowSymLinks
     AllowOverride None
</Directory>
<Directory "/var/www/$USERNAME">
        Options FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>
</VirtualHost>
EOT
service httpd reload || exit 1

chown -R apache:apache /var/www || exit 1

./install-concrete5.php --db-server=localhost --db-username=$USERNAME --db-password=$PASSWORD --db-database=$USERNAME --starting-point=blank --admin-password=$ADMIN_PASSWORD --admin-email=$ADMIN_EMAIL --target=./$USERNAME --site=concrete5sample --core=./$USERNAME/concrete --reinstall=no

ここではシェルスクリプトの内容についての詳細な説明は割愛させていただきますが、おおよそ、以下のような流れ処理は行われています。

1.iptablesの設定、データベース(MySQL)、Webサーバ(Apache)のセットアップ
2.concrete5のダウンロード
3.concrete5のセットアップスクリプトの実行

スタートアップスクリプトを登録する

それでは、上記スタートアップスクリプトを「さくらのクラウド」のコントロールパネルに登録してみましょう。

なお、当記事では、さくらのクラウドへのアカウント登録等の準備はすでに行っていただいていることを前提としております。

もし登録がまだの場合は、「さくらのクラウドに利用登録しよう – 「楽しいさくらのクラウド」(10)」等をご参照いただければと思います。

まず、クラウドコントロールパネルの右上のアカウントをクリックし、「設定」を選択します。

その後、画面左のメニューより「スクリプト」をクリックします。

次に、「追加」をクリック。

作成するスクリプトの名前を設定し、その後、先ほどのスクリプトをコピー&ペーストします。タグ、アイコンは任意設定項目となります。今回は特に指定は不要です。

最後に「作成」ボタンを押し、確認画面で「作成」ボタンを押すことにより、登録が完了となります。

スタートアップスクリプトを使用してサーバを作成する

それでは、先ほど登録したスクリプトを使用して、サーバを作成してみましょう。

アーカイブ選択ではCentOS 6.6を選択

スタートアップスクリプトの項目については、先ほど作成したスクリプトを選択してください。

また、その後、concrete5の管理者アカウントであるadminのパスワードとメールアドレスを入力してください。

最低限必要な設定項目は、以上になります。その他の設定項目については、必要に応じて適宜設定を行ってください。

その後、「作成」をクリックすると、サーバが作成されます。(数分かかります)

サーバの作成が完了したら、サーバ一覧画面より作成したサーバのIPアドレスを確認します。

そして、確認したIPアドレスにブラウザからアクセスすると、concrete5の画面が表示され、concrete5がインストールできていることが確認できます。

以上が、さくらのクラウド「スタートアップスクリプト」機能でconcrete5を自動インストールする、ひととおりの手順となります。

補足

実際にconcrete5を使用したサイトを本格的に運営する場合は、サーバの設定等について、もっと詳細な作業が必要となりますので、今回ご紹介したスクリプトは、あくまで簡易的な環境、例えば勉強会の時に一時的にちょっとしたconcrete5の環境が欲しい場合等に、ご利用いただければと思います。

その際には、さくらのクラウドのパケットフィルタ機能も合わせてご利用いただければ、自分や関係者のIPアドレス以外からのアクセスを制限することも可能です。

なお、concrete5の現在の最新バージョンは5.7.2なのですが、うまくバージョン5.7.2で動作するスクリプトを作ることができなかったため、今回は安定版であるバージョン5.6.3.2でのご紹介となります。ごめんなさい。。

参考リンク

最後に

さくらのクラウドの「スタートアップスクリプト機能」を使用することにより、サーバとソフトウェアのセットアップを非常に簡単に行うことができる、ということがご理解いただけたでしょうか。

さて、「concrete5 Japan Advent Calendar 2014」の明日の記事のご担当はTaku Fujitaさんです。「concrete5 Japan Advent Calendar 2014」には、concrete5に関する様々な新鮮なネタがアップされていますので、ぜひチェックしてみてくださいね!