安装 php 8.0、php8.1 和 php8.2,并在 Ubuntu 22.04 和 Apache 2.4.58 中为不同的站点设置

安装 php 8.0、php8.1 和 php8.2,并在 Ubuntu 22.04 和 Apache 2.4.58 中为不同的站点设置

目前,我在装有 Ubuntu Server 22.04 的 VPS 上运行着 PHP 8.0、Mautic 和 Moodle。

我想安装需要 php8.1 的 Suite CRM 和另一个需要 php8.2 的应用程序。

  1. 如何安装 php8.1 和 php8.2。我想保留默认的 php8.0,并且应用程序最初将继续在 8.0 下运行?

  2. 如何为每个网站/应用程序设置 PHP 版本?

  3. 关于 cron 作业:目前 Mautic 中的 cron 作业是例如* * * php /var/www/html/mautic/bin/console mautic:campaigns:trigger 如何设置使用特殊 php 版本的 cron 作业?(Mautic 和 Moodle 需要 cron 作业)

这是我的配置mo.stefan-franz.de

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/moodle/
ServerName  mo.stefan-franz.de

<Directory /var/www/html/moodle/>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>

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

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

RewriteEngine on
RewriteCond %{SERVER_NAME} =mo.stefan-franz.de
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

我的 SSL 配置_

    root@mautic01:/etc/apache2/sites-available# ls -alh
total 44K
    drwxr-xr-x 2 root root 4.0K Nov 14 12:19 .
    drwxr-xr-x 8 root root 4.0K Nov  7 08:31 ..
    -rw-r--r-- 1 root root 1.3K Apr  8  2023 000-default.conf
    -rw-r--r-- 1 root root 4.5K Apr  8  2023 default-ssl.conf
    -rw-r--r-- 1 root root  647 Sep 30 12:40 ma.stefan-franz.de-le-ssl.conf
    -rw-r--r-- 1 root root  532 Nov 14 12:19 ma.stefan-franz.de.conf
    -rw-r--r-- 1 root root  626 Oct  8 19:56 mo.stefan-franz.de-le-ssl.conf
    -rw-r--r-- 1 root root  466 Oct  8 19:56 mo.stefan-franz.de.conf
    -rw-r--r-- 1 root root  636 Nov  7 08:31 shop.stefan-franz.de-le-ssl.conf
    -rw-r--r-- 1 root root  474 Nov  7 08:31 shop.stefan-franz.de.conf

以下是 moodle 的 SSL 配置:

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html/moodle/
ServerName  mo.stefan-franz.de

<Directory /var/www/html/moodle/>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>

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


SSLCertificateFile /etc/letsencrypt/live/mo.stefan-franz.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mo.stefan-franz.de/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Header always set Strict-Transport-Security "max-age=31536000"

答案1

如果您想在您的网站上使用不同版本的 PHP,您必须使用 PHP FPM(FastCGI 进程管理器)。

1.安装php8.1和php8.2

您想要的某些 PHP 版本不在官方存储库中,因此您可以使用ppa:ondrej/php存储库:

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt upgrade

安装 PHP FPM 和所需的扩展:

sudo apt install php8.0-fpm
sudo apt install php8.1-fpm
sudo apt install php8.2-fpm

sudo a2enmod proxy_fcgi
sudo service apache2 restart

您还必须安装要运行的网站/应用程序所需的 PHP 扩展。例如,如果您的 PHP8.2 网站需要 MySQL,您也必须安装它:

sudo apt install php8.2-mysql

2. 为每个站点设置 PHP 版本

编辑 中每个站点的 Apache2 vhost 配置/etc/apache2/sites-available/。在<VirtualHost>和之间</VirtualHost>添加以下代码(替换8.1为每个站点所需的版本):

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

您还必须将这些行添加到您的-le-ssl.conf文件中。例如/etc/apache2/sites-available/mo.stefan-franz.de-le-ssl.conf应该如下所示:

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html/moodle/
ServerName  mo.stefan-franz.de

<Directory /var/www/html/moodle/>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>

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

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


SSLCertificateFile /etc/letsencrypt/live/mo.stefan-franz.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mo.stefan-franz.de/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Header always set Strict-Transport-Security "max-age=31536000"
</VirtualHost>
</IfModule>

3. 为 cron 使用特定的 PHP 版本

您的 cron 中的命令php使用的是 PHP 的 CLI 版本。您必须安装特定版本的php-cli软件包。您可以使用update-alternatives来配置php将使用哪个版本。例如,如果您想使用 PHP 8.2 php,请执行以下操作:

sudo apt install php8.2-cli

sudo update-alternatives --set php /usr/bin/php8.2

或者,您可以使用命令php8.2而不是php在 cron 中。

要更改中的设置php.ini,您有几个不同的文件:

  • 运行 PHP FPM 8.2 的站点:

    编辑: /etc/php/8.2/fpm/php.ini

    更改此文件后,您应该重新启动 FPM 服务:

    sudo service php8.2-fpm restart
    
  • 运行 PHP FPM 8.1 的站点:

    编辑: /etc/php/8.1/fpm/php.ini

    更改此文件后,您应该重新启动 FPM 服务:

    sudo service php8.1-fpm restart
    
  • 运行 PHP FPM 8.0 的站点:

    编辑: /etc/php/8.0/fpm/php.ini

    更改此文件后,您应该重新启动 FPM 服务:

    sudo service php8.0-fpm restart
    
  • SetHandler不在其 vhost 配置中的站点的默认设置:

    编辑: /etc/php/8.1/apache2/php.ini

    更改此文件后,您应该重新启动 Apache2 服务:

    sudo service apache2 restart
    
  • php当使用来自 cron 的命令时(替换8.2为您在 中设置的版本update-alternatives):

    编辑: /etc/php/8.2/cli/php.ini

相关内容