SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場

Apacheホスティング環境(Webサーバー+PHP実行環境)をコマンド一発で構築する一撃シェルスクリプト

ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場 第1回


  • X ポスト
  • このエントリーをはてなブックマークに追加

④logrotate設定追加

 冒頭に書いたホスティング環境の仕様では、各バーチャルホストのログは/home/logs/ホスト名/以下に格納されるようになっていました。そのため、ログローテーション設定ファイル/etc/logrotate.d/httpdに、設定を加える必要があります。一撃シェルスクリプトでは、次の部分でそれを行っています。

ログローテーション設定ファイル/etc/logrotate.d/httpdに設定を追加
# Logrotate Configure
mkdir -p /etc/logrotate.d/BACKUP
cp -p /etc/logrotate.d/httpd /etc/logrotate.d/BACKUP/httpd.orig
sed -i "s/\/var\/log\/httpd\/\*log/\/var\/log\/httpd\/\*log \
\/home\/logs\/\*\/access_log \/home\/logs\/\*\/error_log/g" /etc/logrotate.d/httpd

⑤Apacheの再起動

 以上でApacheの設定はおしまいです。Apacheを再起動するとともに、OSの再起動後に自動起動するようにします。

Apacheの再起動
# Apache Start
service httpd start
chkconfig httpd on

3. サーバー運用ツール「VHMAINTE」の生成

 今回の一撃シェルスクリプトには、Apache(httpd)とPHPのインストールと設定の次に、構築したサーバーの運用に使用するコマンドラインツール「VHMAINTE」(/root/binディレクトリに配置)を生成する処理があります。

 VHMAINTEコマンドに実装する機能は次の2つです。

  • バーチャルホストの作成
  • バーチャルホストの削除

 はじめに、VHMAINTEコマンドの格納先となるディレクトリを作成します。

VHMAINTEコマンドを格納するディレクトリを作成
# For VHMAINTE Directory Create
[ ! -d ${HOME}/bin ] && mkdir -p ${HOME}/bin
[ ! -d ${HOME}/etc ] && mkdir -p ${HOME}/etc

ヒアドキュメントでVHMAINTEコマンドを生成

 続いて、VHMAINTEコマンドをヒアドキュメントで生成します。Bashのヒアドキュメントの文法は次のとおりです。

Bashのヒアドキュメントの文法
cat << _EOL_ >> /path/to/output
#!/bin/bash
……
_EOL_

 または、

cat << _EOL_ | tee /path/to/output
#!/bin/bash
……
_EOL_

 やっかいなのが、コマンドの処理を記述するために多用を余儀なくされる変数です。ヒアドキュメントの出力に工夫をこらさないと、変数が展開されて出力されてしまいます(あえて変数展開させることもありますが)。さらに、長いソースコードでは特殊記号のエスケープがバグの温床(エスケープ忘れ)になりがちです。

 特殊記号のエスケープを避け、バグを発生させないためには、ヒアドキュメントを次のようにして出力します。

特殊記号のエスケープを避けるヒアドキュメントの書き方
cat << '_EOL_' | tee /path/to/output
#!/bin/bash
ETCDIR=${HOME}/etc
VHLIST=${ETCDIR}/VHLIST
……
_EOL_

 このように、区切り文字をシングルクォートで囲ってあげることで、ヒアドキュメントの中で特殊記号のエスケープを行う手間から解放されます。

 なお、このヒアドキュメントは入れ子になっています。いきなり複雑なシェルスクリプトですみません……。また、入れ子の“子”になっているヒアドキュメントには、変数をあえて展開させる箇所もあります。

運用ツール全体で使用する変数の定義

 運用ツールを生成するヒアドキュメントの最初の部分では、運用ツール全体で使用する変数を定義しています。最後の1行では、バーチャルホストの元となるディレクトリ(/home/vhosts)がなければ作成しています。

運用ツールを生成するヒアドキュメントの最初の部分
cat << '_EOL_' | tee ${HOME}/bin/VHMAINTE > /dev/null
#!/bin/bash
ETCDIR=${HOME}/etc
VHLIST=${ETCDIR}/VHLIST
VHDIR=/home/vhosts
DATE=$(date +%Y%m%d)
[ ! -d ${VHDIR} ] && mkdir -p ${VHDIR}

 ここで定義している変数に格納される値は次のとおりです。

変数名 格納される値
ETCDIR ホームディレクトリ直下のetcディレクトリへのパス
VHLIST /root/etc/VHLIST(運用ツールが読み込む設定ファイル)
VHDIR バーチャルホストの元となるディレクトリ
DATE 現在の年月日。バックアップファイル名などに使う

バーチャルホストの作成/削除の分岐

 VHMAINTEコマンドは、引数にcreateを与えたときにはバーチャルホストを生成し、deleteを与えたときにはバーチャルホストを削除するようにします。この処理の分岐は、次のようにcase文で行います。

引数(create/delete)に応じた処理の分岐
case "$1" in
[cC][rR][eE][aA][tT][eE])
・・・(略)
;;
[dD][eE][lL][eE][tT][eE])
・・・(略)
;;
esac
_EOL_

次のページ
バーチャルホストの作成

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場連載記事一覧

もっと読む

この記事の著者

濱田 康貴(ハマダ ヤスタカ)

サーバーエンジニアとして主にLinuxのWEBサーバーを設計、構築、運用を行っています。運用ツールの相棒としてシェルスクリプトやワンライナーは心強いパートナーと信じて疑わず、ブログでTIPSを公開しています。2009年5月のUSP友の会活動開始より参画し、現副会長。最近では、USP友の会で「一撃サーバー構築シェルスクリプト勉強会」を開催しているほか、日本で唯一のシェルスクリプト総合誌『シェルスクリプトマガジン』(毎月25日発売)で、隔月(偶数月号)連載「教えて先輩 サーバー運用お助けTips」を執筆しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8434 2015/04/02 19:58

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング