一応前回からの続きになります。記事がどう考えても長くなりそうだったのでWebサーバ編ということで細かくしました。といってもWebサーバ編が多分中心になるのでは、と思っています。一応WordPressを動かすことを前提に書いていますので参考にしてみてはいかがでしょうか。一応今までのサーバ形式を受け継いでApache+MariaDB+Nginx(+php-fpm)としています。
11.httpd(Apache)の導入
まずはバックエンドになるhttpdの導入です。ちなみに前の記事でIUSを利用できるようにしていますのでそこからインストールすればある程度新しいApacheがインストールできます。インストールそのものは簡単で
# yum install httpd
で導入できます。IUSを有効にしていればmod_sslも自動的に入るのでそこまで難しいことはないと思います。あとは一般的なApacheの設定を行えばOKだと思います。ちなみに、今回最新のApacheを使う上で苦労した点が3つありまして、
- アクセス制御がOrder指定からRequireを使う形になったため、パスワードを使う方式を設定するときにRequire valid-userのみで大丈夫なことに気が付くのに時間がかかった。
- ポートごとに設定を行う場合でもNameVIrtualHostを設定しなくてもよくなっていた。
- php-fpmの連動のためにCentOS7標準のApache2.4.6では問題が出ることがわかり、ある度新しいApacheを使う必要があった。なお、php-fpmとの連動はmod_proxy_fcgiを使うことになる。
でしょうか。
最後の項目には説明が必要でしょうね。前のサーバではApache2.2系を使っていたのでphp-fpmとの連動はmod_fastcgiのコードをとってきてコンパイルしたものを使っていました。ところがApache2.4系ではmod_fastcgiはほぼ使えない、ということが各所で書かれていてmod_fcgidを使うように、となっていました。で、こちらを使おうと思ったら、今度はどうもsocketファイルを使った通信でphp-fpmと連動させることがかなり難しく、内部的にサーバを起動させた形にしなければならないような感じになっていたのでこちらも断念。そうするとmod_proxy_fcgi経由でのやり取りとなるのですが、これの設定がApache2.4.10より前ではかなり厄介ということが書かれていて、SetHandler構文が使えずProxyPassMatchという構文を使わなければならない、ということがあり、サイトごとにProxyを設定するのが恐ろしく面倒ということが構築途中で分かったため、SetHanderでfcgiを使えるようなったApache2.4.10以降が必要という条件が課せられることがあり、結局IUSを導入せざるを得なくなった、というが結論だったりします。
これを読んでいる人でApache+php-fpmを考える人はApache2.4.10以降を一発で導入できる環境を整えるほうがProxyPassMatchで悩むより良いと思います。実際、ProxyPassMatchは細かいディレクトリ単位では設定できないので(この後やろうとしている)ディレクトリごとで実行ユーザを変更する、といった用途だと設定が難しいと思います。
12.Let’s Encryptを使った常時SSL化対応処理
そしてなぜこの順番になったのか?の原因が常時SSL化に対応するためにLet’s EncryptからSSL証明書を自動取得できるようにするべくcertbotを導入するするのでが、これがApacheとの連動設定を含むためにApacheをインストールした後でないとちょっと困ったことになること、そしてSSL証明書そのものはWebサーバ以外のほかのサーバでも使用するので先に証明書を取得する設定をこの段階でしてしまったほうが良いからです。
CentOS7ではcertbotはEPELリポジトリにあるのでこの段階であればyum経由でインストールできると思います。詳細な説明はほかのサイトに譲りましょう。ちなみに証明書をApache2.4系に組み込むときですが、今回Apache2.4.10以上となっていることとVPSを使っているためいくつ注意点がありまして、
- SSLCertificateFileにはfullchain.pemを設定すること
- (VPSの場合は特に)SSLCryptoDeviceの設定は無効化しておくこと
となっています。ちなみに私はSSLCryptoDeviceの設定を無効化していなかったためしばらくhttpdが起動できない、という状態となり理由を探すのに数十分ほど時間を費やしました。VPSではハードウェア暗号デバイスなんてあるわけないですからね…。
13. php-fpmの導入
Webサーバ第2弾はphp-fpmの導入です、phpをインストールするとApacheとくっつくので実行は簡単になるのですが、実行キャッシュが効かなかったりメモリ的に不利になったりとあるので、サーバ化してしまうのが正しいと思います。また、phpに対してsudo に近いことを簡単に設定できるのも利点です。設定ファイルで複数ソケットファイルを作成するようにしてそれぞれを参照するときに実行するユーザを別にすることで、対象のソケットファイルをSetHandler経由でApache側から指定すればできるます。複数ユーザを束ねるようになると設定がちょっと面倒ですが、2,3人程度の共用ならこれもありだと思います。ほかにもバックエンドにApacheを使わずにNginx+php-fpmという組み合わせでWordPressを動かすパターンもありますのでそのときでも使えます。
php-fpmはRemi経由でインストールできます。いくつか系統がありますので、使いたい系統を選んでインストールします。WordPressは2019年4月現在ではPHP7.0系統以上を推奨しているのでそちらを使用します。PHP7.0系統にするかPHP7.2系統にするか、それはご自由に。例えばphp7.0系統にするのであれば
# yum install --disablerepo=base,updates --enablerepo=remi-php70 php-fpm
というようにします。面倒なのは一時的にbaseとupdatesのリポジトリを無効にしなければ間違えてphp5.5系も選ばれてしまうことが一つ。もう一つは例えばphpの画像処理を入れようとするとbaseなどからlibjpegなどが必要となりますがそれを一時的に取り入れないようにしているので必要なphpのパッケージを選択するとたいてい一発ではインストールできず、この時足りないライブラリ群を先にこのコマンドで確認してからそちらを先にインストールしてもう一度これを行う必要があることでしょうか。なお、Apacheにphpを組み込まないのであればphpのパッケージはなくても問題ありません。php-fpmを設定してサービスとして常駐できればそれでOKだからです。php-fpmが入っていればターミナルからphpは使えますので安心してください。phpの設定とphp-fpmの設定を両方して、サービスとしてphp-fpmを動かしておいてください。
# systemctl start php-fpm # systemctl enable php-fpm
とりあえず前編はここまで
ここまでくればphpが動かせるはずですので、phpinfo関数から状態を確認しておくとよいでしょう。Apacheも必要であれ動かしておいてもよいかもしれません。WordPressを動かすのであればMariaDBを入れないとだめですし、私の場合はリバースプロキシであるNginxなしに使うと速度が落ちるのでこの段階ではチェック程度しか動かせませんでしたが。