第3回 一撃サーバー構築シェルスクリプト勉強会 
USP友の会 
@nullpopopo
第3回 一撃サーバー構築シェルスクリプト勉強会 
[自己紹介] 
名前: 濱田康貴 ( @nullpopopo ) 
USP友の会 
http://www.usptomo.com/ 
Blog 
http://nullpopopo.blogcube.info/ 
Facebook 
https://www.facebook.com/nullpopopo 
著書: USP Magazine 
教えて先輩♡サーバー運用お助けTIPS 
隔月(偶数月号)連載中
第3回 一撃サーバー構築シェルスクリプト勉強会 
石狩に行ってきました
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会 
北海道観光、楽しんできました。
第3回 一撃サーバー構築シェルスクリプト勉強会 
北海道グルメを堪能しました。
第3回 一撃サーバー構築シェルスクリプト勉強会 
次回勉強会予告 
12/13(土)〜12/14(日)、日本UNIXユーザー会と共催で 
シェルスクリプトワークショップ を開催します。 
会場は鳥取環境大学 講義棟 1階 15教室で、懇親会には 
カニが出ます。 
東京でもサテライト開催予定です。
第3回 一撃サーバー構築シェルスクリプト勉強会 
前回のおさらい 
&& 
今回の環境構築
第3回 一撃サーバー構築シェルスクリプト勉強会 
http://nullpopopo.blogcube.info/2014/09/ichigeki-kotaeall.html 
ここからコピペして 
環境構築します
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会
第3回 一撃サーバー構築シェルスクリプト勉強会 
このように、WordPressのインストール 
画面が表示されればOKです。 
けどまだWordPressのインストールは行 
わないでください。後でお楽しみがあり 
ますので。
第3回 一撃サーバー構築シェルスクリプト勉強会 
中で何をしていたかというと・・・ 
1.yum update 
2.fail2banのメール宛先と送信元をroot@localhostに変更 
3.iptables設定 
4.nginxインストール 
5.phpインストール 
6.mysqlインストール 
7.mysqlパラメータ生成→mysql設定 
8.php設定 
9.WordPressインストール 
10.nginx設定ファイル生成 
11.OS再起動
第3回 一撃サーバー構築シェルスクリプト勉強会 
今回のテーマ
第3回 一撃サーバー構築シェルスクリプト勉強会 
どうせなら単一のホストだけではなくバーチャル 
ホストも一撃サーバーで運用したい・・・という 
声が聞こえてきたので、一撃スクリプト作っちゃ 
いました。
第3回 一撃サーバー構築シェルスクリプト勉強会 
http://nullpopopo.blogcube.info/2014/11/20141108_ichigeki_odai.html
第3回 一撃サーバー構築シェルスクリプト勉強会 
●コマンドライン一発でWordPressがインストー 
ルされたバーチャルホストを構築 
●勿論バーチャルホストの削除も可能 
●バーチャルホスト削除時にはコンテンツとDBを 
自動バックアップ
第3回 一撃サーバー構築シェルスクリプト勉強会 
スクリプト起動 
第1引数が create の場合 
第1引数が delete の場合 
第1引数が その他の場合 
引数が6つでなければ、使い方を表示して異常終了する。 
引数が6つであれば、関数CREATEを実行する。 
引数が2つでなければ、使い方を表示して異常終了する。 
引数が2つであれば、関数DELETEを実行する。 
使い方を表示して異常終了する。
第3回 一撃サーバー構築シェルスクリプト勉強会 
使い方 (バーチャルホスト作成) 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com
第3回 一撃サーバー構築シェルスクリプト勉強会 
使い方 (バーチャルホスト作成) 
バーチャルホスト名 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com
第3回 一撃サーバー構築シェルスクリプト勉強会 
使い方 (バーチャルホスト作成) 
ブログのタイトル 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com
第3回 一撃サーバー構築シェルスクリプト勉強会 
使い方 (バーチャルホスト作成) 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com 
ブログの 
ログインID
第3回 一撃サーバー構築シェルスクリプト勉強会 
使い方 (バーチャルホスト作成) 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com 
ブログの 
ログインパスワード
第3回 一撃サーバー構築シェルスクリプト勉強会 
使い方 (バーチャルホスト作成) 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com 
メールアドレス
第3回 一撃サーバー構築シェルスクリプト勉強会 
使い方 (バーチャルホスト削除) 
# VHMAINTE delete www.example.com
第3回 一撃サーバー構築シェルスクリプト勉強会 
#!/bin/bash 
変数設定、基本設定 
バーチャルホスト作成時の処理をまとめた「CREATE」関数 
バーチャルホスト削除時の処理をまとめた「DELETE」関数 
第一引数によって処理を選択するCASE文
第3回 一撃サーバー構築シェルスクリプト勉強会 
変数設定、基本設定
第3回 一撃サーバー構築シェルスクリプト勉強会 
# cat bin/VHMAINTE | head 
#!/bin/bash 
set -e 
LANG=C 
FQDN=$2 
BLOGTITLE=$3 
AdminUsername=$4 
AdminPassword=$5 
AdminEmail=$6 
バーチャルホスト作成時に引数として 
指定する内容
第3回 一撃サーバー構築シェルスクリプト勉強会 
bashの引数 
$0 実行時のコマンド名 
$1〜$n シェルスクリプト実行時に渡す引数
第3回 一撃サーバー構築シェルスクリプト勉強会 
DROOT=/var/www/${FQDN} 
ドキュメントルートのディレクトリ 
/var/www/www.example.com のように 
引数に与えたFQDNがディレクトリ名となる。
第3回 一撃サーバー構築シェルスクリプト勉強会 
ETH0=$(ip a show eth0 | grep inet | grep -v inet6 | awk 
'{print $2}' | sed -e "s//[0-9]*//") 
eth0のIPアドレスをipコマンドから取得
第3回 一撃サーバー構築シェルスクリプト勉強会 
PARAMFILE=${HOME}/.mysql/MySQLPARAM 
MySQLのパラメータファイル名を変数に格納
第3回 一撃サーバー構築シェルスクリプト勉強会 
if [ ! -x ${HOME}/bin/wp ]; 
then 
curl -o ${HOME}/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar 
chmod 700 ${HOME}/bin/wp 
fi 
一撃シリーズ今回の目玉!wp-cliのインストール! 
※ 取得元ファイル: https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
第3回 一撃サーバー構築シェルスクリプト勉強会 
wp-cliとは? 
WordPress本体のインストール、アップデートか 
らプラグインやテーマのインストールやアップ 
デートまでほぼすべての操作がコマンドラインか 
らできてしまう! 
_人人人人人人人人人_ 
> まさにシェル芸 < 
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
第3回 一撃サーバー構築シェルスクリプト勉強会 
http://wp-cli.org/
第3回 一撃サーバー構築シェルスクリプト勉強会 
バーチャルホスト作成時の処理をまとめた「CREATE」関数
第3回 一撃サーバー構築シェルスクリプト勉強会 
関数 CREATE でやっていること 
1.DB名を作成する (wpdb0000〜) 
2.DBユーザー名を作成する (user0000〜) 
3.DBパラメータファイル作成 
4.DB作成 
5.DBユーザー作成 
6.ドキュメントルート作成 
7.WordPressインストール 
8.nginx設定ファイル生成 
9.nginx再起動
第3回 一撃サーバー構築シェルスクリプト勉強会 
# cat bin/VHMAINTE | head -n 51 | tail -n 31 
CREATE(){ 
DBNAME=$(printf "wpdb%04dn" $(ls /var/www/ | egrep -v "(^html|gz$|^"${ETH0}")" | wc -l)) 
DBUSER=$(printf "user%04dn" $(ls /var/www/ | egrep -v "(^html|gz$|^"${ETH0}")" | wc -l)) 
(中略) 
} 
バーチャルホスト作成時の処理を 
関数「CREATE」にまとめた
第3回 一撃サーバー構築シェルスクリプト勉強会 
DBNAME=$(printf "wpdb%04dn" $(ls /var/www/ | egrep -v "(^html|gz$|^"${ETH0}")" | wc -l)) 
DBUSER=$(printf "user%04dn" $(ls /var/www/ | egrep -v "(^html|gz$|^"${ETH0}")" | wc -l)) 
DB名とDBユーザー名を連番で作成するため、 
/var/www以下のディレクトリ(/var/www/IPア 
ドレス と /var/www/html、そしてバックアッ 
プファイルを除く)の数をもとに採番する
第3回 一撃サーバー構築シェルスクリプト勉強会 
if [ 0 = $(grep ${FQDN} ${PARAMFILE} | wc -l) ]; 
then 
echo "DBPARAM ${DBNAME} ${DBUSER} $(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 8)"  
${FQDN} ${BLOGTITLE} ${AdminUsername} ${AdminPassword} ${AdminEmail}>> $ 
{PARAMFILE} 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "create database ${DBNAME} character set utf8;" 
PW=$(grep ${FQDN} ${PARAMFILE} | awk '{print $4}') 
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 "FLUSH PRIVILEGES;" 
fi 
もし引数に指定したFQDNがパラメータファイ 
ルになければ、引数の内容をパラメータファ 
イルに書き込み、パラメータファイルをもと 
にDB作成、ユーザー作成を行い、MySQLの権 
限テーブルを再読み込みする。
第3回 一撃サーバー構築シェルスクリプト勉強会 
echo "DBPARAM ${DBNAME} ${DBUSER} $(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 8)"  
${FQDN} ${BLOGTITLE} ${AdminUsername} ${AdminPassword} ${AdminEmail}>> $ 
{PARAMFILE} 
パラメータファイルへの書き込み処理例: 
# VHMAINTE create www.example.com "ぽぽぽぽぽ" nullpopopo BlogP@ssw0rD 
yasutaka.hamada@gmail.com 
# cat ${HOME}/.mysql/MySQLPARAM | grep www.example.com 
DBPARAM wpdb0000 user0000 DB_PASSWORD www.example.com ぽぽぽぽぽ nullpopopo 
BlogP@ssw0rD yasutaka.hamada@gmail.com
第3回 一撃サーバー構築シェルスクリプト勉強会 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "create database ${DBNAME} character set utf8;" 
確認1 データベースが作成されているかの確認: 
# mysql -u root -p$(cat ${HOME}/.mysql/MySQLPARAM | grep ^user | awk '{print $NF}') -e 
'show databases;' 
+--------------------+ 
| Database | 
+--------------------+ 
| information_schema | 
| mysql | 
| wordpress | 
| wpdb0000 | 
+--------------------+
第3回 一撃サーバー構築シェルスクリプト勉強会 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "create database ${DBNAME} character set utf8;" 
確認2 データベースの文字コードが正しいことの確認: 
# mysql -u root -p$(cat ${HOME}/.mysql/MySQLPARAM | grep ^user | awk '{print $NF}') -e 
'show create database wpdb0000;' 
+----------+-------------------------------------------------------------------+ 
| Database | Create Database | 
+----------+-------------------------------------------------------------------+ 
| wpdb0000 | CREATE DATABASE `wpdb0000` /*!40100 DEFAULT CHARACTER SET utf8 */ | 
+----------+-------------------------------------------------------------------+
第3回 一撃サーバー構築シェルスクリプト勉強会 
変数 DROOT は /var/www/${FQDN} でしたね 
[ ! -d ${DROOT} ] && mkdir -p ${DROOT} 
wp core download --locale=ja --path=${DROOT} 
cd ${DROOT} 
wp core download でWordPressを公式サイトからダウンロードします。 
引数に「--locale=ja」を加えることで、日本語版のWordPressをダウン 
ロードすることができます。「--path=<フルパス>」でインストール先 
ディレクトリを指定できるので、ここではバーチャルホストのドキュメ 
ントルートを指定します。
第3回 一撃サーバー構築シェルスクリプト勉強会 
wp core config --dbname=$(grep ${FQDN} ${PARAMFILE} | awk '{print $2}')  
--dbuser=$(grep ${FQDN} ${PARAMFILE} | awk '{print $3}')  
--dbpass=$(grep ${FQDN} ${PARAMFILE} | awk '{print $4}') 
wp core config コマンドで wp-config.php を生成する。 
前ページでドキュメントルートに移動しているので、-- 
pathを指定せずにカレントディレクトリで作業する。
第3回 一撃サーバー構築シェルスクリプト勉強会 
wp core config --dbname=$(grep ${FQDN} ${PARAMFILE} | awk '{print $2}')  
--dbuser=$(grep ${FQDN} ${PARAMFILE} | awk '{print $3}')  
--dbpass=$(grep ${FQDN} ${PARAMFILE} | awk '{print $4}') 
# cat ${HOME}/.mysql/MySQLPARAM | grep www.example.com 
DBPARAM wpdb0000 user0000 DB_PASSWORD www.example.com ぽぽぽぽぽ 
nullpopopo BlogP@ssw0rD yasutaka.hamada@gmail.com 
# cat ${HOME}/.mysql/MySQLPARAM | grep www.example.com | awk '{print $2}' 
wpdb0000 
# cat ${HOME}/.mysql/MySQLPARAM | grep www.example.com | awk '{print $3}' 
user0000 
# cat ${HOME}/.mysql/MySQLPARAM | grep www.example.com | awk '{print $4}' 
DB_PASSWORD
第3回 一撃サーバー構築シェルスクリプト勉強会 
wp core install --url=${FQDN} --title=${BLOGTITLE} 
--admin_user=${AdminUsername} --admin_password=$ 
{AdminPassword} --admin_email=${AdminEmail} 
cd 
wp core install コマンドで WordPressをインストール 
(wp-config.phpの内容をDBに投入)する。ドキュメント 
ルートに移動済なので、--pathを指定せずにカレントディ 
レクトリで作業する。
第3回 一撃サーバー構築シェルスクリプト勉強会 
cp -p /etc/nginx/conf.d/000_VHOST.conf /etc/nginx/conf.d/$ 
{FQDN}.conf 
IPアドレスでアクセスした時に表示する 
バーチャルホストのconfigファイルをも 
とに、新しく作成するバーチャルホスト 
のconfigファイルを生成(コピー)する。
第3回 一撃サーバー構築シェルスクリプト勉強会 
sed -i s/${ETH0}/${FQDN}/g /etc/nginx/conf.d/${FQDN}.conf 
configファイル中のIPアドレスをバー 
チャルホスト名に置換する。
第3回 一撃サーバー構築シェルスクリプト勉強会 
sed -i 's/^}$//g' /etc/nginx/conf.d/${FQDN}.conf 
ログの設定をserverディレクティブに追 
記するため、一旦ディレクティブの閉じ 
カッコを削除する。
第3回 一撃サーバー構築シェルスクリプト勉強会 
echo " access_log /var/log/nginx/${FQDN}_access.log 
main;" >> /etc/nginx/conf.d/${FQDN}.conf 
echo " error_log /var/log/nginx/${FQDN}_error.log 
warn;" >> /etc/nginx/conf.d/${FQDN}.conf 
echo "}" >> /etc/nginx/conf.d/${FQDN}.conf 
ログの設定をserverディレクティブに追 
記し、一旦削除したディレクティブの閉 
じカッコを追記する。
第3回 一撃サーバー構築シェルスクリプト勉強会 
service nginx reload 
nginxの設定ファイルを再読み込みする。
第3回 一撃サーバー構築シェルスクリプト勉強会 
# diff /etc/nginx/conf.d/000_VHOST.conf 
/etc/nginx/conf.d/www.example.com.conf 
2,3c2,3 
< server_name 133.242.18.139; 
< root /var/www/133.242.18.139; 
--- 
> server_name www.example.com; 
> root /var/www/www.example.com; 
29a30,32 
> 
> access_log /var/log/nginx/www.example.com_access.log main; 
> error_log /var/log/nginx/www.example.com_error.log warn;
第3回 一撃サーバー構築シェルスクリプト勉強会 
# ls -l /var/log/nginx/ 
合計 28 
-rw-r----- 1 nginx adm 589 10月 23 04:12 2014 access.log 
-rw-r----- 1 nginx adm 973 10月 22 04:41 2014 access.log-20141021.gz 
-rw-r----- 1 nginx adm 737 10月 23 03:04 2014 access.log-20141022.gz 
-rw-r----- 1 nginx adm 4174 10月 22 23:54 2014 access.log-20141023 
-rw-r----- 1 nginx adm 142 10月 23 03:20 2014 error.log 
-rw-r--r-- 1 nginx root 1713 10月 23 04:19 2014 www.example.com_access.log 
-rw-r--r-- 1 nginx root 0 10月 20 11:35 2014 www.example.com_error.log 
-rw-r--r-- 1 root root 0 10月 20 11:38 2014 www2.example.com_access.log 
-rw-r--r-- 1 root root 0 10月 20 11:38 2014 www2.example.com_error.log
第3回 一撃サーバー構築シェルスクリプト勉強会 
# cat /etc/logrotate.d/nginx 
/var/log/nginx/*.log { 
daily 
missingok 
rotate 52 
compress 
delaycompress 
notifempty 
create 640 nginx adm 
sharedscripts 
postrotate 
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` 
endscript 
}
第3回 一撃サーバー構築シェルスクリプト勉強会 
休憩
第3回 一撃サーバー構築シェルスクリプト勉強会 
バーチャルホスト削除時の処理をまとめた「DELETE」関数
第3回 一撃サーバー構築シェルスクリプト勉強会 
関数 DELETE でやっていること 
1.nginx設定ファイルをリネーム 
2.nginx再起動 
3.DBバックアップ 
4.DB削除 
5.DBユーザー削除 
6.パラメータファイルから該当FQDNを削除
第3回 一撃サーバー構築シェルスクリプト勉強会 
# cat bin/VHMAINTE | head -n 73 | tail -n 21 
DELETE(){ 
mv /etc/nginx/conf.d/${FQDN}.conf /etc/nginx/conf.d/${FQDN}.conf.DISABLED_$(date +%Y%m%d%H%M%S) 
service nginx reload 
(中略) 
} 
バーチャルホスト削除時の処理を 
関数「DELETE」にまとめた
第3回 一撃サーバー構築シェルスクリプト勉強会 
nginxのバーチャルホスト設定ファイルをリネー 
ムし、nginxを再読み込みする 
mv /etc/nginx/conf.d/${FQDN}.conf /etc/nginx/conf.d/$ 
{FQDN}.conf.DISABLED_$(date +%Y%m%d%H%M%S) 
service nginx reload 
例) 
www.example.com.conf 
↓ 
www.example.com.conf.DISABLED_20141020113617
第3回 一撃サーバー構築シェルスクリプト勉強会 
# grep include /etc/nginx/nginx.conf 
include /etc/nginx/mime.types; 
include /etc/nginx/conf.d/*.conf; 
/etc/nginx/conf.d ディレクトリ配下にあるファイル名の接尾 
語を「.conf」からリネームしてnginxを再起動すれば設定 
ファイルのincludeから外れる仕組みを利用する
第3回 一撃サーバー構築シェルスクリプト勉強会 
ドキュメントルートのディレクトリをtar.gz圧縮し、元のディレク 
トリを削除する 
[ -d ${DROOT} ] && tar czf ${DROOT}_$(date +%Y%m%d).tar.gz $ 
{DROOT} && rm -fr ${DROOT} 
例) 
/var/www/www.example.com 
↓/ 
var/www/www.example.com_20141020.tar.gz
第3回 一撃サーバー構築シェルスクリプト勉強会 
DB名とDB接続ユーザーを変数に格納する 
DBNAME=$(grep ${FQDN} ${PARAMFILE} | awk '{print $2}') 
DBUSER=$(grep ${FQDN} ${PARAMFILE} | awk '{print $3}') 
# grep www.example.com $ 
{HOME}/.mysql/MySQLPARAM | awk '{print 
$2,$3}' 
wpdb0000 user0000
第3回 一撃サーバー構築シェルスクリプト勉強会 
if [ 1 = $(grep ${FQDN} ${PARAMFILE} | wc -l) ]; 
then 
mysqldump -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
${DBNAME} > /var/www/${FQDN}_${DBNAME}_$(date +%Y%m%d).sql 
gzip /var/www/${FQDN}_${DBNAME}_$(date +%Y%m%d).sql 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "drop database ${DBNAME};" 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "DELETE FROM mysql.user WHERE user = '${DBUSER}';" 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "FLUSH PRIVILEGES;" 
cp -p ${PARAMFILE} ${PARAMFILE}.$(date +%Y%m%d%H%M%S) 
grep -v ${DBUSER} ${PARAMFILE}.$(date +%Y%m%d%H%M%S) > ${PARAMFILE} 
fi
第3回 一撃サーバー構築シェルスクリプト勉強会 
if [ 1 = $(grep ${FQDN} ${PARAMFILE} | wc -l) ]; 
then 
mysqldump -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
${DBNAME} > /var/www/${FQDN}_${DBNAME}_$(date +%Y%m%d).sql 
gzip /var/www/${FQDN}_${DBNAME}_$(date +%Y%m%d).sql 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "drop database ${DBNAME};" 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "DELETE FROM mysql.user WHERE user = '${DBUSER}';" 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "FLUSH PRIVILEGES;" 
cp -p ${PARAMFILE} ${PARAMFILE}.$(date +%Y%m%d%H%M%S) 
grep -v ${DBUSER} ${PARAMFILE}.$(date +%Y%m%d%H%M%S) > ${PARAMFILE} 
fi 
バーチャルホストのFQDNがパラメータファイルに 
1行書かれていたら実行する
第3回 一撃サーバー構築シェルスクリプト勉強会 
mysqldump -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
${DBNAME} > /var/www/${FQDN}_${DBNAME}_$(date +%Y%m%d).sql 
gzip /var/www/${FQDN}_${DBNAME}_$(date +%Y%m%d).sql 
wpdb0000 データベースの中身が 
/var/www/www.example.com_wpdb0000_20141108.sql に 
保存された後、gzip圧縮され 
/var/www/www.example.com_wpdb0000_20141108.sql.gz 
になる。
第3回 一撃サーバー構築シェルスクリプト勉強会 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "drop database ${DBNAME};" 
wpdb0000 データベースを削除する
第3回 一撃サーバー構築シェルスクリプト勉強会 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "DELETE FROM mysql.user WHERE user = '${DBUSER}';" 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "FLUSH PRIVILEGES;" 
user0000 (変数DBUSERに格納されている) を mysql 
データベースから削除し、権限情報を再読み込みする。
第3回 一撃サーバー構築シェルスクリプト勉強会 
cp -p ${PARAMFILE} ${PARAMFILE}.$(date +%Y%m%d%H%M%S) 
grep -v ${DBUSER} ${PARAMFILE}.$(date +%Y%m%d%H%M%S) > ${PARAMFILE} 
パラメータファイルをバックアップし、削除対象のFQDN 
以外をパラメータファイルに残す。
第3回 一撃サーバー構築シェルスクリプト勉強会 
第一引数によって処理を選択するCASE文
第3回 一撃サーバー構築シェルスクリプト勉強会 
# cat bin/VHMAINTE | tail -n 14 
case "$1" in 
[cC][rR][eE][aA][tT][eE]) 
[ ! $# = 6 ] && echo "USAGE: $(basename $0) create FQDN BLOGTITLE 
AdminUsername AdminPassword AdminEmail" && exit 1 
CREATE 
;; 
[dD][eE][lL][eE][tT][eE]) 
[ ! $# = 2 ] && echo "USAGE: $(basename $0) delete FQDN" && exit 1 
DELETE 
;; 
*) 
echo "USAGE: $(basename $0) <create|delete> FQDN BLOGTITLE 
AdminUsername AdminPassword AdminEmail" 
exit 1 
;; 
esac
第3回 一撃サーバー構築シェルスクリプト勉強会 
おまけ: wp-cliによるWordPressシェル芸
第3回 一撃サーバー構築シェルスクリプト勉強会 
IPアドレスのバーチャルホストでWordPressを使えるようにする 
# ETH0=$(ip a show eth0 | grep inet | grep -v inet6 | awk '{print 
$2}' | sed -e "s//[0-9]*//") ; wp core install --url=${ETH0} 
--title="WordPressでシェル芸" --admin_user=nullpopopo 
--admin_password=Bl0gP@ssw0rd 
--admin_email=yasutaka.hamada@gmail.com --path=/var/www/${ETH0} 
実行後 
Success: WordPress installed successfully. 
と表示されればOK
第3回 一撃サーバー構築シェルスクリプト勉強会 
IPアドレスのバーチャルホストでWordPressを使えるようにする
第3回 一撃サーバー構築シェルスクリプト勉強会 
IPアドレスのバーチャルホストでWordPressを使えるようにする 
_人人人人人人人人人人人人人人人人人_ 
> コマンドラインでも確認したい! < 
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
第3回 一撃サーバー構築シェルスクリプト勉強会 
IPアドレスのバーチャルホストでWordPressを使えるようにする 
# wp post list --path=/var/www/<IPアドレス>/ 
+----+--------------+-------------+---------------------+-------------+ 
| ID | post_title | post_name | post_date | post_status | 
+----+--------------+-------------+---------------------+-------------+ 
| 1 | Hello world! | hello-world | 2014-10-25 17:53:51 | publish | 
+----+--------------+-------------+---------------------+-------------+
第3回 一撃サーバー構築シェルスクリプト勉強会 
PostID 1のタイトルを変更してみる 
※ 事前確認 
# wp post get 1 --field=post_title --path=/var/www/<IPアドレス>/ 
Hello world! 
※ タイトル変更 
# wp post update 1 --post_title="(っ´∀`)っ ゃー" --path=/var/www/<IPアド 
レス>/ 
Success: Updated post 1. 
※ 事後確認 
# wp post get 1 --field=post_title --path=/var/www/<IPアドレス>/ 
(っ´∀`)っ ゃー
第3回 一撃サーバー構築シェルスクリプト勉強会 
PostID 1のタイトルを変更してみる
第3回 一撃サーバー構築シェルスクリプト勉強会 
コマンドラインから新しい記事を投稿してみる 
※ いきなり公開状態でポスト名をUNIXタイムにし、ポストタイトル 
を「ぬるぽぽぽ」、本文を「(っ´∀`)っ ゃー」で投稿する 
# wp post create --post_status=publish --post_name=$(date +%s) 
–-post_title='ぬるぽぽぽ' --post_content='(っ´∀`)っ ゃー' -– 
path=/var/www/<IPアドレス>/ 
Success: Created post 4.
第3回 一撃サーバー構築シェルスクリプト勉強会 
コマンドラインから新しい記事を投稿してみる
第3回 一撃サーバー構築シェルスクリプト勉強会 
お疲れ様でした!

2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料