求人応募率向上コラム

SCROLL

 2021.09.06

複数バージョンのPHP共存

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の複数バージョン同居環境を構成できるので是非試してみてください。

お問い合わせ・相談

CONTACT

ご検討中のご相談・お見積もり・ご質問など、
どなた様でも、お気軽にお問い合わせください。

資料請求