SlideShare a Scribd company logo
1 of 105
Download to read offline
第2回 一撃サーバー構築シェルスクリプト勉強会 
(さっぽろ!) 
USP友の会 
@nullpopopo
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
[自己紹介] 
名前: 濱田康貴 ( @nullpopopo ) 
USP友の会 
http://www.usptomo.com/ 
Blog 
http://nullpopopo.blogcube.info/ 
Facebook 
https://www.facebook.com/nullpopopo 
著書: USP Magazine 
教えて先輩♡サーバー運用お助けTIPS 
隔月(偶数月号)連載中
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
本書のキッカケとなったWordPressやられちゃった事件 
のトラブルシュート(プロローグ)に私が登場しています 
http://www.amazon.co.jp/フルスクラッチから1日でCMSを作る-シェルスクリプト高速開発手法入門-上田隆一/dp/4048660683
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
おじちゃん仕事何してんの? 
http://ll4u.in/
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
USP友の会以外の何か 
ITスナック 美夢
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
USP友の会以外の何か 
ペアプログラミング合コン
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
北海道観光、楽しんできました。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
北海道観光、楽しんできました。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
北海道グルメを堪能しました。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
玉光堂、地下の楽器コーナーなくなってたんですね (´・_・`)
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
USP友の会 is 何?
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
https://www.usptomo.com/
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
https://twitter.com/usptomo
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
https://www.facebook.com/usptomo
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
定例会 
偶数月に開催。最近はシェル芸勉強会の懇親会を兼ねている。 
要するに飲み会。 
シェル芸勉強会 
偶数月に開催。 
上田会長の奇想天外な全10問の問題をワンライナーで解くという 
マゾいイベント。 
※ シェル芸の定義 http://blog.ueda.asia/?page_id=1434 
一撃勉強会 
奇数月に開催(今のところ)。妹able infraを実現すべく 
シェルスクリプトで頑張るというキモいイベント。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
次回勉強会予告 
11/8(土)、ウィークエンドバラエティ @nullpopopo ショー 
ではなく、さくらインターネット様と共催で 
一撃勉強会をさくらインターネット研究所 
セミナールームで行います。Ustream中継もあるよ! 
12/13(土)〜12/14(日)、日本UNIXユーザー会と共催で 
シェルスクリプトワークショップ を開催します。 
会場は鳥取環境大学 講義棟 1階 15教室で、懇親会には 
カニが出ます。講師の1人、今泉さん ( @bsdhack ) は 
札幌の出身です。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
USP Magazine 
USP研究所から出版されている、サーバー管理者やUNIX系プログラ 
マーに向けて2011年に創刊したUNIX/Linux/FreeBSD/シェルスクリプ 
トの総合誌。2014年4月から月刊化されました。 
道内ではMARUZEN&ジュンク堂書店 札幌店、北大生協書籍部北部店、 
函館蔦屋書店で取り扱っています。 
https://www.usp-lab.com/pub.magazine.html 
https://www.facebook.com/uspmag
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
TechLION 
IT文化の振興と、UNIX/Linux文化の楽しさを広く伝え、エンジニア同 
士の連帯を図ることを目的とするトークイベント。 
2013年9月15日には、札幌でも開催されました。 
http://techlion.jp/ 
※ 画像は http://techlion.jp/archives/5086 より
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
Techにゃんこ 
TechLIONがUSP友の会発祥らしからぬカッコよさのあまりに、法林GM 
に嫉妬した上田会長と濱田が、USP友の会のゆるさを広く伝え、クヨ 
クヨしたおっさん同士の連帯を図ることを目的とするインターネット 
ラジオ番組。 
http://www.ustream.tv/channel/techにゃんこ
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
先ほど石狩に行ってきました
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!)
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
今回の環境構築
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
http://nullpopopo.blogcube.info/2014/09/ichigeki-kotaeall.html 
ここからコピペして 
環境構築します
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
シェルスクリプトの中身は・・・ 
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再起動
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
(1) sshでログイン 
root@IPアドレス 
※ パスワードは別途お知らせします 
(2) 以下のコマンドを実行 
# mkdir ${HOME}/bin 
# touch ${HOME}/bin/ICHIGEKI 
# chmod 700 ${HOME}/bin/ICHIGEKI 
# vi ${HOME}/bin/ICHIGEKI 
# md5sum ICHIGEKI 
c5f0cccb4e3afdc152ea099afdb13295 ICHIGEKI
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
[root@ichigeki-wp ~]# ICHIGEKI 
SSHのセッションが切れ、しばらくしてからブラウザでアクセスして 
みましょう。WordPressのインストール画面が表示されればOKです。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# yum list installed nginx php* mysql* 
Loaded plugins: fastestmirror, security 
Loading mirror speeds from cached hostfile 
* epel: ftp.kddilabs.jp 
Installed Packages 
mysql.x86_64 5.1.73-3.el6_5 @updates 
mysql-libs.x86_64 5.1.73-3.el6_5 @updates 
mysql-server.x86_64 5.1.73-3.el6_5 @updates 
nginx.x86_64 1.7.6-1.el6.ngx @nginx 
php-cli.x86_64 5.6.2-1.el6.remi @remi-php56 
php-common.x86_64 5.6.2-1.el6.remi @remi-php56 
php-fpm.x86_64 5.6.2-1.el6.remi @remi-php56 
php-mbstring.x86_64 5.6.2-1.el6.remi @remi-php56 
php-mysqlnd.x86_64 5.6.2-1.el6.remi @remi-php56 
php-opcache.x86_64 5.6.2-1.el6.remi @remi-php56 
php-pdo.x86_64 5.6.2-1.el6.remi @remi-php56 
php-pear.noarch 1:1.9.4-4.el6 @base 
php-pecl-apcu.x86_64 4.0.7-1.el6.remi.5.6 @remi-php56 
php-pecl-jsonc.x86_64 1.3.6-1.el6.remi.5.6.1 @remi-php56 
php-pecl-zip.x86_64 1.12.4-2.el6.remi.5.6 @remi-php56 
php-xml.x86_64 5.6.2-1.el6.remi @remi-php56 
php-xmlrpc.x86_64 5.6.2-1.el6.remi @remi-php56
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# diff -y /etc/fail2ban/jail.conf 
/etc/fail2ban/jail.conf.orig | egrep '([[:space:]]*|)' 
sendmail-whois[name=SSH, dest=root@localhost, send | sendmail-whois[name=SSH, dest=you@example.com, sen 
sendmail-whois[name=ProFTPD, dest=root@localhost] | sendmail-whois[name=ProFTPD, dest=you@example.com] 
sendmail-whois[name=GSSFTPd, dest=root@localhost] | sendmail-whois[name=GSSFTPd, dest=you@example.com] 
sendmail-whois[name=sasl, dest=root@localhost] | sendmail-whois[name=sasl, dest=you@example.com] 
sendmail-whois[name=SSH, dest=root@localhost] | sendmail-whois[name=SSH, dest=you@example.com] 
sendmail[name=Postfix, dest=root@localhost] | sendmail[name=Postfix, dest=you@example.com] 
action = sendmail-whois[name=VSFTPD, dest=root@localhost] | action = sendmail-whois[name=VSFTPD, dest=you@example.com] 
sendmail-whois[name=VSFTPD, dest=root@localhost] | sendmail-whois[name=VSFTPD, dest=you@example.com] 
sendmail-buffered[name=BadBots, lines=5, dest=root | sendmail-buffered[name=BadBots, lines=5, dest=you@ 
sendmail[name=Postfix, dest=root@localhost] | sendmail[name=Postfix, dest=you@example.com] 
sendmail-whois[name=openwebmail, dest=root@localho | sendmail-whois[name=openwebmail, dest=you@example. 
sendmail-whois[name="SSH,IPFW", dest=root@localhos | sendmail-whois[name="SSH,IPFW", dest=you@example.c 
# sendmail-whois[name=Named, dest=root@localhost] | # sendmail-whois[name=Named, dest=you@example.com] 
sendmail-whois[name=Named, dest=root@localhost] | sendmail-whois[name=Named, dest=you@example.com] 
sendmail-whois[name=Asterisk, dest=root@localhost, | sendmail-whois[name=Asterisk, dest=you@example.com 
sendmail-whois[name=Asterisk, dest=root@localhost, | sendmail-whois[name=Asterisk, dest=you@example.com 
sendmail-whois[name=Asterisk, dest=root@localhost, | sendmail-whois[name=Asterisk, dest=you@example.com 
sendmail-whois[name=MySQL, dest=root, sender=fail2 | sendmail-whois[name=MySQL, dest=root, sender=fail2 
sendmail-whois[name=SSH, dest=root@localhost, send | sendmail-whois[name=SSH, dest=you@example.com, sen 
blocklist_de[email="fail2ban@localhost", apikey="x | blocklist_de[email="fail2ban@example.com", apikey= 
sendmail-whois[name=Nagios, dest=root@localhost, s | sendmail-whois[name=Nagios, dest=you@example.com,
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# grep “ Ban “ /var/log/fail2ban.log
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!)
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!)
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# iptables -L -n 
Chain INPUT (policy DROP) 
target prot opt source destination 
fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 
Chain FORWARD (policy DROP) 
target prot opt source destination 
Chain OUTPUT (policy ACCEPT) 
target prot opt source destination 
Chain fail2ban-SSH (1 references) 
target prot opt source destination 
RETURN all -- 0.0.0.0/0 0.0.0.0/0
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# ss -antu 
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port 
udp UNCONN 0 0 133.242.xx.xx:123 *:* 
udp UNCONN 0 0 127.0.0.1:123 *:* 
udp UNCONN 0 0 *:123 *:* 
udp UNCONN 0 0 fe80::9ea3:baff:fe24:9fe5:123 :::* 
udp UNCONN 0 0 ::1:123 :::* 
udp UNCONN 0 0 :::123 :::* 
tcp LISTEN 0 128 *:80 *:* 
tcp LISTEN 0 128 :::22 :::* 
tcp LISTEN 0 128 *:22 *:* 
tcp LISTEN 0 100 ::1:25 :::* 
tcp LISTEN 0 100 127.0.0.1:25 *:* 
tcp LISTEN 0 128 127.0.0.1:9000 *:* 
tcp LISTEN 0 50 *:3306 *:* 
tcp ESTAB 0 192 133.242.xx.xx:22 XXX.X.XX.XXX:35743
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# lsof -i:80 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
nginx 1237 root 6u IPv4 9507 0t0 TCP *:http (LISTEN) 
nginx 1240 nginx 6u IPv4 9507 0t0 TCP *:http (LISTEN)
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# lsof -i:9000 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
php-fpm 1221 root 8u IPv4 9471 0t0 TCP localhost:cslistener (LISTEN) 
php-fpm 1222 nginx 0u IPv4 9471 0t0 TCP localhost:cslistener (LISTEN) 
php-fpm 1223 nginx 0u IPv4 9471 0t0 TCP localhost:cslistener (LISTEN) 
php-fpm 1224 nginx 0u IPv4 9471 0t0 TCP localhost:cslistener (LISTEN) 
php-fpm 1225 nginx 0u IPv4 9471 0t0 TCP localhost:cslistener (LISTEN) 
php-fpm 1226 nginx 0u IPv4 9471 0t0 TCP localhost:cslistener (LISTEN)
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# service nginx configtest 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
nginx: configuration file /etc/nginx/nginx.conf test is successful 
# service php-fpm configtest 
[23-Oct-2014 03:23:31] NOTICE: configuration file /etc/php-fpm.conf test is successful
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# lsof -i:3306 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
mysqld 1117 mysql 10u IPv4 9061 0t0 TCP *:mysql (LISTEN)
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# for A in nginx php-fpm mysqld; do 
chkconfig $A --list; done 
nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off 
php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off 
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# cat ${HOME}/.mysql/MySQLPARAM
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# mysql -u root -p$(cat ${HOME}/.mysql/MySQLPARAM | 
grep ^user | awk '{print $NF}') -e 'show databases;' 
+--------------------+ 
| Database | 
+--------------------+ 
| information_schema | 
| mysql | 
| wordpress | 
+--------------------+ 
※ wordpressデータベースができていることを確認
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# mysql -u root -p$(cat ${HOME}/.mysql/MySQLPARAM | 
grep ^user | awk '{print $NF}') -e 'show create 
database wordpress;' 
+-----------+--------------------------------------------------------------------+ 
| Database | Create Database | 
+-----------+--------------------------------------------------------------------+ 
| wordpress | CREATE DATABASE `wordpress` /*!40100 DEFAULT CHARACTER SET utf8 */ | 
+-----------+--------------------------------------------------------------------+ 
※ wordpressデータベースの文字コードがutf8であることを確認
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# mysql -u root -p$(cat ${HOME}/.mysql/MySQLPARAM | 
grep ^user | awk '{print $NF}') -e 'select 
user,password,host from mysql.user;' 
+--------+-------------------------------------------+-----------+ 
| user | password | host | 
+--------+-------------------------------------------+-----------+ 
| root | *745B85E794675E2661442BAE9C024DD7D692E926 | localhost | 
| root | | 127.0.0.1 | 
| wpuser | *C65CFBF464BBDFEA46175158DD85C24FDC5485A3 | localhost | 
+--------+-------------------------------------------+-----------+ 
※root@localhost wpuser@localhostにパスワードが付与されていることを確認
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
nginxのドキュメントルートはどこ? 
# grep ^[[:space:]]*root /etc/nginx/conf.d/000_VHOST.conf 
root /var/www/<IPアドレス>;
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# ls -A /var/www/IPアドレス/ 
index.php wp-admin wp-content wp-login.php xmlrpc.php 
license.txt wp-blog-header.php wp-cron.php wp-mail.php 
readme-ja.html wp-comments-post.php wp-includes wp-settings.php 
readme.html wp-config-sample.php wp-links-opml.php wp-signup.php 
wp-activate.php wp-config.php wp-load.php wp-trackback.php
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# cd /var/www/IPアドレス/ 
# diff -y wp-config-sample.php wp-config.php | egrep 
'([[:space:]]*|)' 
define('DB_NAME', 'database_name_here'); | define('DB_NAME', 'wordpress'); 
define('DB_USER', 'username_here'); | define('DB_USER', 'wpuser'); 
define('DB_PASSWORD', 'password_here'); | define('DB_PASSWORD', 'P@sSw0Rd'); 
define('AUTH_KEY', 'put your unique phrase here' | define('AUTH_KEY', 'BlmCiQxGJt4evqPsDXWAFArphewZwk2N' 
define('SECURE_AUTH_KEY', 'put your unique phrase here' | define('SECURE_AUTH_KEY', 'BlmCiQxGJt4evqPsDXWAFArphewZwk2N' 
define('LOGGED_IN_KEY', 'put your unique phrase here' | define('LOGGED_IN_KEY', 'BlmCiQxGJt4evqPsDXWAFArphewZwk2N' 
define('NONCE_KEY', 'put your unique phrase here' | define('NONCE_KEY', 'BlmCiQxGJt4evqPsDXWAFArphewZwk2N' 
define('AUTH_SALT', 'put your unique phrase here' | define('AUTH_SALT', 'BlmCiQxGJt4evqPsDXWAFArphewZwk2N' 
define('SECURE_AUTH_SALT', 'put your unique phrase here' | define('SECURE_AUTH_SALT', 'BlmCiQxGJt4evqPsDXWAFArphewZwk2N' 
define('LOGGED_IN_SALT', 'put your unique phrase here' | define('LOGGED_IN_SALT', 'BlmCiQxGJt4evqPsDXWAFArphewZwk2N' 
define('NONCE_SALT', 'put your unique phrase here' | define('NONCE_SALT', 'BlmCiQxGJt4evqPsDXWAFArphewZwk2N'
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
どうせなら単一のホストだけではなくバーチャル 
ホストも一撃サーバーで運用したい・・・という 
声が聞こえてきたので、一撃スクリプト作っちゃ 
いました。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
http://nullpopopo.blogcube.info/〜〜〜〜
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
●コマンドライン一発でWordPressがインストー 
ルされたバーチャルホストを構築 
●勿論バーチャルホストの削除も可能 
●バーチャルホスト削除時にはコンテンツとDBを 
自動バックアップ
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
スクリプト起動 
第1引数が create の場合 
第1引数が delete の場合 
第1引数が その他の場合 
引数が6つでなければ、使い方を表示して異常終了する。 
引数が6つであれば、関数CREATEを実行する。 
引数が2つでなければ、使い方を表示して異常終了する。 
引数が2つであれば、関数DELETEを実行する。 
使い方を表示して異常終了する。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
使い方 (バーチャルホスト作成) 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
使い方 (バーチャルホスト作成) 
バーチャルホスト名 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
使い方 (バーチャルホスト作成) 
ブログのタイトル 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
使い方 (バーチャルホスト作成) 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com 
ブログの 
ログインID
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
使い方 (バーチャルホスト作成) 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com 
ブログの 
ログインパスワード
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
使い方 (バーチャルホスト作成) 
# VHMAINTE create www.example.com "ぬるぽぽぽのブログ" 
nullpopopo BlogP@ssw0rd_is_here youremail@example.com 
メールアドレス
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
使い方 (バーチャルホスト削除) 
# VHMAINTE delete www.example.com
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
関数 CREATE でやっていること 
1.DB名を作成する (wpdb0000〜) 
2.DBユーザー名を作成する (user0000〜) 
3.DBパラメータファイル作成 
4.DB作成 
5.DBユーザー作成 
6.ドキュメントルート作成 
7.WordPressインストール 
8.nginx設定ファイル生成 
9.nginx再起動
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# cat bin/VHMAINTE | head 
#!/bin/bash 
set -e 
LANG=C 
FQDN=$2 
BLOGTITLE=$3 
AdminUsername=$4 
AdminPassword=$5 
AdminEmail=$6 
バーチャルホスト作成時に引数として 
指定する内容
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
bashの引数 
$0 実行時のコマンド名 
$1〜$n シェルスクリプト実行時に渡す引数
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# cat bin/VHMAINTE | head -n 13 | tail -n 3 
DROOT=/var/www/${FQDN} 
ドキュメントルートのディレクトリ 
/var/www/www.example.com のように 
引数に与えたFQDNがディレクトリ名となる。 
ETH0=$(ip a show eth0 | grep inet | grep -v inet6 | awk '{print $2}' | sed -e "s//[0- 
9]*//") 
eth0のIPアドレスをipコマンドから取得 
PARAMFILE=${HOME}/.mysql/MySQLPARAM 
MySQLのパラメータファイル名を変数に格納
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# cat bin/VHMAINTE | head -n 20 | tail -n 6 
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のインストール!
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
wp-cliとは? 
WordPress本体のインストール、アップデートか 
らプラグインやテーマのインストールやアップ 
デートまでほぼすべての操作がコマンドラインか 
らできてしまう! 
_人人人人人人人人人_ 
> まさにシェル芸 < 
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
http://wp-cli.org/
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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、そしてバックアッ 
プファイルを除く)の数をもとに採番する
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# 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」にまとめた
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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、そしてバックアッ 
プファイルを除く)の数をもとに採番する
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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の権 
限テーブルを再読み込みする。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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 | 
+--------------------+
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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 */ | 
+----------+-------------------------------------------------------------------+
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
変数 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=<フルパス>」でインストール先 
ディレクトリを指定できるので、ここではバーチャルホストのドキュメ 
ントルートを指定します。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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を指定せずにカレントディレクトリで作業する。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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を指定せずにカレントディ 
レクトリで作業する。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
cp -p /etc/nginx/conf.d/000_VHOST.conf /etc/nginx/conf.d/$ 
{FQDN}.conf 
IPアドレスでアクセスした時に表示する 
バーチャルホストのconfigファイルをも 
とに、新しく作成するバーチャルホスト 
のconfigファイルを生成(コピー)する。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
sed -i s/${ETH0}/${FQDN}/g /etc/nginx/conf.d/${FQDN}.conf 
configファイル中のIPアドレスをバー 
チャルホスト名に置換する。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
sed -i 's/^}$//g' /etc/nginx/conf.d/${FQDN}.conf 
ログの設定をserverディレクティブに追 
記するため、一旦ディレクティブの閉じ 
カッコを削除する。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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ディレクティブに追 
記し、一旦削除したディレクティブの閉 
じカッコを追記する。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
service nginx reload 
nginxの設定ファイルを再読み込みする。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# 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;
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# 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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# 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 
}
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
関数 DELETE でやっていること 
1.nginx設定ファイルをリネーム 
2.nginx再起動 
3.DBバックアップ 
4.DB削除 
5.DBユーザー削除 
6.パラメータファイルから該当FQDNを削除
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# 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」にまとめた
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# grep include /etc/nginx/nginx.conf 
include /etc/nginx/mime.types; 
include /etc/nginx/conf.d/*.conf;
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
ドキュメントルートのディレクトリを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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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行書かれていたら実行する
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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 
になる。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
mysql -u root -p$(grep ^user ${PARAMFILE} | awk '{print $NF}')  
-e "drop database ${DBNAME};" 
wpdb0000 データベースを削除する
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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 
データベースから削除し、権限情報を再読み込みする。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
cp -p ${PARAMFILE} ${PARAMFILE}.$(date +%Y%m%d%H%M%S) 
grep -v ${DBUSER} ${PARAMFILE}.$(date +%Y%m%d%H%M%S) > ${PARAMFILE} 
パラメータファイルをバックアップし、削除対象のFQDN 
以外をパラメータファイルに残す。
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
# 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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
おまけ: wp-cliによるWordPressシェル芸
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
IPアドレスのバーチャルホストでWordPressを使えるようにする
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
IPアドレスのバーチャルホストでWordPressを使えるようにする 
_人人人人人人人人人人人人人人人人人_ 
> コマンドラインでも確認したい! < 
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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 | 
+----+--------------+-------------+---------------------+-------------+
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
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アドレス>/ 
(っ´∀`)っ ゃー
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
PostID 1のタイトルを変更してみる
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
コマンドラインから新しい記事を投稿してみる 
※ いきなり公開状態でポスト名をUNIXタイムにし、ポストタイトル 
を「ぬるぽぽぽ」、本文を「(っ´∀`)っ ゃー」で投稿する 
# wp post create --post_status=publish --post_name=$(date +%s) 
–-post_title='ぬるぽぽぽ' --post_content='(っ´∀`)っ ゃー' -– 
path=/var/www/<IPアドレス>/ 
Success: Created post 4.
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
コマンドラインから新しい記事を投稿してみる
第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 
お疲れ様でした!

More Related Content

What's hot

2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
airtoxin Ishii
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
Takashi Takizawa
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
Takeshi Komiya
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
tamtam180
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
tamtam180
 

What's hot (20)

今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChef
 
Zabbixを2分でインストール
Zabbixを2分でインストールZabbixを2分でインストール
Zabbixを2分でインストール
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Fabric Essentials
Fabric EssentialsFabric Essentials
Fabric Essentials
 
Okinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - AnsibleOkinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - Ansible
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
nginx入門
nginx入門nginx入門
nginx入門
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
HTTP/2 in nginx(2016/3/11 社内勉強会)
HTTP/2 in nginx(2016/3/11 社内勉強会)HTTP/2 in nginx(2016/3/11 社内勉強会)
HTTP/2 in nginx(2016/3/11 社内勉強会)
 

Viewers also liked

20110211 nullpopopo diet
20110211 nullpopopo diet20110211 nullpopopo diet
20110211 nullpopopo diet
Yasutaka Hamada
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料
Yasutaka Hamada
 
dbts2013:MariaDB Galera Cluster 活用例
dbts2013:MariaDB Galera Cluster 活用例dbts2013:MariaDB Galera Cluster 活用例
dbts2013:MariaDB Galera Cluster 活用例
Jun Shimizu
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
Yoshinori Matsunobu
 

Viewers also liked (13)

2015/06/27 sakuraclub LT @nullpopopo
2015/06/27 sakuraclub LT @nullpopopo2015/06/27 sakuraclub LT @nullpopopo
2015/06/27 sakuraclub LT @nullpopopo
 
第4回 一撃サーバー構築シェルスクリプト勉強会(もくもく) 発表資料 - さくらのクラウド操作案内
第4回 一撃サーバー構築シェルスクリプト勉強会(もくもく) 発表資料 - さくらのクラウド操作案内第4回 一撃サーバー構築シェルスクリプト勉強会(もくもく) 発表資料 - さくらのクラウド操作案内
第4回 一撃サーバー構築シェルスクリプト勉強会(もくもく) 発表資料 - さくらのクラウド操作案内
 
不健康極まりない現役エンジニア生活を送っていたぼくが余生モードになって健康についていろいろ考えてみた
不健康極まりない現役エンジニア生活を送っていたぼくが余生モードになって健康についていろいろ考えてみた不健康極まりない現役エンジニア生活を送っていたぼくが余生モードになって健康についていろいろ考えてみた
不健康極まりない現役エンジニア生活を送っていたぼくが余生モードになって健康についていろいろ考えてみた
 
楽しい怪しいシェルスクリプト - 第4回つくらぐ勉強会
楽しい怪しいシェルスクリプト - 第4回つくらぐ勉強会楽しい怪しいシェルスクリプト - 第4回つくらぐ勉強会
楽しい怪しいシェルスクリプト - 第4回つくらぐ勉強会
 
20110211 nullpopopo diet
20110211 nullpopopo diet20110211 nullpopopo diet
20110211 nullpopopo diet
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料
 
20101211 #
20101211 #20101211 #
20101211 #
 
みんなそろそろ707やめようぜ (;´Д`)
みんなそろそろ707やめようぜ (;´Д`)みんなそろそろ707やめようぜ (;´Д`)
みんなそろそろ707やめようぜ (;´Д`)
 
dbts2013:MariaDB Galera Cluster 活用例
dbts2013:MariaDB Galera Cluster 活用例dbts2013:MariaDB Galera Cluster 活用例
dbts2013:MariaDB Galera Cluster 活用例
 
MariaDB+GaleraClusterの運用事例(MySQL勉強会2016-01-28)
MariaDB+GaleraClusterの運用事例(MySQL勉強会2016-01-28)MariaDB+GaleraClusterの運用事例(MySQL勉強会2016-01-28)
MariaDB+GaleraClusterの運用事例(MySQL勉強会2016-01-28)
 
MaxScaleを触ってみた
MaxScaleを触ってみたMaxScaleを触ってみた
MaxScaleを触ってみた
 
はじめてのgithub
はじめてのgithubはじめてのgithub
はじめてのgithub
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 

Similar to 2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料

OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
Etsuji Nakai
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
 
Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)
Kimiyuki Yamauchi
 

Similar to 2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料 (20)

Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presen
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
 
Open VZ
Open VZOpen VZ
Open VZ
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
 
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
 
Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)
 
CentOSでつくる神Plesk
CentOSでつくる神PleskCentOSでつくる神Plesk
CentOSでつくる神Plesk
 

More from Yasutaka Hamada

うっかりyum updateでコケちゃってもさくらのVPSならレスキューモードでデータ吸い出せるぜ
うっかりyum updateでコケちゃってもさくらのVPSならレスキューモードでデータ吸い出せるぜうっかりyum updateでコケちゃってもさくらのVPSならレスキューモードでデータ吸い出せるぜ
うっかりyum updateでコケちゃってもさくらのVPSならレスキューモードでデータ吸い出せるぜ
Yasutaka Hamada
 

More from Yasutaka Hamada (20)

試験前に抑えておきたいRTX/vRX VPN接続
試験前に抑えておきたいRTX/vRX VPN接続試験前に抑えておきたいRTX/vRX VPN接続
試験前に抑えておきたいRTX/vRX VPN接続
 
「いきなり{非機能要求グレード,PCIDSS}担当にさせられた!どうする!?」
「いきなり{非機能要求グレード,PCIDSS}担当にさせられた!どうする!?」「いきなり{非機能要求グレード,PCIDSS}担当にさせられた!どうする!?」
「いきなり{非機能要求グレード,PCIDSS}担当にさせられた!どうする!?」
 
うっかりyum updateでコケちゃってもさくらのVPSならレスキューモードでデータ吸い出せるぜ
うっかりyum updateでコケちゃってもさくらのVPSならレスキューモードでデータ吸い出せるぜうっかりyum updateでコケちゃってもさくらのVPSならレスキューモードでデータ吸い出せるぜ
うっかりyum updateでコケちゃってもさくらのVPSならレスキューモードでデータ吸い出せるぜ
 
ぬるぽぽ2019年アウトプットの振り返り
ぬるぽぽ2019年アウトプットの振り返りぬるぽぽ2019年アウトプットの振り返り
ぬるぽぽ2019年アウトプットの振り返り
 
ヤマハで作るセキュアで逸般的なサテライトネットワーク
ヤマハで作るセキュアで逸般的なサテライトネットワークヤマハで作るセキュアで逸般的なサテライトネットワーク
ヤマハで作るセキュアで逸般的なサテライトネットワーク
 
学びの掛け算 コアスキルになにかを掛けろ この先生きのこるための生存戦略 - Strategy -
学びの掛け算 コアスキルになにかを掛けろ この先生きのこるための生存戦略 - Strategy -学びの掛け算 コアスキルになにかを掛けろ この先生きのこるための生存戦略 - Strategy -
学びの掛け算 コアスキルになにかを掛けろ この先生きのこるための生存戦略 - Strategy -
 
2019 10-04 cross-party nullpopopo
2019 10-04 cross-party nullpopopo2019 10-04 cross-party nullpopopo
2019 10-04 cross-party nullpopopo
 
ゆで太郎はいいぞ - コミュニケーションツールとしてのゆで太郎活用TIPS
ゆで太郎はいいぞ - コミュニケーションツールとしてのゆで太郎活用TIPSゆで太郎はいいぞ - コミュニケーションツールとしてのゆで太郎活用TIPS
ゆで太郎はいいぞ - コミュニケーションツールとしてのゆで太郎活用TIPS
 
ニフクラとヤマハルーターで作るセキュアなオフィス環境
ニフクラとヤマハルーターで作るセキュアなオフィス環境ニフクラとヤマハルーターで作るセキュアなオフィス環境
ニフクラとヤマハルーターで作るセキュアなオフィス環境
 
ヤマハルーターとクラウドをVPNで繋いでDaaS環境を構築しよう
ヤマハルーターとクラウドをVPNで繋いでDaaS環境を構築しようヤマハルーターとクラウドをVPNで繋いでDaaS環境を構築しよう
ヤマハルーターとクラウドをVPNで繋いでDaaS環境を構築しよう
 
君はxDSLを体感したか? Yahoo! BB ADSL終了記念カキコ
君はxDSLを体感したか? Yahoo! BB ADSL終了記念カキコ君はxDSLを体感したか? Yahoo! BB ADSL終了記念カキコ
君はxDSLを体感したか? Yahoo! BB ADSL終了記念カキコ
 
@nullpopopo が考える、未来のプレゼン | 明日に向かって
@nullpopopo が考える、未来のプレゼン | 明日に向かって@nullpopopo が考える、未来のプレゼン | 明日に向かって
@nullpopopo が考える、未来のプレゼン | 明日に向かって
 
ゆで太郎エヴァンジェリスト 濱田康貴
ゆで太郎エヴァンジェリスト 濱田康貴ゆで太郎エヴァンジェリスト 濱田康貴
ゆで太郎エヴァンジェリスト 濱田康貴
 
平成生まれにこそススメたい!さくらとヤマハのハイブリッド!
平成生まれにこそススメたい!さくらとヤマハのハイブリッド!平成生まれにこそススメたい!さくらとヤマハのハイブリッド!
平成生まれにこそススメたい!さくらとヤマハのハイブリッド!
 
concrete5もシェルスクリプトで一撃ダウンロードしようず
concrete5もシェルスクリプトで一撃ダウンロードしようずconcrete5もシェルスクリプトで一撃ダウンロードしようず
concrete5もシェルスクリプトで一撃ダウンロードしようず
 
「なりたい自分」になろう - 自分探しエンジニアの生存戦略 - インフラエンジニアのためのキャリアセミナー2018 アンケート結果
「なりたい自分」になろう - 自分探しエンジニアの生存戦略 - インフラエンジニアのためのキャリアセミナー2018 アンケート結果「なりたい自分」になろう - 自分探しエンジニアの生存戦略 - インフラエンジニアのためのキャリアセミナー2018 アンケート結果
「なりたい自分」になろう - 自分探しエンジニアの生存戦略 - インフラエンジニアのためのキャリアセミナー2018 アンケート結果
 
「なりたい自分」になろう - 自分探しエンジニアの生存戦略 - インフラエンジニアのためのキャリアセミナー2018
「なりたい自分」になろう - 自分探しエンジニアの生存戦略 - インフラエンジニアのためのキャリアセミナー2018「なりたい自分」になろう - 自分探しエンジニアの生存戦略 - インフラエンジニアのためのキャリアセミナー2018
「なりたい自分」になろう - 自分探しエンジニアの生存戦略 - インフラエンジニアのためのキャリアセミナー2018
 
NVRシリーズで始める はじめてのヤマハルーター Interop2018
NVRシリーズで始める はじめてのヤマハルーター Interop2018NVRシリーズで始める はじめてのヤマハルーター Interop2018
NVRシリーズで始める はじめてのヤマハルーター Interop2018
 
スタートアップこそOffice365で業務効率化
スタートアップこそOffice365で業務効率化スタートアップこそOffice365で業務効率化
スタートアップこそOffice365で業務効率化
 
2017/09/27 さくらの夕べ-さくらのvps ユーザーミートアップ LT
2017/09/27 さくらの夕べ-さくらのvps ユーザーミートアップ LT2017/09/27 さくらの夕べ-さくらのvps ユーザーミートアップ LT
2017/09/27 さくらの夕べ-さくらのvps ユーザーミートアップ LT
 

2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料