第1回 一撃サーバー構築シェルスクリプト勉強会
DESCRIPTION
2014/09/06 開催の第1回 一撃サーバー構築シェルスクリプト勉強会 発表資料です。TRANSCRIPT
第1回 一撃サーバー構築シェルスクリプト勉強会
USP友の会@nullpopopo
第1回 一撃サーバー構築シェルスクリプト勉強会
[自己紹介]名前: 濱田康貴 ( @nullpopopo )
USP友の会http://www.usptomo.com/Bloghttp://nullpopopo.blogcube.info/Facebookhttps://www.facebook.com/nullpopopo
著書: USP Magazine教えて先輩♡サーバー運用お助けTIPS隔月連載中
第1回 一撃サーバー構築シェルスクリプト勉強会
ちょっとお知らせ
第1回 一撃サーバー構築シェルスクリプト勉強会
今日は危険じゃありません
第1回 一撃サーバー構築シェルスクリプト勉強会
最初に宣伝
第1回 一撃サーバー構築シェルスクリプト勉強会
第13回危険でない方のシェル芸勉強会&第31回安全だと声高に叫ぶと逆にどうなのかUSP友の会定例会http://usptomo.doorkeeper.jp/events/15021
第1回 一撃サーバー構築シェルスクリプト勉強会
USP友の会でシェル芸以外の勉強会は
2012/06/24 以来。
※ ちなみにシェル芸勉強会は2012/10/27より開始
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
本当に地獄でした。。。 (;´Д`)
第1回 一撃サーバー構築シェルスクリプト勉強会
その前は?
第1回 一撃サーバー構築シェルスクリプト勉強会
2012/3/31 Apacheスタートスクリプト読書会2012/2/19 やわらかマッドサイエンティスツの
プログラミング入門
第1回 一撃サーバー構築シェルスクリプト勉強会
( ´-`)。oO( 喋り方忘れた・・・ )
第1回 一撃サーバー構築シェルスクリプト勉強会
本日のおしながき● 席替え、全体説明● 変数設定、アップデート● fail2ban、iptables設定● パッケージインストール● MySQL設定● PHP設定● WordPress インストール● nginx設定● 再起動● LTタイム
第1回 一撃サーバー構築シェルスクリプト勉強会
席替え
第1回 一撃サーバー構築シェルスクリプト勉強会
3名1組でチームを作ります。
受付で番号のついた付箋紙を受け取られた方は、その番号の指定席へ移動願います。
座席に付箋紙を持った方がいない場合は、無地の付箋紙を受け取られた方と座席交換してください。
第1回 一撃サーバー構築シェルスクリプト勉強会
全体説明
第1回 一撃サーバー構築シェルスクリプト勉強会
一撃サーバー構築シェルスクリプト (一撃スクリプト) 勉強会が目指すもの
第1回 一撃サーバー構築シェルスクリプト勉強会
● 一度の実行でサーバー構築の全工程を終わらせるスクリプトを作成できるようになる
● 管理のための環境構築が不要で、さくらのクラウド スタートアップスクリプトと親和性が高いことを体験する
第1回 一撃サーバー構築シェルスクリプト勉強会
スタートアップスクリプト とは
第1回 一撃サーバー構築シェルスクリプト勉強会
サーバ作成時にアプリケーションのインストールやサーバ設定を自動的に行う「スタートアップスクリプト」
サーバを作成する際に、任意のシェルスクリプトを記述した「スタートアップスクリプト」を選択することにより、 起動時にそれらを自動的に実行できます。この機能によりあらかじめ必要なアプリケーションをインストールや、 サーバ設定の自動化も行えます。
※スタートアップスクリプト機能は現在、CentOS、ScientificLinux環境のみで動作します。 ※ http://cloud.sakura.ad.jp/feature.php より引用
第1回 一撃サーバー構築シェルスクリプト勉強会
スタートアップスクリプト内で使用できる特殊タグ
第1回 一撃サーバー構築シェルスクリプト勉強会
@sacloud-onceシェルスクリプト中のコメントに以下のように記述すると、OS起動時に1回だけ(OSインストール後初回起動時のみ)実行されます。
記述例# @sacloud-once
これにより、yumコマンドによるアップデートやrebootコマンドによる再起動(kernelやglibcアップデート後の反映)をスタートアップスクリプト内にて行うことができます。
※ @sacloud-once の記述を忘れてrebootコマンドをスタートアップスクリプトで実行すると、起動→再起動→再起動→(以下エンドレス)という地獄を味わってしまいます。。。
第1回 一撃サーバー構築シェルスクリプト勉強会
@sacloud-desc以下のように、1行コメントをつけることができます。
# @sacloud-desc これはコメントです
@sacloud-desc-begin / @sacloud-desc-end
以下のように、複数行のコメントをつけることができます。
# @sacloud-desc-begin# このように# 複数行のコメントをつけることができます。# @sacloud-desc-end
第1回 一撃サーバー構築シェルスクリプト勉強会
コーディングルール
第1回 一撃サーバー構築シェルスクリプト勉強会
[コーディングルール(非機能要件)]
● rootユーザーでOSインストール直後に1回のみ実行されるものとする
● 外部シェルスクリプトの作成、呼び出しは原則不可。ただし、一撃スクリプト内で生成して別ファイルに出力し、一撃スクリプトから呼び出すことができれば可能。
● 対話式コマンドはできるだけ避ける
第1回 一撃サーバー構築シェルスクリプト勉強会
その他
● そもそも一撃ですべてを終わらせるのと、OSインストール直後の環境は原則として同一なため、ifの条件分岐などはあまり考慮しなくてよいです
●同様に、再実行を考慮したスクリプト設計は不要です
第1回 一撃サーバー構築シェルスクリプト勉強会
機能要件
● http://IPアドレス/ でWordPressのインストール画面が表示されること
● WordPressインストール後、パーマリンク設定を変更しても表示に問題がないこと
第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)
第1回 一撃サーバー構築シェルスクリプト勉強会
非機能要件
● MySQL Serverは標準リポジトリからインストールする
● MySQLのrootパスワード、WordPress接続用ユーザのパスワードは自動生成する
● mysql_secure_installation と同等の処理を行う
第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################################################################################
第1回 一撃サーバー構築シェルスクリプト勉強会
fail2ban、iptables設定
第1回 一撃サーバー構築シェルスクリプト勉強会
fail2ban設定内容
メール宛先と送信元のドメインが example.com なので、これを localhost に変更する
第1回 一撃サーバー構築シェルスクリプト勉強会
iptables設定内容
● 受信パケットは一旦破棄する● 送信パケットはすべて許可する● パケット転送は許可しない● localhostからのアクセスをすべて許可する● 内部から行ったアクセスに対する外部からの返答アクセスを許可する
● 外部からのTCP22番ポート(SSH)へのアクセスを許可する● 外部からのTCP80番ポート(HTTP)へのアクセスを許可する
第1回 一撃サーバー構築シェルスクリプト勉強会
パッケージインストール
第1回 一撃サーバー構築シェルスクリプト勉強会
[nginx]● リポジトリ取得● mainlineからインストールするよう nginx.repo を変更する
● nginxインストール
第1回 一撃サーバー構築シェルスクリプト勉強会
nginxのバージョンは3種類http://nginx.org/en/download.html
第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 インストール
第1回 一撃サーバー構築シェルスクリプト勉強会
PHPの歩みhttp://www.slideshare.net/hirokawa/php-con2013ub より
第1回 一撃サーバー構築シェルスクリプト勉強会
http://sourceforge.jp/magazine/14/08/30/084800
第1回 一撃サーバー構築シェルスクリプト勉強会
[MySQL]●標準リポジトリより mysql-server をインストール
第1回 一撃サーバー構築シェルスクリプト勉強会
Let's Coding
第1回 一撃サーバー構築シェルスクリプト勉強会
MySQL設定
第1回 一撃サーバー構築シェルスクリプト勉強会
ポイント
● rootユーザのパスワードはランダムに生成したい(固定値にしちゃうと、漏れたときのリスクが同じスクリプトを使って作ったサーバすべてに及ぶ)
● WordPress接続用のユーザーも、同様にパスワードをランダムに生成する
● mysqlコマンドに-eオプション
第1回 一撃サーバー構築シェルスクリプト勉強会
● mysqldを起動し、スタートアップに登録する● MySQLのrootユーザとパスワードを作成し、パラメーターファイルに格納する。書式は user root <Password>
● WordPressのDBに関してパラメーターファイルに格納する。書式は DBPARAM DB名 DBユーザー名 <Password>
● MySQLのrootユーザーのパスワードを設定する。● WordPressのデータベースを作成する。● DBユーザー(WordPressデータベース接続用)のパスワードを変数
PWに格納する。● DBユーザーを作成する。
第1回 一撃サーバー構築シェルスクリプト勉強会
● mysql_secure_installation 代替コマンド実行● 匿名ユーザーの削除● localhost以外からのrootログイン禁止● testデータベース削除
なぜmysql_secure_installationを使わないのか?→ 対話式のコマンドなので、入力待ちで止まってしまうため
● 権限情報の再読込
第1回 一撃サーバー構築シェルスクリプト勉強会
パラメータファイル${HOME}/.mysql/MySQLPARAM
第1回 一撃サーバー構築シェルスクリプト勉強会
PHP設定
第1回 一撃サーバー構築シェルスクリプト勉強会
やること
● php.iniのタイムゾーン設定→ 余計なログを出したくないので、東京に合わせておく。
● php-fpmの実行ユーザー設定→ apacheからnginxへ変更する。
● php-fpmを起動し、スタートアップ登録する
第1回 一撃サーバー構築シェルスクリプト勉強会
Let's Coding
第1回 一撃サーバー構築シェルスクリプト勉強会
WordPress インストール
第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 とする
第1回 一撃サーバー構築シェルスクリプト勉強会
nginx設定
第1回 一撃サーバー構築シェルスクリプト勉強会
参考URLhttp://wpdocs.sourceforge.jp/Nginxhttp://wiki.nginx.org/HttpCoreModule
第1回 一撃サーバー構築シェルスクリプト勉強会
● /etc/nginx/nginx.conf を直接弄るのはworker_processesの数をコア数に合わせるくらいで、他は弄らない。
● /etc/nginx/conf.d/000_VHOST.conf にヒアドキュメントで設定を流し込む。
第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 で、必ず 存在している必要があります。存在していない場合は内部エラーが発生します。
第1回 一撃サーバー構築シェルスクリプト勉強会
# Add trailing slash to */wp-admin requests.rewrite /wp-admin\$ \$scheme://\$host\$uri/ permanent;
リクエストURIが http://IPアドレス/wp-admin だったら、末尾にスラッシュをつけたURIにリライトする。
第1回 一撃サーバー構築シェルスクリプト勉強会
Let's Coding
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
お疲れ様でした!