「KUSANAGI for さくらのクラウド」でconcrete5を簡単に利用できるスタートアップスクリプトの紹介

はじめに

はじめまして、株式会社アーシタンの遠藤進悟と申します。
今回は、「KUSANAGI for さくらのクラウド」の環境にスタートアップスクリプトを利用してconcrete5のバージョン7をインストールする方法をご紹介します。

concrete5とは

concrete5は直感的にWebサイトを制作することができるオープンソースのCMSです。編集したいページを見ながらドラッグ&ドロップでページ内の要素を移動や追加することができたり、コンテンツの時限設定や権限・承認フローの設定を細かく行うことができたりと、企業がWebサイトを運用する上で便利な機能を標準で搭載しているのが特長です。

開発はPortlandLabsで行われており、日本ではコンクリートファイブジャパン株式会社がサポートを行っています。また、コンクリートファイブジャパン株式会社にはパートナー制度があり、concrete5での制作を行っている企業・個人が登録しています。このような窓口が整備されているのもconcrete5の特長の一つです。

「KUSANAGI for さくらのクラウド」とは

高速WordPress実行環境の「KUSANAGI」をさくらのクラウドで利用することができるアーカイブです。KUSANAGIを利用することで、「CentOS7・Nginx・PHP7・MariaDB」の環境を簡単に構築することができます。
WordPressの実行環境ということですが、設定ファイルを反映させれば他のソフトウェアも動かすことができるため、さくらのクラウドのスタートアップスクリプトを利用することで、concrete5も簡単に動かすことができます。

スクリプトのソース

以下のコードが、concrete5をKUSANAGIで利用することができるスクリプトです。

#!/bin/bash
  
# @sacloud-once
  
# @sacloud-desc concrete5をインストールします。
# @sacloud-desc サーバ作成後、ドメインの設定を行いアクセスしてください
# @sacloud-desc http://サイトのドメイン/
# @sacloud-desc (このスクリプトは、KUSANAGIでのみ動作します)

# @sacloud-password required shellarg maxlen=100 kusanagi_password "kusanagiのパスワード"
# @sacloud-text required shellarg maxlen=100 site_domain "サイトのドメイン"
# @sacloud-text required shellarg maxlen=100 site_name "サイトの名前"
# @sacloud-password required shellarg maxlen=100 admin_password "adminのパスワード"
# @sacloud-text required shellarg maxlen=100 admin_email "adminのメールアドレス"

TERM=xterm

KUSANAGI_PASSWORD=@@@kusanagi_password@@@

SITE_DOMAIN=@@@site_domain@@@
SITE_NAME=@@@site_name@@@
ADMIN_PASSWORD=@@@admin_password@@@
ADMIN_EMAIL=@@@admin_email@@@

#---------START OF firewall---------#
systemctl start firewalld.service
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
systemctl restart firewalld.service
#---------END OF firewall---------#

#---------START OF KUSANAGI---------#
yum -y --enablerepo=remi,remi-php56 update
yum -y --enablerepo=remi install expect || exit 1

expect -c "
spawn passwd kusanagi
expect \"New password:\"
send \"${KUSANAGI_PASSWORD}\n\"
expect \"Retype new password:\"
send \"${KUSANAGI_PASSWORD}\n\"
expect \"passwd: all authentication tokens updated successfully.\"
exit 0
"

kusanagi nginx
kusanagi php7

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

MYSQLROOTPASSWORD=`mkpasswd -l 32 -d 9 -c 9 -C 9 -s 0 -2`
/usr/bin/mysqladmin --defaults-file=/root/.my.cnf password "$MYSQLROOTPASSWORD" || exit 1

cat < /root/.my.cnf
[mysqladmin]
host = localhost
user = root
password = $MYSQLROOTPASSWORD
[client]
host = localhost
user = root
password = $MYSQLROOTPASSWORD
EOT
chmod 600 /root/.my.cnf

kusanagi configure
#---------END OF KUSANAGI---------#

#---------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`
wget http://concrete5-japan.org/index.php/download_file/view/2080/45/ -O concrete5.zip
unzip concrete5.zip
mkdir /home/kusanagi/$USERNAME
mv concrete5.7.5.7 /home/kusanagi/$USERNAME/web

chmod 755 /home/kusanagi/$USERNAME/web/concrete/bin/concrete5
  
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 < /etc/nginx/conf.d/$USERNAME.conf
server {
	listen		80;
	server_name	$SITE_DOMAIN;
	access_log  	/home/kusanagi/$USERNAME/access.log main;
	error_log   	/home/kusanagi/$USERNAME/error.log warn;
	root		/home/kusanagi/$USERNAME/web;
	index		index.php index.html;
	charset 	UTF-8;
	location / {
 		if (-f \$request_filename) {
			expires 30d;
			break;
		}
		if (!-e \$request_filename) {
			rewrite ^(.+)$ /index.php/\$1 last;
		}
		error_page 404 @fallback;
	}
	location @fallback {
		return 301 /;
	}
	location ~ ^(.+\.php)(.*)$ {
		include			fastcgi_params;
		fastcgi_index		index.php;
		fastcgi_pass		127.0.0.1:9000;
		fastcgi_split_path_info	^(.+.php)(/.+)$;
		fastcgi_send_timeout	300;
		fastcgi_read_timeout	300;
		fastcgi_connect_timeout	300;	
		fastcgi_buffers		256 128k;
		fastcgi_buffer_size	128k;
		fastcgi_intercept_errors on;
		fastcgi_param	SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
		fastcgi_param	PATH_INFO \$fastcgi_path_info;
	}
}
EOT

systemctl restart nginx.service || exit 1

cd /home/kusanagi/$USERNAME/web/concrete/bin
./concrete5 c5:install --db-server=127.0.0.1 --db-username=$USERNAME --db-password=$PASSWORD --db-database=$USERNAME --admin-password=$ADMIN_PASSWORD --admin-email=$ADMIN_EMAIL --starting-point=elemental_full --site=$SITE_NAME

chmod -R 777 /home/kusanagi/$USERNAME/web/packages
chmod -R 777 /home/kusanagi/$USERNAME/web/application/config
chmod -R 777 /home/kusanagi/$USERNAME/web/application/files
chown -R kusanagi:kusanagi /home/kusanagi/$USERNAME || exit 1

スクリプト追加スクリプト画面

スクリプトの簡単な解説

ファイアウォールの設定

ファイアウォールの設定に、httpとhttpsを追加しています。CentOS7ベースなので、firewalldコマンドでの設定になります。ファイアウォールではこの他にSSHが許可されている状態になっていますので、必要に応じて独自にポート番号の変更などを行うとSSHへの攻撃を受けにくくなります。

システムのアップデート

yumでシステムのアップデートを行っています。KUSANAGIのシステムはyumでアップデートできるように登録されているので、継続して利用する場合に発生する、定期的なアップデート対応が非常に簡単になっています。
アップデートにおけるWebサイトへの影響は利用しているシステムによっても違うので、公開されているWebサイトの環境でのアップデートの前にテストすることをおすすめします。

KUSANAGIの初期設定

KUSANAGIを利用する上での初期設定を行っています。このスクリプトでは、Nginx、PHP7を利用することを前提に設定を変更しています。PHP7で動かないプログラムがあった場合などはPHP5.6に変更することも可能です。
設定の変更はすべてコマンドででき、稼働中でもサーバを止めることなく切り替えが可能です。

PHP7を利用する場合のコマンド: kusanagi php7
PHP5.6を利用する場合のコマンド: kusanagi php-fpm

concrete5のインストール

concrete5のバージョン7.5.7をダウンロードし、KUSANAGIのhomeフォルダへ展開、データベース・Nginxの設定を行い、concrete5のコマンドラインツールでインストールを行っています。
KUSANAGIで動作するようにパーミッションを変更していますが、これも必要に応じて変更を行うといいかもしれません。

使い方

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

さくらのクラウドのコントロールパネルにアクセスすると、右上に画像のように『設定』という項目がありますので、まずは設定へ移動。
スクリプト追加設定ボタン

次にこのような画面になるので、左側に表示されている『スクリプト』という項目に移動
スクリプト追加スクリプト画面

右上の『追加』を押すと、スクリプト追加画面が表示されます。名前は自分でわかりやすいもの、内容部分にスクリプトのソースをコピーして入れてください。内容を入れたら『作成』を押せば作成完了です。
スクリプト作成画面

作成が完了するとこのように表示されます。
スクリプト一覧画面

2,スタートアップスクリプトを利用して、KUSANAGIアーカイブのサーバを作成する

スクリプトの作成後、サーバの作成を行います。サーバの作成画面に遷移し画面右上の『シンプルモード』のチェックを外します。
シンプルモードチェック外し

作成画面のディスク項目のアーカイブ選択で、KUSANAGIを選択します。
c5kusanagi_6

ディスクの修正項目のスタートアップスクリプト選択部分で、先ほど作成したスクリプトを選択する。選択すると画像のように入力フォームが表示されるので、入力を行いサーバの作成を行ってください。
c5kusanagi_7

■設定項目

kusanagiのパスワード
ユーザkusanagiのパスワードです。SSHでアクセスする際に利用します。

サイトのドメイン
作成したいWebサイトのドメインです。(例)example.com

サイトの名前
作成したいWebサイトの名前です。あとからconcrete5の管理画面で変更ができます。

adminのパスワード
concrete5のデフォルトの管理ユーザ(admin)のパスワードです。インストール直後にログインするために利用します。これもあとから変更できます。

adminのメールアドレス
concrete5のデフォルト管理ユーザ(admin)のメールアドレスです。これもあとから変更できます。

3,ドメインを作成したサーバのIPに設定する

サーバを作成するとIPアドレスが発行されます。このIPアドレスを利用したいドメインに設定を行ってください。
※ドメインの設定は、ドメインを管理しているサービスでの作業になります。

4,ドメインの反映後、アクセスする

ドメインを設定したあと、反映するまで待ちます。
反映は数分で終わる場合もありますが、サービス側の設定によっては数時間かかる場合もあります。

http://設定したドメイン

にアクセスし、concrete5のデフォルトテーマが表示されればサイト作成完了です。

5,設定したパスワードでログインする

ログイン画面のURL:http://設定したドメイン/login
ユーザ名:admin
パスワード:先ほど設定したadminのパスワード

利用する上での注意事項

このスタートアップスクリプトを利用すれば、簡単にconcrete5をインストールし利用することができます。しかし、本格的に企業のWebサイトとして運用するには、セキュリティの設定や定期的なアップデートなどを適宜行う必要がありますので、試験的に利用したい場合やここから自分で設定変更が可能な場合などの際に利用していただければと思います。

また、このスクリプトでインストールできるconcrete5のバージョンは7.5.7になります。concrete5は機能追加やバグ対応に伴うアップデートが随時行われています。最新版を利用したい場合は、コード内のconcrete5をダウンロードしている部分のリンク先を最新版に変更してください。
最新版のダウンロード元がわからない場合や、コードの書き換えがわからない場合は下記リンク先のgithub上に最新版に対応したスクリプトをアップしていますので、参考にしてください。
「KUSANAGI for さくらのクラウド」にconcrete5を入れるスタートアップスクリプト