背景
Apache + php-fpm で環境構築する勉強をしたので手順として残します。
以前に、php を cgi版で動かしてみたので、次は FastCGI で動かしてみようと思い、取り組みました。
仕事ではソースコードからインストールするのですが、今回はWebサーバとして公開しないのと設定ファイルの確認程度なので、yum でインストールします。
インストール後にきれいに後片付けできるように docker のコンテナ上で作業します。
環境
ホストOS:Amazon Linux release 2 (Karoo)
コンテナOS:CentOS Linux release 7.9.2009 (Core)
Docker version 20.10.4
Apache/2.4.6
PHP 5.4.16 (fpm-fcgi)
手順
コンテナの用意
コンテナを作成、起動します。
sudo docker run -tid -v /opt/app/:/var/www/html -p 80:80 centos:centos7
コンテナに入ります。
d5 はコンテナIDです。
sudo docker exec -ti d5 bash
Apache のインストール
まずは yum update
します。
yum update -y
その後、Apache をインストールします。
yum install -y httpd
Apache を起動して、testページが表示されるか確認します。
httpd -k start
testページが表示されたらOKです。
php-fpm のインストール
php-fpm をインストールします。
yum install -y php-fpm
php-fpm -v
PHP 5.4.16 (fpm-fcgi)
php-fpm の設定ファイルを編集
今回はUNIXドメインソケットを使って Apache とのやり取りをします。
また、pm は static、pm.max_children は 2 にしてます。
この設定はプロセス起動時に 2つの子プロセスを起動して、子プロセスの数は変動しないという設定です。
詳しくは以下サイトを参照してください。
php の公式ページです。
設定ファイルは以下のように変更しております。
他はデフォルトのままです。
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = apache
listen.group = apache
listen.mode = 0660
pm = static
pm.max_children = 2
設定が終わったら、php-fpm を起動します。
nohup php-fpm &
Apache の設定ファイルを編集
ドキュメントルートの設定を編集します。
html か php の拡張子がついているファイルは、php-fpm に処理を渡します。
<Directory "/var/www/html">
<FilesMatch \.(html|php)$>
SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
</FilesMatch>
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
設定が終わったら、Apache を再起動します。
httpd -k stop
httpd -k start
動作確認
phpinfo を表示して動作の確認をします。
ドキュメントルートに php ファイルを配置します。
vi /var/www/html/index.php
<?php echo phpinfo(); ?>
ブラウザにURLを入力して、phpinfo が表示されればOKです。
以下のように表示されているはずです。
最後に
今回は Apache + php-fpm で環境構築しました。
php-fpm のプロセスに html, php ファイルの処理を Apache から渡すように設定ファイルを書いています。
Apache, php-fpm どちらも設定はほとんどしていないので、運用するWebサーバにこの手順を使う際はセキュリティやログの出力先など詳細な設定をしてください。
最後まで読んでいただきありがとうございました。