Cài đặt nhiều phiên bản PHP trên cùng một server Debian

Hướng dẫn cài đặt nhiều phiên bản PHP ngoài phiên bản mặc định trên máy tính cài HĐH Linux Debian.

Cài đặt nhiều phiên bản PHP trên cùng một server Debian
Cài đặt nhiều phiên bản PHP trên server Debian 9

Mỗi phiên bản Linux Debian đi kèm với một phiên bản PHP nhất định, ví dụ Debian 9 (Stretch) là PHP 5.6, Debian 10 (Buster) là 7.4. Để cài đặt được những phiên bản khác, bạn phải sử dụng source repository của Ondřej Surý.

Cài đặt respository của Ondřej Surý

Cài đặt một số công cụ hỗ trợ trong quá trình cài đặt:

sudo apt-get install curl apt-transport-https lsb-release ca-certificates gnupg2

Cài đặt GPG key của source list:

curl https://packages.sury.org/php/apt.gpg | sudo apt-key add -

Tạo file cấu hình repository mới:

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list

Cập nhật repository mới:

apt-get update

Nếu trong quá trình cập nhật repository bạn gặp lỗi sai key như sau:

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://packages.sury.org/php stretch InRelease: The following signatures were invalid: EXPKEYSIG B188E2B695BD4743 DEB.SURY.ORG Automatic Signing Key <deb@sury.org>

…thì hãy dùng lệnh sau để cập nhật lại key.

sudo apt-key adv --keyserver keys.gnupg.net --recv-keys B188E2B695BD4743

Cài đặt PHP 5.6

Mặc định PHP5 không còn được hỗ trợ trong Debian 9, nhưng với cách cài đặt này thì đây không còn là vấn đề nữa.

Phiên bản mới nhất được hỗ trợ trong Repository này là 5.6.40. Ta cài đặt phiên bản này và liên kết với Apache2 như sau:

sudo apt-get install php5.6 libapache2-mod-php5.6

Bạn có thể cài đặt thêm các extension cho PHP 5.6 như ví dụ sau:

sudo apt-get install php-pear php5.6-{mysql,curl,gd,intl,imagick,imap,mcrypt,memcache,pspell,recode,snmp,sqlite,tidy,xmlrpc,xsl,mcrypt,mbstring}

Cài đặt PHP 7.x

Repository của Ondřej Surý hỗ trợ nhiều phiên bản PHP 7. Tính đến thời điểm tháng 8/2019 thì phiên bản mới nhất là 7.4 beta.

Để cài đặt PHP 7.3 – phiên bản ổn định nhất hiện tại, bạn hãy thực hiện các bước cài đặt sau (không khác gì cách cài PHP 5.6, chỉ là thay thế phiên bản).

sudo apt-get install php7.3 libapache2-mod-php7.3

Cài đặt thêm các extension:

sudo apt-get install php-pear php7.3-{mysql,curl,gd,intl,imagick,imap,mcrypt,memcache,pspell,recode,snmp,sqlite,tidy,xmlrpc,xsl,mcrypt,mbstring}

Để cài đặt thêm một phiên bản PHP7 khác, bạn hãy thay thế tương ứng phiên bản 7.3 dưới đây với phiên bản 7.x (7.0, 7.1, …) bạn mong muốn.

Để lựa chọn phiên bản PHP mặc định cho lênh php thành phiên bản 7.3, ta cấu hình như sau:

sudo update-alternatives --set php /usr/bin/php7.3
sudo update-alternatives --set phar /usr/bin/phar7.3
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.3
sudo a2dismod php*
sudo a2enmod php7.3
sudo systemctl restart apache2.service

Sử dụng các phiên bản PHP khác nhau cho từng VirtualHost

Giả sử ta đang cài đặt hai phiên bản PHP là 5.67.3. Trước tiên ta cài đặt thêm phần mở rộng php-fpm (FastCGI Process Manager) cho cả hai phiên bản trên.

sudo apt-get install php5.6-fpm php7.3-fpm

Sau khi cài đặt, daemon FPM sẽ tự động khởi chạy. Ta có thể kiểm tra trạng thái chạy bằng những lệnh sau:

sudo systemctl status php5.6-fpm
sudo systemctl status php7.3-fpm

Kiểm tra sự tồn tại của FPM UNIX socket của mỗi phiên bản.

ls -l /var/run/php/php5.6-fpm.sock
ls -l /var/run/php/php7.3-fpm.sock

Cài đặt mod_fastcgi cho Apache2 và kích hoạt module FastCGI và một số module cần thiết.

sudo apt-get install apache2 libapache2-mod-fcgid
sudo a2enmod actions fcgid alias proxy_fcgi
sudo systemctl restart php5.6-fpm php7.3-fpm apache2

Để lựa chọn được phiên bản PHP trong VirtualHost, ta thêm phần xử lý file PHP như sau trong các file cấu hình VirtualHost của Apache2.

<VirtualHost *:80>
...
    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php7.3-fpm.sock|fcgi://localhost/"
    </FilesMatch>
...
</VirtualHost>

Hãy chú ý đoạn /var/run/php/php7.3-fpm.sock là đường dẫn đến FPM Unix socket của phiên bản PHP được sử dụng cho VirtualHost (ở đây là PHP 7.3). Hãy thay 7.3 bằng phiên bản PHP bạn muốn.

Ví dụ một file cấu hình VirtualHost cho domain example.com sử dụng PHP 5.6 như sau:

<VirtualHost *:80>
    ServerName example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/example
    <Directory /var/www/example>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Phản hồi về bài viết

Cùng thảo luận chút nhỉ!

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.