第1回 一撃サーバー構築シェルスクリプト勉強会

68
1回 一撃サーバー構築シェルスクリプト勉強会 USP友の会 @nullpopopo

Upload: yasutaka-hamada

Post on 24-Jan-2015

3.273 views

Category:

Internet


1 download

DESCRIPTION

2014/09/06 開催の第1回 一撃サーバー構築シェルスクリプト勉強会 発表資料です。

TRANSCRIPT

Page 1: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

USP友の会@nullpopopo

Page 2: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

[自己紹介]名前: 濱田康貴 ( @nullpopopo )

USP友の会http://www.usptomo.com/Bloghttp://nullpopopo.blogcube.info/Facebookhttps://www.facebook.com/nullpopopo

著書: USP Magazine教えて先輩♡サーバー運用お助けTIPS隔月連載中

Page 3: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

ちょっとお知らせ

Page 4: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

今日は危険じゃありません

Page 5: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

最初に宣伝

Page 6: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

第13回危険でない方のシェル芸勉強会&第31回安全だと声高に叫ぶと逆にどうなのかUSP友の会定例会http://usptomo.doorkeeper.jp/events/15021

Page 7: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

USP友の会でシェル芸以外の勉強会は

2012/06/24 以来。

※ ちなみにシェル芸勉強会は2012/10/27より開始

Page 8: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 9: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

本当に地獄でした。。。 (;´Д`)

Page 10: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

その前は?

Page 11: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

2012/3/31 Apacheスタートスクリプト読書会2012/2/19 やわらかマッドサイエンティスツの

プログラミング入門

Page 12: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

( ´-`)。oO( 喋り方忘れた・・・ )

Page 13: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

本日のおしながき● 席替え、全体説明● 変数設定、アップデート● fail2ban、iptables設定● パッケージインストール● MySQL設定● PHP設定● WordPress インストール● nginx設定● 再起動● LTタイム

Page 14: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

席替え

Page 15: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

3名1組でチームを作ります。

受付で番号のついた付箋紙を受け取られた方は、その番号の指定席へ移動願います。

座席に付箋紙を持った方がいない場合は、無地の付箋紙を受け取られた方と座席交換してください。

Page 16: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

全体説明

Page 17: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

一撃サーバー構築シェルスクリプト (一撃スクリプト) 勉強会が目指すもの

Page 18: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

● 一度の実行でサーバー構築の全工程を終わらせるスクリプトを作成できるようになる

● 管理のための環境構築が不要で、さくらのクラウド スタートアップスクリプトと親和性が高いことを体験する

Page 19: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

スタートアップスクリプト とは

Page 20: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

サーバ作成時にアプリケーションのインストールやサーバ設定を自動的に行う「スタートアップスクリプト」

サーバを作成する際に、任意のシェルスクリプトを記述した「スタートアップスクリプト」を選択することにより、 起動時にそれらを自動的に実行できます。この機能によりあらかじめ必要なアプリケーションをインストールや、 サーバ設定の自動化も行えます。

※スタートアップスクリプト機能は現在、CentOS、ScientificLinux環境のみで動作します。 ※ http://cloud.sakura.ad.jp/feature.php より引用

Page 21: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

スタートアップスクリプト内で使用できる特殊タグ

Page 22: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

@sacloud-onceシェルスクリプト中のコメントに以下のように記述すると、OS起動時に1回だけ(OSインストール後初回起動時のみ)実行されます。

記述例# @sacloud-once

これにより、yumコマンドによるアップデートやrebootコマンドによる再起動(kernelやglibcアップデート後の反映)をスタートアップスクリプト内にて行うことができます。

※ @sacloud-once の記述を忘れてrebootコマンドをスタートアップスクリプトで実行すると、起動→再起動→再起動→(以下エンドレス)という地獄を味わってしまいます。。。

Page 23: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

@sacloud-desc以下のように、1行コメントをつけることができます。

# @sacloud-desc これはコメントです

@sacloud-desc-begin / @sacloud-desc-end

以下のように、複数行のコメントをつけることができます。

# @sacloud-desc-begin# このように# 複数行のコメントをつけることができます。# @sacloud-desc-end

Page 24: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

コーディングルール

Page 25: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

[コーディングルール(非機能要件)]

● rootユーザーでOSインストール直後に1回のみ実行されるものとする

● 外部シェルスクリプトの作成、呼び出しは原則不可。ただし、一撃スクリプト内で生成して別ファイルに出力し、一撃スクリプトから呼び出すことができれば可能。

● 対話式コマンドはできるだけ避ける

Page 26: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

その他

● そもそも一撃ですべてを終わらせるのと、OSインストール直後の環境は原則として同一なため、ifの条件分岐などはあまり考慮しなくてよいです

●同様に、再実行を考慮したスクリプト設計は不要です

Page 27: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

機能要件

● http://IPアドレス/ でWordPressのインストール画面が表示されること

● WordPressインストール後、パーマリンク設定を変更しても表示に問題がないこと

Page 28: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

非機能要件

● WEBサーバは nginx + PHP-FPMとし、nginx は mainline からインストールする

● PHPは5.5または5.6をインストールする(php-cli php-common php-mbstring php-pdo php-xml php-mysqlnd php-pecl-apcu php-xmlrpc php-opcache php-fpm)

Page 29: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

非機能要件

● MySQL Serverは標準リポジトリからインストールする

● MySQLのrootパスワード、WordPress接続用ユーザのパスワードは自動生成する

● mysql_secure_installation と同等の処理を行う

Page 30: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

変数設定アップデート

Page 31: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

#!/bin/bash# @sacloud-once

DBNAME=wordpressDBUSER=wpuserETH0=$(ip a show eth0 | grep inet | grep -v inet6 | awk '{print $2}' | sed -e "s/\/[0-9]*//")HOME=/rootexport HOMEUSER=rootexport USER################################################################################# Section1 yum update

yum -y update################################################################################

Page 32: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

fail2ban、iptables設定

Page 33: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

fail2ban設定内容

メール宛先と送信元のドメインが example.com なので、これを localhost に変更する

Page 34: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

iptables設定内容

● 受信パケットは一旦破棄する● 送信パケットはすべて許可する● パケット転送は許可しない● localhostからのアクセスをすべて許可する● 内部から行ったアクセスに対する外部からの返答アクセスを許可する

● 外部からのTCP22番ポート(SSH)へのアクセスを許可する● 外部からのTCP80番ポート(HTTP)へのアクセスを許可する

Page 35: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

パッケージインストール

Page 36: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

[nginx]● リポジトリ取得● mainlineからインストールするよう nginx.repo を変更する

● nginxインストール

Page 37: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

nginxのバージョンは3種類http://nginx.org/en/download.html

Page 38: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

[PHP]● remi-release-6リポジトリ取得● php-cli php-common php-mbstring php-pdo php-xml php-mysqlnd php-pecl-apcu php-xmlrpc php-opcache php-fpm インストール

Page 39: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

PHPの歩みhttp://www.slideshare.net/hirokawa/php-con2013ub より

Page 40: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

http://sourceforge.jp/magazine/14/08/30/084800

Page 41: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

[MySQL]●標準リポジトリより mysql-server をインストール

Page 42: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Let's Coding

Page 43: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

MySQL設定

Page 44: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

ポイント

● rootユーザのパスワードはランダムに生成したい(固定値にしちゃうと、漏れたときのリスクが同じスクリプトを使って作ったサーバすべてに及ぶ)

● WordPress接続用のユーザーも、同様にパスワードをランダムに生成する

● mysqlコマンドに-eオプション

Page 45: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

● mysqldを起動し、スタートアップに登録する● MySQLのrootユーザとパスワードを作成し、パラメーターファイルに格納する。書式は user root <Password>

● WordPressのDBに関してパラメーターファイルに格納する。書式は DBPARAM DB名 DBユーザー名 <Password>

● MySQLのrootユーザーのパスワードを設定する。● WordPressのデータベースを作成する。● DBユーザー(WordPressデータベース接続用)のパスワードを変数

PWに格納する。● DBユーザーを作成する。

Page 46: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

● mysql_secure_installation 代替コマンド実行● 匿名ユーザーの削除● localhost以外からのrootログイン禁止● testデータベース削除

なぜmysql_secure_installationを使わないのか?→ 対話式のコマンドなので、入力待ちで止まってしまうため

● 権限情報の再読込

Page 47: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

パラメータファイル${HOME}/.mysql/MySQLPARAM

Page 48: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

PHP設定

Page 49: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

やること

● php.iniのタイムゾーン設定→ 余計なログを出したくないので、東京に合わせておく。

● php-fpmの実行ユーザー設定→ apacheからnginxへ変更する。

● php-fpmを起動し、スタートアップ登録する

Page 50: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Let's Coding

Page 51: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

WordPress インストール

Page 52: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

● ドキュメントルートは /var/www/IPアドレス

● githubからWordPressダウンローダーを取得するhttps://raw.githubusercontent.com/nullpopopo/wpdl/master/bin/wpdl

● WordPress ( latest-ja.tar.gz ) は ${HOME}/src/wordpress/current/ に保存される

● wp-config-sample.php から wp-config.php をコピーし、DB名、DBのユーザー名、パスワードを設定し、「put your unique phrase here」を32文字のランダムな文字列に置換する

● ドキュメントルートのユーザー・グループは nginx:root とする

Page 53: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

nginx設定

Page 54: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

参考URLhttp://wpdocs.sourceforge.jp/Nginxhttp://wiki.nginx.org/HttpCoreModule

Page 55: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

● /etc/nginx/nginx.conf を直接弄るのはworker_processesの数をコア数に合わせるくらいで、他は弄らない。

● /etc/nginx/conf.d/000_VHOST.conf にヒアドキュメントで設定を流し込む。

Page 56: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

# This order might seem weird - this is attempted to match last if rules below fail. # http://wiki.nginx.org/HttpCoreModuleJa#try_files location / { try_files \$uri \$uri/ /index.php?\$args; index index.php index.html index.htm; }

ファイルの存在を順に確認し、最初に確認できたファイルを返却します。$uri /のように末尾にスラッシュのついたパスはディレクトリを示します。ファイルが確認できなかった場合は、末尾に指定したパラメータに対して内部リダイレクトが行われます。末尾のパラメータはフォールバック用の URI で、必ず 存在している必要があります。存在していない場合は内部エラーが発生します。

Page 57: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

# Add trailing slash to */wp-admin requests.rewrite /wp-admin\$ \$scheme://\$host\$uri/ permanent;

リクエストURIが http://IPアドレス/wp-admin だったら、末尾にスラッシュをつけたURIにリライトする。

Page 58: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Let's Coding

Page 59: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 60: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 61: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 62: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 63: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 64: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 65: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 66: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 67: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

Page 68: 第1回 一撃サーバー構築シェルスクリプト勉強会

第1回 一撃サーバー構築シェルスクリプト勉強会

お疲れ様でした!