[concrete5][一撃]LNMP環境にconcrete5をインストールする


久々に一撃シェルスクリプトを作成してみました。先ほどこちらでやってみたconcrete5インストールですが、どうせならnginxでも動かしてみたいものです。また、PHPとMySQLは新しめのバージョンにしてみました。

※ 2015/01/22 さくらのクラウド スタートアップスクリプトとしてこちらにまとめました。

今回の環境はさくらのクラウドでCentOS 6.6です。PHP5.6はremiからインストールします。さくらのクラウドでは最初からremiがインストールされているのですが、素っぴんのCentOSでも同じ一撃シェルスクリプトで動かせるよう、 /etc/yum.repos.d/remi.repo があるかどうかをifで判断する処理を入れました。MySQLは mysql-community-release-el6-5.noarch をインストールし、 mysql-community-server の5.6をインストールしています。

実はもう一撃スクリプトとして使えるレベルにまでシェルスクリプトを作ってしまったので、コードは最後に晒します。また、あらかじめ一般ユーザーを作成してsudo権限(NOPASSWD)を与えていますが、こちらの手順は省略します。また、rootでこの一撃スクリプトを実行する場合は、コード中の「sudo」を削除してください(しなくても動きますが)。

注意点ですが、 /var/lib/php/session と /var/lib/php/wsdlcache のオーナー:グループがデフォルトでは root:apache でした。このままですと、ブラウザからのインストール設定時にセッション情報が書き込めずエラーとなってしまうので、グループを nginx に直すのを忘れないようにしましょう(以下の一撃スクリプトを実行すれば手作業不要です)。

過去の一撃スクリプトシリーズではMySQLのパスワードは自動生成していますので、インストール対象のサーバーを再起動後は、SSHでログインして  ${HOME}/.mysql/MySQLPARAM のDBPARAMで始まる行の一番右のフィールドを確認してください。これがMySQLのパスワードです。

それでは、以下一撃スクリプトのコードです。(クリックで大きくなります)

#!/bin/bash
DBNAME=concrete5
DBUSER=concrete5
PARAMFILE=${HOME}/.mysql/MySQLPARAM
sudo yum -y update
sudo service iptables stop
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
sudo iptables -I INPUT -p icmp --icmp-type 8 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo service iptables save
sudo service iptables start
sudo chkconfig iptables on
sudo yum -y install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
sudo cp -p /etc/yum.repos.d/nginx.repo /etc/yum.repos.d/nginx.repo.orig
sudo sed -i 's/centos/mainline/centos/' /etc/yum.repos.d/nginx.repo
sudo yum -y install nginx
[ ! -f /etc/yum.repos.d/remi.repo ] && 
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo yum -y --enablerepo=remi install gd-last
sudo yum --enablerepo=remi-php56 -y install php-cli php-common php-mbstring php-pdo php-xml php-mysqlnd php-gd php-pecl-apcu php-xmlrpc php-opcache php-fpm
sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
sudo yum -y install mysql-community-server
mkdir ${HOME}/.mysql
sudo chkconfig mysqld on
sudo service mysqld start
echo "user root $(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 8)" > ${PARAMFILE}
echo "DBPARAM ${DBNAME} ${DBUSER} $(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 8)" >> ${PARAMFILE}
mysqladmin -u root password "$(grep ^user ${PARAMFILE} | awk '{print $NF}')"
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}') -e "create database ${DBNAME} character set utf8;"
PW=$(grep ^DBPARAM ${PARAMFILE} | awk '{print $NF}')
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}') -e "GRANT ALL PRIVILEGES on ${DBNAME}.* to ${DBUSER}@localhost identified by "${PW}";"
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}') -e "DELETE FROM mysql.user WHERE User='';"
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}') -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}') -e "FLUSH PRIVILEGES;"
sudo cp -p /etc/php.ini /etc/php.ini.orig
sudo sed -i 's/;date.timezone =/;##--@--##date.timezone =ndate.timezone = Asia/Tokyo/' /etc/php.ini
sudo cp -p /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.orig
sudo sed -i 's/^user = apache/;user = apachenuser = nginx/' /etc/php-fpm.d/www.conf
sudo sed -i 's/^group = apache/;group = apachengroup = nginx/' /etc/php-fpm.d/www.conf
sudo chgrp nginx /var/lib/php/session
sudo chgrp nginx /var/lib/php/wsdlcache
sudo service php-fpm start
sudo chkconfig php-fpm on
mkdir ${HOME}/src
wget -O ${HOME}/src/concrete5.7.3.zip http://www.concrete5.org/download_file/-/view/74252/
unzip ${HOME}/src/concrete5.7.3.zip -d ${HOME}/src/
sudo cp -pr ${HOME}/src/concrete5.7.3/* /var/www/html/
sudo chown -R nginx. /var/www/html/
sudo cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
sudo sed -i "s/worker_processes[[:space:]]+[0-9]+/worker_processes $(cat /proc/cpuinfo | grep processor | wc -l)/g" /etc/nginx/nginx.conf
sudo mkdir /etc/nginx/conf.d/BACKUP
sudo mv /etc/nginx/conf.d/*.conf /etc/nginx/conf.d/BACKUP/

cat << _EOL_ > 000_VHOST.conf
server {
    server_name ${HOSTNAME};
    root /var/www/html;
    location / {
        index  index.php index.html index.htm;
    }
    if ($uri ~ "^(.+?.php?)(/.*)$") {
        set $path_info $2;
    }
    if (!-e $request_filename) {
        rewrite ^(.+)$ /index.php last;
    }
    location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 24h;
        log_not_found off;
    }
        location ~ .php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
    }
}
_EOL_
sudo mv 000_VHOST.conf /etc/nginx/conf.d/
sudo chown root. /etc/nginx/conf.d/000_VHOST.conf
sudo service nginx start
sudo chkconfig nginx on
sudo reboot

あとは前回と一緒で、ブラウザから設定の続きを行うことができればOKです。

concrete5 公式活用ガイドブック (Web Designing BOOKS)