PHPをNginxのFastCGIで動かす
PHPをNginxのFastCGIで動かし、phpinfo()でPHP情報を表示させる環境をDockerで作成します。WEBサーバーにApacheを使用する場合はまた違った構成を作成する必要があります。
PHPを最小限の構成で動かすための設定となりますので超シンプルですが、nginxのdefault.confの記述で苦労するケースもあるかと思います。
他の要素を入れていない最小構成となりますので参考になれば幸いです。
Docker設定
index.phpをdocker-composeコマンドでdockerコンテナに配置しています。
フォルダ構成
your root/
|-- compose.yaml
|-- app/
| `-- index.php
`-- nginx/
`-- default.conf
compose.yaml
phpイメージはfpm版を使用します。php-fpm(FastCGI Process Manager)はphpをCGIとして動作させるためのものです。 phpにはCGI版とモジュール版があり、nginxはプロセス常駐できないためCGI版を使用し、Apacheではモジュール版を使用するのが一般的です。
your root\compose.yaml
services:
#PHP
php:
#イメージ+バージョン ※latestを常に最新が適用されるが意図しない挙動になる可能性あり
image: php:8.2.9-fpm
#コンテナ名
container_name: php
volumes:
#ソース(ローカルフォルダ:コンテナフォルダ)
- ./app/:/var/www/html
#WEBサーバー
nginx:
#イメージ+バージョン ※latestを常に最新が適用されるが意図しない挙動になる可能性あり
image: nginx:1.25.2
#コンテナ名
container_name: nginx
#ポート(外部ポート:内部ポート)
ports:
- 8080:80
volumes:
#nginx設定ファイル(ローカルフォルダ:コンテナフォルダ)
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
index.php
your root\app\index.php
<?php
echo phpinfo();
?>
default.conf
your root\nginx\default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
root /var/www/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Docker起動
初回のイメージダウンロードを含めると20秒くらい。2回目以降は1秒くらいで起動します。
docker-compose up -d
[+] Running 19/19
✔ nginx 7 layers [⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 7.6s
✔ 360eba32fa65 Pull complete 2.8s
✔ c5903f3678a7 Pull complete 3.9s
✔ 27e923fb52d3 Pull complete 3.9s
✔ 72de7d1ce3a4 Pull complete 4.0s
✔ 94f34d60e454 Pull complete 4.0s
✔ e42dcfe1730b Pull complete 4.0s
✔ 907d1bb4e931 Pull complete 4.0s
✔ php 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 13.7s
✔ 52d2b7f179e3 Pull complete 5.1s
✔ 635676b59bff Pull complete 5.1s
✔ 08dbc2d7054b Pull complete 9.2s
✔ 8748b1b28b49 Pull complete 9.2s
✔ b04d8af66928 Pull complete 9.3s
✔ 69144a61d337 Pull complete 9.3s
✔ a01221eef26d Pull complete 10.0s
✔ ae47ae2f8471 Pull complete 10.0s
✔ 20996512645c Pull complete 10.0s
✔ 9efa77f63891 Pull complete 10.0s
[+] Running 3/3
✔ Network yourroot_default Created 0.0s
✔ Container nginx Started 0.8s
✔ Container php Started 0.7s
Webサーバー接続確認
ブラウザを起動し、URL「http://localhost:8080/」に接続するとPHP情報が表示されます。
Docker停止
docker-compose down
[+] Running 3/3
✔ Container nginx Removed 0.5s
✔ Container php Removed 0.4s
✔ Network yourroot_default Removed 0.2s
コメント