SHOEISHA iD

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

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

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

WordPressとnginx+MySQL+memcached+wp-cliをインストールする一撃シェルスクリプト

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

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

ダウンロード ICHIGEKI (9.5 KB)

 今回の一撃シェルスクリプトは、OSインストール直後のサーバーに対し、CMSの「WordPress」のインストールと起動をオートメーション化するものです。同時に、RDBMS「MySQL」やWebサーバー「nginx」、分散型メモリキャッシュシステムの「memcached」などのミドルウェア、WordPressをコマンドラインで操作可能にするツール「wp-cli」のインストールも行います。サーバーは、CentOS 7.1をminimalでインストールしたものとします。

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

WordPress+ミドルウェアのインストールなんて数分で完了です

 先日、あるWEBデザイナーさんから、WordPressのインストールにかかる時間はおよそ30分だという話を聞きました。しかし、ミドルウェアのインストールも含めると、なかなか慣れないためにもっと時間がかかるそうで、半日〜1日仕事になることもあるとのことでした。

 しかし、一撃シェルスクリプトを使えば、OSインストール直後からわずか数分でブログサービスの開発に着手することができます。今回は、CentOS 7.1をminimalでインストールしたサーバーに、一撃シェルスクリプトでミドルウェアからWordPressまでをインストールしてみたいと思います。

 WordPressを選定した理由は、何といっても「wp-cli」が強力だという点です。wp-cliはその名の通り、WordPressをコマンドラインから管理できるPHP製のツールで、プラグインのアップデートやマルチサイトのインストールなど、Webブラウザを介さずに行うことができます。もちろん、WordPressをダウンロードして初期設定を行うこともお手の物ですので、今回の一撃シェルスクリプトで大活躍してもらいました。

wp-cliの動作条件と今回の処理手順

 wp-cliの動作条件は以下のとおりです(公式サイトより引用)。

  • UNIX-like environment (OS X, Linux, FreeBSD, Cygwin); limited support in Windows environment
  • PHP 5.3.2 or later
  • WordPress 3.5.2 or later

 前回はMovable Typeをnginx+Perl-FCGIで動かしましたが、今回はnginx+PHP-FPMで動かしてみたいと思います。なお、今回の一撃シェルスクリプト[1]が実行する処理は次のとおりです。

  1. 初期設定パラメータを変数に格納する
  2. ブログの初期設定ファイルがない場合に初期設定パラメータを生成
  3. OS初期設定、アップデート
  4. wp-cliのダウンロード
  5. ファイアウォールの設定
  6. MySQLのインストール、初期設定
  7. WordPress用DBとユーザーを自動生成
  8. PHPおよび依存パッケージをインストール
  9. nginxのインストール、初期設定
  10. memcachedのインストールと各デーモンの起動
  11. WordPressのダウンロード、初期設定、インストール、OS再起動

[1] 今回の一撃シェルスクリプト(ファイル名:ICHIGEKI)は、本記事のタイトル下にある[ダウンロード]をクリックすると入手できます。

 

初期設定パラメータを変数に格納する

 サーバーを構築するにあたり、いくつかのパラメータを固定値として持ちたくないことが充分に想定できます。なので、これらを変数に格納することにします。別ファイルとして切り出してもよいのですが、それほど項目数も多くないため、スクリプトの上部で設定することにします。

非機能要件
・MySQL rootパスワード
・php.iniに設定する制限値機能要件
機能要件
・ブログの初期パラメータ(デフォルト値)

 MySQLのrootパスワードは、初期値として16桁英数文字の乱数にします。

MYSQLROOTPW=$(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 16)

 次に、php.iniに設定する制限値を変数に格納します。

MEMLIMIT=256M                          # memory_limit (Default: 128M)
POSTMAXSIZE=32M                        # post_max_size (Default: 8M)
UPLOADMAXFILESIZE=128M                 # upload_max_filesize (Default: 2M)

 機能要件として、ブログの初期パラメータを決定します。一撃シェルスクリプトを実行するユーザー(root)のホームディレクトリに「BLOGPARAM.txt」ファイルを置き、これに設定した変数を反映させる設計としていますが、BLOGPARAM.txtがなかったり、設定項目が足りなかったりしたばかりにインストールがストップしても手戻りが大きくなってしまうため、ここで初期値としてパラメータを設定しておきます。

D_BLOGTITLE=\"Example\ Blog\ Title\"   # For BLOGTITLE
D_BLOGADMIN=ichigeki                   # For BLOGADMIN
D_BLOGPW=Bl0Gp@SsW0rD                  # For BLOGPW
D_ADMINMAIL=hamada@example.com         # For ADMINMAIL
D_VHOST=www.example.com                # For VirtualHost

 このコードでは、上から「ブログタイトル」「ブログ管理画面(/wp-admin)ログインID」「ブログ管理者パスワード」「ブログ管理者メールアドレス」「ブログを公開するバーチャルホストのFQDN」の初期値を、それぞれ変数に格納しています。

 もし、ホームディレクトリにBLOGPARAM.txtがなければ以下のコードで初期値を生成してBLOGPARAM.txtに書き出します。

BLOGPARAMFILE=${HOME}/BLOGPARAM.txt
if [ ! -f ${BLOGPARAMFILE} ];
then
  echo "BLOGTITLE=${D_BLOGTITLE}" | tee ${BLOGPARAMFILE}
  echo "BLOGADMIN=${D_BLOGADMIN}" | tee -a ${BLOGPARAMFILE}
  echo "BLOGPW=${D_BLOGPW}"       | tee -a ${BLOGPARAMFILE}
  echo "ADMINMAIL=${D_ADMINMAIL}" | tee -a ${BLOGPARAMFILE}
  echo "VHOST=${D_VHOST}"         | tee -a ${BLOGPARAMFILE}
fi

 さて、一撃シェルスクリプトと一緒にBLOGPARAM.txtを配置するか、一撃シェルスクリプトがブログの初期値をBLOGPARAM.txtに生成するのですが、ここに書かれたままの変数を即反映せず、次の条件で内容を確認してから反映させます。

  • 各変数に与える引数が1つであること
  • もし変数そのものがBLOGPARAM.txtになければ初期値として設定する
PARAMFIELDCOUNT=$(awk '{print NF ":" $0}' ${BLOGPARAMFILE} | grep -v ^[0-9]*:BLOGTITLE | grep -v ^1 | wc -l)
[ 0 = ${PARAMFIELDCOUNT} ] && . $(realpath ${BLOGPARAMFILE})
[ ${#BLOGTITLE} = 0 ] && BLOGTITLE=${D_BLOGTITLE}
[ ${#BLOGADMIN} = 0 ] && BLOGADMIN=${D_BLOGADMIN}
[ ${#BLOGPW} = 0 ] && BLOGPW=${D_BLOGPW}
[ ${#ADMINMAIL} = 0 ] && ADMINMAIL=${D_ADMINMAIL}
[ ${#VHOST} = 0 ] && VHOST=${HOSTNAME}

 PARAMFIELDCOUNT変数には、BLOGPARAM.txtのうちBLOGTITLE変数以外の行でフィールド数が1以外のものを数えています。BLOGTITLEの行を除外してカウントしている理由は、ブログのタイトルにスペースが入ることが可能性として十分にありえるからです。次に、各変数の項目で変数に格納された文字数が0だった場合には初期値を代入します。

 ここまでが、今回の一撃シェルスクリプトでの初期値設定となります。wp-cliのインストール先(/usr/local/bin/wp)とインストール元URIも変数にしていますが、特に大きく変更する要素ではないため、コードの後ろのほうに記述しています。

 ここから先は、WordPressの環境設定に大きく影響する箇所について説明します。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
wp-cliのダウンロード

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8703 2015/06/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング