WordPressをCentOS上にnginx + PHP 7 + fastcgi_cacheで構築

CentOS 7 (1511)、PHP 7.0.2、nginx 1.9.9を使い、fastcgi_cacheを使ったWordPressを構築してみたので、手順を残しておきたいと思います。

構成

使ったソフトウェアとバージョンは以下の通りです。

  • CentOS 7 (1511)
  • PHP 7.0.2
  • nginx 1.9.9
  • ngx_cache_purge 2.3
  • MySQL Community Edition 5.7

CentOS 7

まず戸惑ったのが、CentOSに関してですが、バージョンが7になって変わっている点があります。サービスを起動するときに  service nginx start とか打っていたと思うのですが、これがバージョン7になると  systemctl start nginx.service もしくは、うしろの service を外して  systemctl start nginx とかいうコマンドになります。これに伴い、いままで起動スクリプトを書いていた部分がUnitファイルを書くようになります。

PHP 7.0.2

PHPは最新版を使いたかったので、7.0.2をダウンロードしてビルドしました。リポジトリでも提供されているものもあるのですが、ディレクトリー名がphp70とかになったりして、ちょっと個人的に嫌だったのでビルドしたものを使うことにしたのです。

nginxとngx_cache_purge

nginxはリポジトリからインストールすれば早いのですが、今回はngx_cache_purgeというサードパーティー製のモジュールを利用したかったので、このモジュールを組み込んでビルドする必要がありました。

nginxを利用する場合は、ほとんどの人はキャッシュを目的としていると思うのですが、nginxには2通りの方法でキャッシュを実現できます。

  • リバースプロキシによるproxy_cache
  • FastCGIによるfastcgi_cache

リバースプロキシの方式ですと、nginxをふたつ起動し、ポート80番で待ち受けるものをキャッシュサーバーとして、そのうしろに8080番でWebサーバーが待ち受ける構成となります。この場合、WebサーバーはApacheなどでもよかったりしますが、最初からnginxで構成する場合は冗長に思えます。

fastcgi_cacheを使えば、キャッシュサーバーの役割をfastcgi_cacheが担ってくれますので、Webサーバー単体でよくなり単純な構成で構築できます。無駄もなくなり、設定するときにconfファイルを書くのも楽になります。

今回はfastcgi_cacheを利用します。そこで、キャッシュファイルを効率よく削除するために必要になってくるのがngx_cache_purgeというモジュールです。これはサードパーティー製のモジュールですので、ビルドするときに一緒に組み込む必要があります。リポジトリで提供されているnginxを利用しないのはこのためです。

MySQL Community Edition 5.7

これはリポジトリからインストールします。特に何もする必要はないですし、公式でリポジトリが用意されていますので、それを利用して構築します。インストールは簡単なものです。

各ソフトウェアのインストール

OSはテキトーにインストールしちゃってください。isoファイルがありますので、ダウンロードしてから、いまだと多分、ほとんどの場合が仮想環境を利用すると思いますので、VMwareなりHyper-Vなり、何なり利用してインストールしていまいましょう。ウィザードに従ってインストールすれば何も問題はありません。ちなみに、CentOSの場合、メモリーを多めに設定してあげないとGUIのインストーラーが出てこなかったので要注意です。あと、インストールは最小構成でいいです。

インストールし終わったら、一応アップデートしておきましょう。

あと、よく使うのでwgetを入れておきます。

あと、gccも入れておきます。

OSに関してはこんなものですかね。

nginxのインストール

nginxは先に書いた通りngx_cache_purgeのモジュールを組み込みますので、リポジトリからのインストールではなく、ビルドします。なので、nginxをダウンロードしてくるところから始まります。

ダウンロードしたら解凍もしちゃってください。

次にngx_cache_purgeのモジュールをFRiCKLE Labsからダウンロードします。こちらもダウロードしたら解凍しておきましょう。

あと、ビルドするときにPCREとOpenSSLが必要なので、それらもインストールしておきます。

nginxのディレクトリーに移動します。

configureはこんな感じで作り込みます。

これをもとにMakeしてインストールします。

 

nginx単体で動作を確認

インストールまで終わったら、まずは単体で動作するかを確認しておきます。他のソフトウェアをインストールして、すべての設定が終わってからだと、問題が発生した場合の切り分けが難しくなりますので、まずは単体で動くことを確かめておきます。

confファイルを書き換えますので、念のためconfファイルのバックアップを取っておきます。

バックアップが取れたらnginx.confの内容を書き換えます。

次にdefault.confファイルを書き換えます。

logディレクトリーの権限変更とアクセスログ用のディレクトリーの作成を行います。

Firewallのhttp(80)とhttps(443)のポートを開けます。

nginxのサービスとして起動させるための準備を行います。

/usr/lib/systemd/system/nginx.service を作成します。

ビルドした場合はユーザーが存在しませんので、nginxのユーザーを作ります。

nginxを起動します。

ブラウザーでアクセスしてデフォルトのWelcomeページが表示されることを確認します。

MySQLのインストール

MySQL CommunityのダウンロードサイトからMySQL Yum Repositoryを選択し、Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Packageのダウンロードボタンをクリック。

LoginするかSign Upするよう求められるので、下のほうにあるNo thanks, just start my download.のリンクをコピーします。このリンクがrpmのリンクです。

rpmを設定したらインストールします。

自動起動に設定してサービスを起動します。

初期ユーザーのパスワードを探します。

パスワードが出てきたらコピーしておきます。MySQLにrootでログインし、パスワードを変更しておきましょう。

mysql> のプロンプトが表示されたらSQLでパスワードを更新します。

PHPのインストールとPHP-FPMの設定

PHPはバージョン7を利用します。先で述べた理由でビルドから行いますので、まずはダウンロードから始めます。ダウンロードしたら解凍まで行います。

ビルドに必要なものをインストールしておきます。

ビルドしましょう。

make すると make test も忘れないでねって言われますので、  make test も実行しておきました。ちなみに  make test を実行したらコーヒータイムになります。

インストールしたらコンフィグファイルを準備して設定していきます。

/usr/local/php/php.ini を編集しましょう。3箇所です。

次に  /usr/local/etc/php-fpm.conf を編集します。

まあ、ほぼコメントアウトを消すだけの作業ですけどね。

www.confを準備します。

準備した  /usr/local/etc/php-fpm.d/www.conf を編集します。

ここまできたら、一度起動させてみます。

find / -name php-fpm.pid でPIDファイルが作成されていることを確認したらプロセスを停止させます。

/lib/systemd/system/php-fpm.service を作成します。

php-fpmをサービスとして起動できるようにします。

nginxでFastCGIを実行してみる

ここまできたら、nginxでFastCGIを利用できるか確認してみましょう。

nginxの  default.conf を編集してFastCGIを使えるようにします。

ドキュメントルートのディレクトリー /var/www/vhosts/html を用意します。

ドキュメントルート  /var/www/vhosts/html に確認用ファイル  index.php を準備します。

この段階でブラウザーからIPアドレスでアクセスしてみるとエラーが表示されます。そこで、SELinuxの設定を行います。

まずはSELinux関連ツールをインストールします。

nginxの権限を確認してみます。

いろいろ出てきますので、nginxの権限を設定します。

権限を設定したら、一度SELinuxを無効化してから再び有効化します。

ブラウザーでアクセスしてphpinfoの実行結果が表示されていることを確認しましょう。

fastcgi_cacheを設定

fastcgi_cache関連の設定を進めていきます。

まずはキャッシュ用ディレクトリーを準備します。

nginx.conf の設定を変更していきます。

default.conf も変更します。

nginxを再起動します。

ブラウザーで表示を確認してみましょう。

WordPressのインストール

いよいよWordPressのインストールです。長かったぁ〜。

WordPressをダウンロードします。日本語の最新版はWordPress.org 日本語から入手します。

ダウンロードしたWordPressの圧縮ファイルを解凍し、ドキュメントルートディレクトリーがある階層と同じところである /var/www/vhosts に移動させて、権限をnginxに変更します。

nginxの  default.conf に設定しているドキュメントルートをWordPressのディレクトリーに変更します。

MySQLでWordPress用のユーザーとデータベースを作成します。

今回、データベースはwordpressとして、管理権限のあるデータベースのユーザーはwpadminとしました。

ここまで設定しら、ブラウザーからアクセスしてWordPressのセットアップを進めていきます。手動でwp-config.phpを設定することもできますが、画面からウィザードにしたがってやっていったほうが楽です。

データベースの項目についての質問に関しては、以下のように入力しました。

項目
データベース名 wordpress
ユーザー名 wpadmin
パスワード Password
データベースのホスト名 localhost:/var/lib/mysql/mysql.sock
テーブル接頭辞 wp_

パスワードは本当にPasswordって設定しちゃダメですよ。一瞬でハッキングされることを保証します。

あとはWordPressのウィザードにしたがって必要な情報を入力していけば完成です。

WordPressのインストールが完了したらNginx Helperプラグインをインストールしましょう。WordPressのプラグインのメニューから検索すれば出てきますので、インストールします。

このNginx Helperをインストールすることによって、ngx_cache_purgeでキャッシュファイルを削除することができます。記事を投稿したり、更新したりすることでキャッシュを削除したり、手動ですべてのキャッシュを削除したりすることもできます。

これで、nginxでfastcgi_cacheを使った高速なWordPressのサイトを立ち上げることができました。

カテゴリーIT