Thứ năm, 02/04/2020 | 00:00 GMT+7

Cách chạy nhiều phiên bản PHP trên một server bằng Apache và PHP-FPM trên Ubuntu 18.04

Máy chủ web Apache sử dụng server ảo để quản lý nhiều domain trên một version duy nhất. Tương tự, PHP-FPM sử dụng daemon để quản lý nhiều version PHP trên một version duy nhất. Cùng với nhau, bạn có thể sử dụng Apache và PHP-FPM để lưu trữ nhiều ứng dụng web PHP, mỗi ứng dụng sử dụng một version PHP khác nhau, tất cả trên cùng một server và tất cả cùng một lúc. Điều này rất hữu ích vì các ứng dụng khác nhau có thể yêu cầu các version PHP khác nhau, nhưng một số ngăn xếp server , như LAMP được cấu hình thường xuyên , chỉ có thể quản lý một ngăn xếp . Kết hợp Apache với PHP-FPM cũng là một giải pháp tiết kiệm chi phí hơn so với lưu trữ từng ứng dụng trên version riêng của nó.

PHP-FPM cũng cung cấp các tùy chọn cấu hình cho ghi log stderrstdout , khởi động lại khẩn cấp và tạo quy trình thích ứng, rất hữu ích cho các trang web tải nặng. Trên thực tế, sử dụng Apache với PHP-FPM là một trong những cách tốt nhất để lưu trữ các ứng dụng PHP, đặc biệt là khi nói đến hiệu suất.

Trong hướng dẫn này, bạn sẽ cài đặt hai trang web PHP trên một version duy nhất. Mỗi trang web sẽ sử dụng domain riêng và mỗi domain sẽ triển khai version PHP của riêng mình. Đầu tiên, site1.your_domain , sẽ triển khai PHP 7.0. Thứ hai, site2.your_domain , sẽ triển khai PHP 7.2.

Yêu cầu

  • Một server Ubuntu 18.04 với ít nhất 1GB RAM được cài đặt theo Cài đặt server ban đầu với Ubuntu 18.04 , bao gồm user không phải root có quyền sudo và firewall .
  • Một web server Apache được cài đặt và cấu hình theo Cách cài đặt Server Web Apache trên Ubuntu 18.04 .
  • Tên domain được cấu hình để trỏ đến server Ubuntu 18.04 của bạn. Bạn có thể tìm hiểu cách trỏ domain tới DigitalOcean Server theo Cách trỏ đến server tên DigitalOcean từ các công ty đăng ký domain chung . Với mục đích của hướng dẫn này, ta sẽ sử dụng hai domain phụ, mỗi domain được chỉ định bằng bản ghi A trong cài đặt DNS của ta : site1.your_domainsite2.your_domain .

Bước 1 - Cài đặt các version PHP 7.0 và 7.2 với PHP-FPM

Với các yêu cầu đã hoàn thành, bây giờ bạn sẽ cài đặt version PHP 7.0 và 7.2, cũng như PHP-FPM và một số phần mở rộng bổ sung. Nhưng để thực hiện được điều này, trước tiên bạn cần phải thêm repository Ondrej PHP vào hệ thống của bạn .

Thực thi apt-get để cài đặt software-properties-common :

  • sudo apt-get install software-properties-common -y

Gói software-properties-common cung cấp tiện ích dòng apt-add-repository mà bạn sẽ sử dụng để thêm repository ondrej/php PPA (Personal Package Archive).

Bây giờ hãy thêm repository ondrej/php vào hệ thống của bạn. ondrej/php sẽ có nhiều version PHP cập nhật hơn so với kho chính thức của Ubuntu và nó cũng cho phép bạn cài đặt nhiều version PHP trong cùng một hệ thống:

  • sudo add-apt-repository ppa:ondrej/php

Cập nhật repository :

  • sudo apt-get update -y

Tiếp theo, cài đặt php7.0 , php7.0-fpm , php7.0-mysql , libapache2-mod-php7.0libapache2-mod-fcgid bằng các lệnh sau:

  • sudo apt-get install php7.0 php7.0-fpm php7.0-mysql libapache2-mod-php7.0 libapache2-mod-fcgid -y
  • php7.0 là một gói siêu nhỏ được sử dụng để chạy các ứng dụng PHP.
  • php7.0-fpm cung cấp trình thông dịch Fast Process Manager chạy dưới dạng daemon và nhận các yêu cầu Fast / CGI.
  • php7.0-mysql kết nối PHP với database MySQL.
  • libapahce2-mod-php7.0 cung cấp module PHP cho web server Apache.
  • libapache2-mod-fcgid chứa mod_fcgid bắt đầu một số version chương trình CGI để xử lý các yêu cầu đồng thời.

Bây giờ lặp lại quy trình cho version PHP 7.2. Cài đặt php7.2 , php7.2-fpm , php7.2-mysqllibapache2-mod-php7.2 :

  • sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 -y

Sau khi cài đặt cả hai version PHP, hãy khởi động dịch vụ php7.0-fpm :

  • sudo systemctl start php7.0-fpm

Tiếp theo, xác minh trạng thái của dịch vụ php7.0-fpm :

  • sudo systemctl status php7.0-fpm

Bạn sẽ thấy kết quả sau:

Output
● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-03-29 12:53:23 UTC; 15s ago Docs: man:php-fpm7.0(8) Process: 20961 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exited, Process: 20979 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exite Main PID: 20963 (php-fpm7.0) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 1150) CGroup: /system.slice/php7.0-fpm.service ├─20963 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf) ├─20977 php-fpm: pool www └─20978 php-fpm: pool www

Lặp lại quá trình này, bây giờ hãy bắt đầu dịch vụ php7.2-fpm :

  • sudo systemctl start php7.2-fpm

Và xác minh trạng thái của dịch vụ php7.2-fpm :

  • sudo systemctl status php7.2-fpm

Bạn sẽ thấy kết quả sau:

Output
● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-03-29 12:53:22 UTC; 45s ago Docs: man:php-fpm7.2(8) Main PID: 20897 (php-fpm7.2) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 1150) CGroup: /system.slice/php7.2-fpm.service ├─20897 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf) ├─20909 php-fpm: pool www └─20910 php-fpm: pool www

Cuối cùng, bạn phải kích hoạt một số module để dịch vụ Apache2 của bạn có thể hoạt động với nhiều version PHP:

  • sudo a2enmod actions fcgid alias proxy_fcgi
  • actions được sử dụng để thực thi các tập lệnh CGI dựa trên loại phương tiện hoặc phương thức yêu cầu.

  • fcgid là một giải pháp thay thế hiệu suất cao cho mod_cgi khởi động đủ số lượng version của chương trình CGI để xử lý các yêu cầu đồng thời.

  • alias cung cấp cho việc ánh xạ các phần khác nhau của hệ thống file server trong cây tài liệu và chuyển hướng URL.

  • proxy_fcgi cho phép Apache chuyển tiếp các yêu cầu tới PHP-FPM.

Bây giờ khởi động lại dịch vụ Apache để áp dụng các thay đổi :

  • sudo systemctl restart apache2

Đến đây, bạn đã cài đặt hai version PHP trên server của bạn . Tiếp theo, bạn sẽ tạo cấu trúc folder cho từng trang web mà bạn muốn triển khai.

Bước 2 - Tạo cấu trúc folder cho cả hai trang web

Trong phần này, bạn sẽ tạo một folder root tài liệu và một trang index cho hai trang web của bạn .

Đầu tiên, tạo folder root tài liệu cho cả site1.your_domainsite2.your_domain :

  • sudo mkdir /var/www/site1.your_domain
  • sudo mkdir /var/www/site2.your_domain

Theo mặc định, Apache webserver chạy như một www-data user và www-data group . Để đảm bảo bạn có quyền sở hữu và quyền chính xác đối với folder root trang web của bạn , hãy thực hiện các lệnh sau:

  • sudo chown -R www-data:www-data /var/www/site1.your_domain
  • sudo chown -R www-data:www-data /var/www/site2.your_domain
  • sudo chmod -R 755 /var/www/site1.your_domain
  • sudo chmod -R 755 /var/www/site2.your_domain

Tiếp theo, bạn sẽ tạo một file info.php bên trong mỗi folder root của trang web. Điều này sẽ hiển thị thông tin version PHP của mỗi trang web. Bắt đầu với site1 :

  • sudo nano /var/www/site1.your_domain/info.php

Thêm dòng sau:

/var/www/site1.your_domain/info.php
<?php phpinfo(); ?> 

Lưu và đóng file . Bây giờ sao chép file info.php bạn đã tạo vào site2 :

  • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

Web server của bạn bây giờ phải có các folder root tài liệu mà mỗi trang web yêu cầu để cung cấp dữ liệu cho khách truy cập. Tiếp theo, bạn sẽ cấu hình web server Apache của bạn để hoạt động với hai version PHP khác nhau.

Bước 3 - Cấu hình Apache cho cả hai trang web

Trong phần này, bạn sẽ tạo hai file cấu hình server ảo. Điều này sẽ cho phép hai trang web hoạt động đồng thời với hai version PHP khác nhau.

Để Apache phục vụ nội dung này, cần tạo file server ảo với các lệnh chính xác. Thay vì sửa đổi file cấu hình mặc định tại /etc/apache2/sites-available/000-default.conf , bạn sẽ tạo hai file mới bên trong folder /etc/apache2/sites-available/ .

Đầu tiên, hãy tạo một file cấu hình server ảo mới cho trang web site1.your_domain . Tại đây bạn sẽ hướng Apache hiển thị nội dung bằng php7.0 :

  • sudo nano /etc/apache2/sites-available/site1.your_domain.conf

Thêm nội dung sau. Đảm bảo rằng đường dẫn folder trang web, tên server và version PHP trùng với cài đặt của bạn:

/etc/apache2/sites-available/site1.your_domain.conf
 <VirtualHost *:80>      ServerAdmin admin@site1.your_domain      ServerName site1.your_domain      DocumentRoot /var/www/site1.your_domain      DirectoryIndex info.php       <Directory /var/www/site1.your_domain>         Options Indexes FollowSymLinks MultiViews         AllowOverride All         Order allow,deny         allow from all      </Directory>      <FilesMatch \.php$>       # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server       SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"     </FilesMatch>       ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log      CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined </VirtualHost> 

Trong file này, bạn đã cập nhật DocumentRoot vào folder mới và ServerAdmin thành một email mà người quản trị trang your_domain có thể truy cập. Bạn cũng đã cập nhật ServerName , cài đặt domain cơ sở cho cấu hình server ảo này và bạn đã thêm chỉ thị SetHandler để chạy PHP như một server quy trình fastCGI.

Lưu và đóng file .

Tiếp theo, tạo file cấu hình server ảo mới cho trang web site2.your_domain . Bạn sẽ chỉ định domain phụ này để triển khai php7.2 :

  • sudo nano /etc/apache2/sites-available/site2.your_domain.conf

Thêm nội dung sau. , hãy đảm bảo đường dẫn folder trang web, tên server và version PHP trùng với thông tin duy nhất của bạn:

/etc/apache2/sites-available/site2.your_domain.conf
<VirtualHost *:80>      ServerAdmin admin@site2.your_domain      ServerName site2.your_domain      DocumentRoot /var/www/site2.your_domain      DirectoryIndex info.php         <Directory /var/www/site2.your_domain>         Options Indexes FollowSymLinks MultiViews         AllowOverride All         Order allow,deny         allow from all      </Directory>      <FilesMatch \.php$>       # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server       SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"     </FilesMatch>       ErrorLog ${APACHE_LOG_DIR}/site2.your_domain_error.log      CustomLog ${APACHE_LOG_DIR}/site2.your_domain_access.log combined </VirtualHost> 

Lưu file khi bạn hoàn tất. Sau đó, kiểm tra file cấu hình Apache để biết bất kỳ lỗi cú pháp nào:

  • sudo apachectl configtest

Bạn sẽ thấy kết quả sau:

Output
Syntax OK

Tiếp theo, bật cả hai file cấu hình server ảo:

  • sudo a2ensite site1.your_domain
  • sudo a2ensite site2.your_domain

Bây giờ hãy vô hiệu hóa trang web mặc định, vì bạn sẽ không cần nó:

  • sudo a2dissite 000-default.conf

Cuối cùng, khởi động lại dịch vụ Apache để thực hiện các thay đổi :

  • sudo systemctl restart apache2

Đến đây bạn đã cấu hình Apache để phục vụ từng trang web, bạn sẽ kiểm tra chúng đảm bảo các version PHP thích hợp đang chạy.

Bước 4 - Kiểm tra cả hai trang web

Đến đây, bạn đã cấu hình hai trang web để chạy hai version PHP khác nhau. Bây giờ kiểm tra kết quả.

Mở trình duyệt web và truy cập cả hai trang web http:// site1.your_domainhttp:// site2.your_domain . Bạn sẽ thấy hai trang trông như thế này:

Trang thông tin PHP 7.0
Trang thông tin PHP 7.2

Lưu ý các tiêu đề. Trang đầu tiên cho biết rằng site1.your_domain triển khai version PHP 7.0. Thứ hai cho biết site2.your_domain triển khai version PHP 7.2.

Đến đây bạn đã kiểm tra các trang web của bạn , hãy xóa các file info.php . Bởi vì chúng chứa thông tin nhạy cảm về server của bạn và user lạ có thể truy cập được, chúng gây ra mối đe dọa bảo mật. Để xóa cả hai file , hãy chạy các lệnh sau:

  • sudo rm -rf /var/www/site1.your_domain/info.php
  • sudo rm -rf /var/www/site2.your_domain/info.php

Đến đây bạn có một server Ubuntu 18.04 duy nhất xử lý hai trang web với hai version PHP khác nhau. PHP-FPM, tuy nhiên, không giới hạn cho một ứng dụng này.

Kết luận

Đến đây bạn đã kết hợp server ảo và PHP-FPM để phục vụ nhiều trang web và nhiều version PHP trên một server . Giới hạn thực tế duy nhất về số lượng trang web PHP và version PHP mà dịch vụ Apache của bạn có thể xử lý là sức mạnh xử lý của version của bạn.

Từ đây, bạn có thể cân nhắc khám phá các tính năng nâng cao hơn của PHP-FPM , như quy trình sinh sản thích ứng của nó hoặc cách nó có thể đăng nhập sdtoutstderr . Ngoài ra, bây giờ bạn có thể bảo mật các trang web của bạn . Để thực hiện điều này, bạn có thể làm theo hướng dẫn của ta về cách bảo mật các trang web bằng certificate TLS / SSL miễn phí từ Let's Encrypt.


Tags:

Các tin liên quan

Cách sử dụng extension PDO PHP để thực hiện giao dịch MySQL bằng PHP trên Ubuntu 18.04
2020-03-25
Cách triển khai ứng dụng PHP với Kubernetes trên Ubuntu 18.04
2019-08-07
Cách triển khai một ứng dụng PHP với Kubernetes trên Ubuntu 16.04
2019-01-18
Cách tạo địa chỉ kỹ thuật số ngắn và duy nhất cho bất kỳ vị trí nào bằng AngularJS và PHP
2018-08-16
Cách thay đổi cài đặt PHP của bạn trên Ubuntu 14.04
2016-03-25
Cách thiết lập XHProf và XHGui để lập profile ứng dụng PHP trên Ubuntu 14.04
2016-02-19
Cách nâng cấp lên PHP 7 trên CentOS 7
2016-01-14
Cách nâng cấp lên PHP 7 trên Ubuntu 14.04
2015-12-15
Cách triển khai nhiều ứng dụng PHP bằng Ansible trên Ubuntu 14.04
2015-06-28
Cách triển khai ứng dụng PHP nâng cao bằng Ansible trên Ubuntu 14.04
2015-06-02