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]が実行する処理は次のとおりです。
- 初期設定パラメータを変数に格納する
- ブログの初期設定ファイルがない場合に初期設定パラメータを生成
- OS初期設定、アップデート
- wp-cliのダウンロード
- ファイアウォールの設定
- MySQLのインストール、初期設定
- WordPress用DBとユーザーを自動生成
- PHPおよび依存パッケージをインストール
- nginxのインストール、初期設定
- memcachedのインストールと各デーモンの起動
- 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の環境設定に大きく影響する箇所について説明します。