Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

28. Quản lý nhiều version PHP trên cùng server

ICT

1. Vì sao phải chạy nhiều version PHP trên một server?

Trong thực tế triển khai, rất hiếm khi toàn bộ website trên server đều:

  • Cùng CMS

  • Cùng framework

  • Cùng yêu cầu phiên bản PHP

Các tình huống rất thường gặp:

  • Website cũ chưa nâng cấp được, cần PHP 8.0 / 8.1

  • Website mới yêu cầu PHP 8.2

  • Staging chạy PHP mới, production vẫn giữ phiên bản ổn định

  • Nâng cấp từng bước để giảm rủi ro

Vì vậy:

Chạy nhiều version PHP trên cùng server là nhu cầu thực tế, không phải ngoại lệ.

Vấn đề không nằm ở “có nên hay không”, mà nằm ở:

quản lý có kỷ luật hay để hệ thống tự rối.


2. Nguyên tắc quản lý nhiều version PHP trong production

Trong loạt bài này, việc quản lý nhiều PHP version tuân theo:

  1. Mỗi version PHP chạy PHP-FPM riêng

  2. Mỗi website chỉ dùng một version PHP

  3. Kết nối bằng Unix socket riêng

  4. Không đổi PHP version “toàn hệ thống” nếu không cần

  5. Ghi chép rõ website ↔ PHP version

Nguyên tắc:

Tách biệt là chìa khóa để vận hành an toàn.


3. Cài đặt thêm version PHP (không làm ảnh hưởng version đang chạy)

Giả sử server đang chạy PHP 8.2, cần cài thêm PHP 8.1 cho website cũ.

3.1. Cài PHP-FPM 8.1

sudo apt install php8.1-fpm -y

PHP 8.1 và 8.2:

  • Chạy song song

  • Không ghi đè lẫn nhau

Kiểm tra service:

sudo systemctl status php8.1-fpm
sudo systemctl status php8.2-fpm

4. Hiểu rõ socket của từng PHP version

Mỗi PHP-FPM version có socket riêng:

  • PHP 8.1:

    /run/php/php8.1-fpm.sock
  • PHP 8.2:

    /run/php/php8.2-fpm.sock

Kiểm tra nhanh:

 
ls -l /run/php/

Nguyên tắc:

Không dùng chung socket cho nhiều version PHP.


5. Gán version PHP cho từng website (bước quan trọng nhất)

5.1. Nguyên tắc gán PHP cho website

  • Không gán bằng CLI

  • Không gán bằng cách đổi php.ini toàn cục

  • Gán trực tiếp trong cấu hình Nginx của website


5.2. Ví dụ cấu hình Nginx cho từng website

Website A dùng PHP 8.2

location ~ \.php$ {
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

Website B dùng PHP 8.1

location ~ \.php$ {
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Chỉ khác một dòng, nhưng quyết định toàn bộ runtime PHP.


6. Quản lý PHP CLI – tránh nhầm lẫn khi chạy lệnh

6.1. PHP CLI không quyết định website dùng PHP nào

Lệnh:

php -v

chỉ phản ánh:

  • PHP dùng cho CLI

  • Không phản ánh PHP-FPM đang chạy cho website

Nguyên tắc:

Website chạy theo PHP-FPM, không theo PHP CLI.


6.2. Gọi đúng PHP CLI khi cần

Khi có nhiều version PHP, nên dùng rõ ràng:

php8.1 artisan migrate
php8.2 composer install

Tránh:

php artisan migrate

nếu không chắc CLI đang trỏ version nào.


7. Extension PHP cho từng version

Mỗi version PHP có extension riêng.

Ví dụ:

  • php8.1-mysql

  • php8.2-mysql

Khi cài extension:

  • Phải cài đúng version

  • Không “cài một lần cho tất cả”

Ví dụ:

sudo apt install php8.1-gd php8.2-gd -y

8. Kiểm tra website đang dùng PHP version nào

8.1. Cách an toàn để kiểm tra

Tạm thời tạo file PHP (sau đó xóa):

<?php echo PHP_VERSION;

Truy cập website để xác nhận version.


8.2. Không dùng phpinfo() lâu dài

  • Chỉ dùng khi test

  • Xóa ngay sau khi xác nhận


9. Những sai lầm phổ biến khi quản lý nhiều PHP version

  • Đổi php CLI và nghĩ website đã đổi PHP

  • Dùng chung socket cho nhiều site

  • Cài extension sai version

  • Không ghi chú website dùng PHP nào

  • Upgrade PHP-FPM mà không kiểm tra Nginx

Những sai lầm này dẫn đến:

Lỗi khó hiểu, khó tái hiện, khó debug.


10. Checklist quản lý nhiều PHP version an toàn

  •  Mỗi version PHP có FPM riêng

  •  Mỗi website gán đúng socket

  •  Không phụ thuộc PHP CLI

  •  Extension cài đúng version

  •  Có ghi chú website ↔ PHP version


11. Chiến lược nâng cấp PHP an toàn

Khuyến nghị:

  1. Nâng cấp staging trước

  2. Chạy song song version cũ và mới

  3. Chuyển website từng bước

  4. Giữ version cũ cho rollback

Nguyên tắc:

Không nâng cấp PHP theo kiểu “all-in-one”.


12. Bài tiếp theo

Trong Bài 29, chúng ta sẽ đi sâu vào hiệu năng PHP:

Tối ưu PHP-FPM: pool, process, memory

Bài này sẽ giúp:

  • PHP không nghẽn khi tải tăng

  • Tận dụng tài nguyên hợp lý

  • Tránh tuning cảm tính