🎃
【Wordpress】PHPの導入と設定を自動化
目的
- Wordpressアプリを起動するためのPHPを導入したい。
- 導入および設定をIaCを使って管理する。
導入するPHP関連のパッケージの意味
パッケージ名 | 役割 | ない場合の影響 |
---|---|---|
php | 下記パッケージを使用するために必要 | PHP関連のパッケージ使えない |
php-fpm | PHP向けのCGIモジュール | アプリのプロセスが起動しない |
php-mysqlnd | PHPのMySQL拡張モジュール | MySQLと連携できない |
php-gd | PHPで画像加工ライブラリGD向けの拡張モジュール | 画像アップロード時にエラーになる |
特によくわからなかったパッケージについてまとめる。
php-fpm
fpm?CGI?(;´д`)
- Webサーバ上でプログラム(今回だとWordpressのコード?)を動作させるための仕組み。
- ユーザーから要求がある度に、プロセスの生成と破棄を行う。
- モジュール版とCGI版の速度比較→あんまり変わらないらしい。
php-mysqlnd
-
MySQL Native Driverが現在推奨されているネイティブライブラリ。
- 5年前の記事ですが、mysqlndの使用が一般的とされているみたいです。
導入方法
まずはepelとremiをインストールするところから始める。
-
Remi Repositoryから取得する事が定説らしい。
- CentOSやRHEL向けにPHPの最新バージョンや以前のバージョンを提供する有名なリポジトリ。
- 信頼性も高い。
platform_version = node[:general][:platform_version]
package "epel-release" do
not_if 'rpm -q epel-release'
end
package "http://rpms.famillecollet.com/enterprise/remi-release-#{platform_version}.rpm" do
not_if "rpm -q remi-release"
end
次にWordpressを導入するために必要なPHPのパッケージをインストールしていく。
- PHPのEOLの状況的に8.0はサポート終了しているそうなので、8.3を採用することにした。
packages = ["#{package_name}-php","#{package_name}-php-fpm","#{package_name}-php-mysqlnd","#{package_name}-php-gd"]
package_name # php83
packages.each do |pkg|
package pkg do
version version #8.3.10-1.el9.remi
action :install
options "--enablerepo=remi"
end
end
PHPの設定ファイルを修正する必要があった。
- ソケットにアクセスするユーザはnginxである必要がある。ので所有者をnginxへ変更した。
- Nginx設定にて、FastCGIのパスを
/run/php-fpm/www.sock;
に設定したので、こちらもPHP設定と合わせてやる必要がある。cookbookに直書きしたのは、正直今後変更する必要がないと思ったからである。親切心でコメントだけ書いておく。
phpfpm_conf = "/etc/php-fpm.d/www.conf"
file phpfpm_conf do
action :edit
block do |content|
content.gsub!(/^user = apache$/, "user = nginx")
content.gsub!(/^group = apache$/, "group = nginx")
content.gsub!(/^listen = 127.0.0.1:9000$/, "listen = /run/php-fpm/www.sock" )
#Align with nginx.conf
end
only_if "test -f #{phpfpm_conf}"
end
最後にPHP-FPMを起動させてやる。
service "php-fpm" do
action [:start, :enable]
end
Discussion