目前,我在装有 Ubuntu Server 22.04 的 VPS 上运行着 PHP 8.0、Mautic 和 Moodle。
我想安装需要 php8.1 的 Suite CRM 和另一个需要 php8.2 的应用程序。
如何安装 php8.1 和 php8.2。我想保留默认的 php8.0,并且应用程序最初将继续在 8.0 下运行?
如何为每个网站/应用程序设置 PHP 版本?
关于 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