Debian10でPHP7とPHP5を共存する


Debian 10 Busterの、Buster。この犬ねw

やっぱりDebianが好き

やっとWeb用VMをDebian GNU/Linux 10(Buster)に移行した。

Debian 8のi386を長らく使い続けていたので、これを機にamd64にしたい。しかも廃止パッケージを数多く使っていたのでdist-upgradeは最初から諦め。この規制を乗り越えるのはかなり時間を要して滅入った(汗

そもそも使い込んだDebianが難なくアップグレードできることなんて期待してはイケナイ(;´∀`) 難航した。。。

dpkg –get-selections > packages.list  してパッケージ名のi386をamd64に置換、その上でBusterに持って行き、できる限り同じ構成を再現。40程度同名パッケージが消失していた。。。

移行元
dpkg --get-selections > packages.list

移行先
apt-get install dselect
dselect update
dpkg --clear-selections
dpkg --set-selections < packages.list
apt-get dselect-upgrade
apt-get autoremove

いちばんの懸念材料だったのが、サイトコンテンツの都合上PHP 5.6環境を残したかった点。当然ながら、Busterでは標準パッケージから消え去っているため、標準外な構築を強いることになった。何回も環境を作り直し、やっと以下に落ち着いた次第。これでLTSの2024年までは安泰かな。

さて、タイトルの本題へ。PHP 7.3とPHP 5.6の共存方法について(2019/08現在)

packages.sury.org/php パッケージ

libcurl4とlibcurl3を共存するのがかなり手こずった。そして、PHP 5.6の方はfpmに。これを決めてからはサクサクと進んだ。

How to Install PHP (7.4, 7.3, 7.2, 7.1 & 5.6) on Debian 9 Stretch operating system. A simple steps for installing PHP on Debian 9 using apt-get.

PHP 5.6パッケージは、上記リンク先の通り。Busterも在るので以下のように書き換えればよい。

# cat /etc/apt/sources.list.d/php.list
deb https://packages.sury.org/php/ buster main

インストール後のパッケージは以下のような感じ。

# dpkg -l|grep php
ii  php5.6-cgi                           5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        server-side, HTML-embedded scripting language (CGI binary)
ii  php5.6-cli                           5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        command-line interpreter for the PHP scripting language
ii  php5.6-common                        5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        documentation, examples and common module for PHP
ii  php5.6-curl                          5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        CURL module for PHP
ii  php5.6-fpm                           5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        server-side, HTML-embedded scripting language (FPM-CGI binary)
ii  php5.6-json                          5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        JSON module for PHP
ii  php5.6-mbstring                      5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        MBSTRING module for PHP
ii  php5.6-mysql                         5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        MySQL module for PHP
ii  php5.6-opcache                       5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        Zend OpCache module for PHP
ii  php5.6-readline                      5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        readline module for PHP
ii  php5.6-xml                           5.6.40-9+0~20190710.17+debian10~1.gbp923b30                       amd64        DOM, SimpleXML, WDDX, XML, and XSL module for PHP
ii  php7.3                               7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        all          server-side, HTML-embedded scripting language (metapackage)
ii  php7.3-cli                           7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        command-line interpreter for the PHP scripting language
ii  php7.3-common                        7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        documentation, examples and common module for PHP
ii  php7.3-curl                          7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        CURL module for PHP
ii  php7.3-fpm                           7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        server-side, HTML-embedded scripting language (FPM-CGI binary)
ii  php7.3-gd                            7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        GD module for PHP
ii  php7.3-intl                          7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        Internationalisation module for PHP
ii  php7.3-json                          7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        JSON module for PHP
ii  php7.3-ldap                          7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        LDAP module for PHP
ii  php7.3-mbstring                      7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        MBSTRING module for PHP
ii  php7.3-mysql                         7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        MySQL module for PHP
ii  php7.3-opcache                       7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        Zend OpCache module for PHP
ii  php7.3-readline                      7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        readline module for PHP
ii  php7.3-sqlite3                       7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        SQLite3 module for PHP
ii  php7.3-xml                           7.3.7-2+0~20190725.42+debian10~1.gbp848ca5                        amd64        DOM, SimpleXML, WDDX, XML, and XSL module for PHPその後、5.6-fpm

# /usr/bin/php7.3 -v
PHP 7.3.7-2+0~20190725.42+debian10~1.gbp848ca5 (cli) (built: Jul 25 2019 11:53:58) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.7-2+0~20190725.42+debian10~1.gbp848ca5, Copyright (c) 1999-2018, by Zend Technologies
# /usr/bin/php5.6 -v
PHP 5.6.40-9+0~20190710.17+debian10~1.gbp923b30 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
#

その後、5.6-fpmを動かしてプロキシモジュールも組み込み。

# systemctl status php5.6-fpm.service
● php5.6-fpm.service - The PHP 5.6 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php5.6-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-08-04 18:29:30 JST; 6h ago
......

# a2enmod actions alias proxy_fcgi fcgid

特定サイトだけPHP 5.6-fpmに

最終的にPHP 7.3をメイン環境として、ヴァーチャルホストの一部サイトだけをPHP 5.6で動かすようにした。

# cat /etc/apache2/sites-enabled/.....conf
<VirtualHost *:80>
ServerAdmin webmaster@.....jp
DocumentRoot /www/html/.....
ServerName .....jp
ScriptAlias /cgi-bin/ "/www/cgi-bin/"
ErrorDocument 404 /missing.html
ErrorLog ${APACHE_LOG_DIR}/.....-error.log
SetEnvIf Remote_Addr 10.141.0.2 no_log
CustomLog ${APACHE_LOG_DIR}/....-access.log combined env=!no_log
SetEnvIf User-Agent "Googlebot" google
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)$" no_log
CustomLog ${APACHE_LOG_DIR}/google......log combined env=google
SetEnvIf User-Agent "slurp" slurp
CustomLog ${APACHE_LOG_DIR}/slurp......log combined env=slurp

<FilesMatch \.php$>
 SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/"
</FilesMatch>

</VirtualHost>

Muninのrrdもi386からamd64になることで互換性が無く、面倒だった。

このサイトのWordPressもPHP 7化で速くなった

このサイトもやっとPHP 7に出来たけれど、「WPは7になれば速い!」という噂通りだった。これも半信半疑ながらDebian 10にしたかった理由のひとつ。

sponsored links