さくらのクラウド「スタートアップスクリプト」でconcrete5の5.7を使えるようにするスクリプト作った。

たぬきデース。
この記事は「concrete5 Japan Advent Calendar 2014」の2014/12/16の記事です。

2014/12/14のconcrete5アドベントカレンダーでさくらのなかのひとが「さくらのクラウド「スタートアップスクリプト」機能でconcrete5を自動インストール」という記事を上げてくれていました。

記事の補足にもあるように、これは5.6系のインストール用のスクリプトなんですよね。
というわけで、5.7系をインストールできるもの作りましたよ。

 

スクリプト

設定の方法及び、利用方法は「さくらのクラウド「スタートアップスクリプト」機能でconcrete5を自動インストール」この記事にあるのと同じです。

CentOS6.6で動作確認してあります。

#!/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 --enablerepo=remi install expect httpd-devel mod_ssl gd-last mysql-server git curl || exit 1
yum -y --enablerepo=remi-php55 install php php-devel php-cli php-pear php-mbstring php-xml php-gd php-mysql npm || 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

cp -p /etc/php.ini /etc/php.ini.old
sed -i 's/short_open_tag = Off/short_open_tag = On/g' /etc/php.ini
 
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 < /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`
git clone https://github.com/concrete5/concrete5-5.7.0.git
mv concrete5-5.7.0 /var/www/$USERNAME
cd /var/www/$USERNAME/cli
chmod 700 /var/www/$USERNAME/cli/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 <> /etc/httpd/conf/httpd.conf

    DocumentRoot /var/www/$USERNAME/web
    AllowEncodedSlashes On



    Options FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all

EOT
service httpd restart || exit 1

cd /var/www/$USERNAME/web/concrete
curl -sS https://getcomposer.org/installer | php
COMPOSER_HOME="/var/www/$USERNAME/web/concrete" php composer.phar install
mv composer.phar /usr/local/bin/composer

cd /var/www/$USERNAME/build
npm install -g grunt-cli
npm install
grunt release

cd /var/www/$USERNAME/cli
./install-concrete5.php --db-server=localhost --db-username=$USERNAME --db-password=$PASSWORD --db-database=$USERNAME --admin-password=$ADMIN_PASSWORD --admin-email=$ADMIN_EMAIL --target=/var/www/$USERNAME/web/ --core=/var/www/$USERNAME/web/concrete --starting-point=elemental_blank --site=concrete5sample --reinstall=no
 
rm /var/www/$USERNAME/web/concrete/.htaccess || exit 1
chown -R apache:apache /var/www || exit 1

 

かるーく解説

簡単にですが解説していきます。

 

iptables

まずは「iptables」。これはファイアウォールですね。
許可するプロトコルのポート番号を設定してます。この部分をいろいろ変えることで、ポートの開閉ができますよ。

SSHのポート番号やプロキシで別のポート番号を使いたいときなどは、ここも変更しておかないとブロックされちゃいます。

 

LAMP

さくらのクラウドのパブリックアーカイブにあるCentOS6.6にはremiレポジトリがあらかじめインストールされています(enableではないですが)。なので、enablerepoしてあげれば、PHP5.5もインストールできちゃうんですねー。

Apacheの設定、MySQLの設定と続きます。
concrete5を入れる関係上、short_open_tag = Onにphp.iniを弄ってるくらいで、特に特別なことはしてないですね。(確かdefaultでもOnですが念の為の処理)

 

concrete5

gitで5.7をgithubからダウンロードしてきます。このなかにcliも入っているので、それもそのまま使いますよ。
で、composerを使ってインストール作業開始なのです。

COMPOSER_HOMEを指定してあげないと動かなかったので、指定してあります。一応、また使えるようにコマンド登録もしてあります。

あとはnpmやgrunt-cliで必要なものを入れて、コマンドラインプログラムでconcrete5のインストールというわけです。
この状態だと、何のデータも入っていないまっさらな状態でのインストールになるので、サンプルデータがほしいという人は--starting-point=elemental_blankここを適宜変更してください。

 

まとめ

さくらのクラウドのクーポン持ってるけど使えていない人、5.7試してみたいけど、インストールうまくいかないと嘆いている人。これ使えば5.7試せますよ。
クラウドのアカウントさえあれば10分ほどで構築完了できますので、試してみてねー。

再度の注意。使い方は「さくらのクラウド「スタートアップスクリプト」機能でconcrete5を自動インストール」を見てね。

 

このスクリプトベースにすればVagrantとかでも構築できるなぁとおもいます。Nginxバージョンはまたそのうち。

さて、まだまだ「concrete5 Japan Advent Calendar 2014」は続きますよー。
(ΦωΦ)フフフ…

 

それでは。 ヾ(・д・。)マタネー♪

この記事を書いた人

たぬき@首席技監

アーシタンと蔵守の技術周り担当。主にワードプレス(WordPress)、サーバ管理なんかをやっています。