😸
PHARアーカイブをNginx+PHP-FPMで実行を行う
PHARアーカイブをNginx+PHP-FPMで実行を行う
はじめに
本記事では、DockerとDocker Composeを使用して、NginxとPHP-FPMを組み合わせたPHP実行環境を作成し、PHARアーカイブを実行する方法を紹介します。
プロジェクト構成
.
├── Dockerfile
├── docker-compose.yml
├── nginx
│ └── default.conf
└── src
├── composer.json
├── index.php
└── index.phar (生成されるファイル)
環境構築
Dockerfile の作成
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y \
zip \
unzip \
git
COPY /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER=1
RUN git clone https://github.com/clue/phar-composer.git /usr/local/phar-composer \
&& cd /usr/local/phar-composer \
&& composer install \
&& ln -s /usr/local/phar-composer/bin/phar-composer /usr/local/bin/phar-composer
WORKDIR /var/www/html
RUN echo "security.limit_extensions = .php .phar" >> /usr/local/etc/php-fpm.d/www.conf
RUN echo "phar.readonly = Off" >> /usr/local/etc/php/conf.d/phar.ini
注目すべき点:
-
phar.readonly = Off
: PHARの作成と実行を許可します。 -
security.limit_extensions = .php .phar
: PHP-FPMがPHARファイルを実行できるようにします。
Nginx の設定ファイル作成
nginx/default.conf
:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.phar index.html;
location / {
try_files $uri $uri/ /index.phar$query_string;
}
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.php|phar)(/.*)$;
fastcgi_pass php-fpm:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
docker-compose.yml の作成
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./src:/var/www/html
depends_on:
- php-fpm
php-fpm:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/var/www/html
PHPスクリプトの作成
src/index.php
:
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://inet-ip.info/ip');
$body = $response->getBody();
$ip = trim($body);
echo "Your IP Address is: " . $ip;
composer.json の作成
src/composer.json
:
{
"require": {
"guzzlehttp/guzzle": "^7.9"
}
}
PHARアーカイブの作成
-
依存関係をインストールします:
docker-compose run --rm php-fpm composer install
-
PHARアーカイブを作成します:
docker-compose run --rm php-fpm phar-composer build /var/www/html /var/www/html/index.phar
-
動作確認のために元のPHPファイルを削除します:
docker-compose run --rm php-fpm rm /var/www/html/index.php
この手順により、アプリケーションが確実にPHARアーカイブから実行されることを確認できます。
環境の起動と確認
-
Docker環境を起動します:
docker-compose up -d
-
ブラウザで
http://localhost:8080
にアクセスします。IPアドレスが表示されれば、環境が正しく構築されています。
まとめ
このプロジェクトでは、以下のことを実現しました:
- DockerとDocker Composeを使用したNginx + PHP-FPM環境の構築
- phar-composerを使用したPHPアプリケーションのPHARアーカイブ化
- NginxでのPHARファイルの直接実行
主なポイント:
- PHARアーカイブの使用によりアプリケーションの配布が容易に
- Nginx + PHP-FPM構成による高いパフォーマンスと安定性
- Dockerによる環境の一貫性と移植性の確保
おわりに
PHARアーカイブを使用することで、PHPアプリケーションの配布とデプロイが簡単になります。また、NginxとPHP-FPMの適切な設定により、PHARファイルを直接実行する環境を構築できました。
本記事で紹介した方法では、PHP-FPMの設定を調整してPHARファイルの実行を明示的に許可し、さらに元のPHPファイルを削除することで、アプリケーションが確実にPHARアーカイブから実行されていることを確認できます。
Discussion