久々に一撃シェルスクリプトを作成してみました。先ほどこちらでやってみた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です。