複数バージョンのPHP共存
2021.09.06
PHPを使用したサイトを運用するにあたってどうしても避けられないのがPHPのバージョンアップ対応です。
しかし、単純にモジュールの入れ替えを行っても動作しないことが多くプログラム修正対応が必要となります。
大規模サイトや複数サイトを運用しているとこれが非常に大変で全部を一気に対応させるなんてことは予算的にも期間的にも難しい場合がほとんどかと思います。
そこでおすすめなのがPHPの複数バージョンを同居させてしまうことです。複数バージョンの同居を実現する方法はいろいろありますが弊社でのおすすめはDockerを使用する方法です。
今回はその方法を紹介したいと思います。
1.Dockerの準備
まずは必要なバージョンのDockerコンテナを準備します。
Dockerfileは
FROM php:5.4-fpm RUN apt-get update && apt-get install -y libpq-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev RUN docker-php-ext-install mysqli RUN docker-php-ext-install pgsql RUN docker-php-ext-install mbstring RUN docker-php-ext-configure gd --with-freetype-dir=/usr --with-jpeg-dir=/usr RUN docker-php-ext-install gd RUN DEBIAN_FRONTEND=noninteractive apt-get install -y msmtp RUN DEBIAN_FRONTEND=noninteractive apt-get install -y msmtp-mta RUN DEBIAN_FRONTEND=noninteractive apt-get install -y bsd-mailx
こんな感じで対象バージョンのphp-fpmに動作に必要なモジュールを追加しておきます。
docker-compose.ymlは
version: "3"
services:
php-54:
build:
context: .
dockerfile: Dockerfile
container_name: php-54
ports:
- "0.0.0.0:9200:9000"
volumes:
- ./etc/php.ini:/usr/local/etc/php/php.ini
- ./etc/php-fpm.conf:/usr/local/etc/php-fpm.conf
- /var/www:/var/www
privileged: true
restart: always
こんな感じで設定しておきます。
nginxからは
location ~ \.php$ {
root /var/www/html;
fastcgi_pass xxx.xxx.xxx.xxx:9200;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
でdockerコンテナのポートに接続するようにします。
これでNGINXとDockerコンテナの接続は完了。
バージョン違いのPHPに関してはポートを変更したDockerコンテナを作成するだけです。
この構成ですとサイトの一部だけ別バージョンのPHPで動かすなんてことも可能。
しかもバージョン違いのPHPはDocker環境で動作しているので他のPHPの環境に汚染されることはありません。
非常に簡単にPHPの複数バージョン同居環境を構成できるので是非試してみてください。

