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

Debian 9 (Stretch) không hỗ trợ PHP 5 và mới nhất cũng chỉ đến bản 7.0. Để cài đặt được những phiên bản này, bạn phải sử dụng source repository của Ondřej Surý. Sau đây là hướng dẫn cài đặt.

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

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" > /etc/apt/sources.list.d/sury-php.list

Cập nhật repository mới:

$ apt-get update

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 php5.6-mysql php5.6-curl php5.6-gd php5.6-intl \
    php-pear php5.6-imagick php5.6-imap php5.6-mcrypt php5.6-memcache \
    php5.6-pspell php5.6-recode php5.6-snmp php5.6-sqlite php5.6-tidy \
    php5.6-xmlrpc php5.6-xsl php5.6-pear php5.6-mcrypt php5.6-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 php7.3-mysql php7.3-curl php7.3-gd php7.3-intl \
    php-pear php7.3-imagick php7.3-imap php7.3-mcrypt php7.3-memcache \
    php7.3-pspell php7.3-recode php7.3-snmp php7.3-sqlite php7.3-tidy \
    php7.3-xmlrpc php7.3-xsl php7.3-pear php7.3-mcrypt php7.3-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, ta cấu hình như sau:

$ sudo update-alternatives --config php

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 ls /var/run/php/php5.6-fpm.sock
$ ls -l ls /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>

Từ khóa

Gửi phản hồi của bạn

Hãy giúp tôi nâng cao chất lượng bài viết bằng những câu hỏi của bạn! Thông tin cá nhân của bạn sẽ được giữ bí mật.