【Docker】PHP FastCGI環境を構築する
こんにちは、フリーランスエンジニアの太田雅昭です。
PHP FastCGI
PHPは割と昔からある言語で、私は大学時代にお世話になっていました。Perlから移行したこともあり、その使いやすさに嬉しかったのを覚えています。そんなPHPも、今やだいぶレガシーな言語となりました。
そんなPHPでは、FastCGIというものがあります。通常はサーバーリクエストがあった時に逐一コード解釈から走るのですが、FastCGIだとそうではなく、もにょもにょして早さを実現している、と言うものだったと思います(うろ覚え)
Dockerで構築する
以下は、PHP + FastCGI + Apache構成です。
version: '3.8'
services:
web:
image: php:8.1-fpm
volumes:
- ../public_html:/var/www/html/wp_dev_blog
networks:
- xs_network
apache:
image: httpd:2.4
ports:
- "80:80"
volumes:
- ../public_html:/var/www/html/wp_dev_blog
- ./apache-config.conf:/usr/local/apache2/conf/httpd.conf
networks:
- xs_network
networks:
xs_network:
driver: bridge
ポイントは、phpとapacheとでpublic_htmlディレクトリのフルパスを合わせると言うところですね。ここを合わせないと、phpにアクセスした時にFile not foundになってしまいます。これはphp-fpmに処理を渡したものの、フルパスが違うためにphp-fpmがFilen not foundを返してしまうためです。
以下はapache-config.confの中身です。
ServerRoot "/usr/local/apache2"
Listen 80
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
ServerName localhost
DocumentRoot "/var/www/html/wp_dev_blog"
<Directory "/var/www/html/wp_dev_blog">
AllowOverride None
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://xserver_php_fpm:9000"
</FilesMatch>
DirectoryIndex index.php index.html
余談
最近、なか卯のカレーにハマってます。カツも何も入れずに、ただただ大盛りで頼んでます。