在Ubuntu/Debian系统下,VestaCP升级PHP7可以走通,但需要绕开官方源改用第三方源或直接编译,整体可行且成本不高;如果服务器上站点不多,我更推荐直接迁移到HestiaCP,后者从底层就支持PHP7.x,免去手动维护的麻烦。
ubuntu/debian下vestacp升级php7的完整过程
VestaCP官方源里至今只提供PHP 5.6,想在Ubuntu 18.04或Debian 9/10上把PHP版本升到7.x,需要自己动手替换PHP源,这里给出一套在真实服务器上验证过的升级路径,从确认当前环境到切换PHP版本,一步步说清楚。
先确认系统版本和当前PHP状态
登录服务器后,先跑下面两条命令,搞清楚底子是什么情况:
cat /etc/os-release php -v
输出结果会告诉我你这台机器是什么发行版、什么版本,以及VestaCP默认装的PHP是哪个小版本,根据业内专家的实操经验,Ubuntu 16.04和Debian 8以下的老系统不建议折腾PHP7,因为依赖库太旧,升级过程中容易把系统搞崩。
VestaCP安装的PHP5.6通常是编译安装的,路径在/usr/local/php5或/usr/bin/php,VestaCP面板本身的Web界面用的是/usr/local/vesta/php,这跟网站用的PHP是两套东西,升级时不要动面板自带的PHP,否则后台会直接打不开。
用sury源安装php7.4(推荐)
Sury是Debian系系统里比较活跃的PHP第三方源,维护者是PHP官方打包人员之一,包的质量比较稳定,这个源支持Ubuntu 16.04/18.04/20.04和Debian 8/9/10/11。
添加源的命令如下:
apt-get install -y apt-transport-https lsb-release ca-certificates wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list apt-get update
更新完源之后,直接安装PHP 7.4和常用扩展:
apt-get install -y php7.4-fpm php7.4-cli php7.4-mysql php7.4-gd php7.4-curl php7.4-mbstring php7.4-xml php7.4-zip
安装完成后,VestaCP默认的Apache配置还在用PHP5,需要手动把网站指向PHP-FPM,VestaCP的Apache vhost配置文件在/home/{用户名}/conf/web/apache2.conf,找到PHP相关配置段,改成FastCGI模式。
一个比较省事的做法是直接在Apache配置里禁用php5_module,改用FastCGI代理,修改/etc/apache2/mods-enabled/下的php5相关软链接,然后重启服务:
a2dismod php5 a2enmod proxy_fcgi setenvif systemctl restart apache2
这个方案的好处是升级和回滚都比较简单,apt源方式随时能切回旧版本,行业共识认为,sury源是目前Debian系系统升级PHP的最稳妥路径。
编译安装PHP7.4(备选)
如果服务器不能访问外部源,或者系统版本太老不支持sury源,就只能走编译这条路,编译前先装依赖:
apt-get install -y libxml2-dev libssl-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libfreetype6-dev libmcrypt-dev
下载PHP源码并编译:
cd /usr/local/src wget https://www.php.net/distributions/php-7.4.33.tar.gz tar -zxvf php-7.4.33.tar.gz cd php-7.4.33 ./configure --prefix=/usr/local/php74 --with-apxs2=/usr/bin/apxs2 --with-mysqli --with-pdo-mysql --with-gd --with-curl --with-zlib --enable-mbstring make && make install
编译安装完成后,把php.ini复制到安装目录,替换Apache的libphp模块路径,这个方案耗时较长,遇到依赖问题比较折腾,除非不得已不建议用。
vestacp升级php7前要确认的几件事
升级PHP版本不是只跑几条命令就完事,特别是VestaCP这种老面板,动手前有几个点必须确认清楚,遗漏任何一个,都可能让网站直接白屏。
网站代码和老模块的兼容性
多年没更新的WordPress主题、老旧的PHP程序,在PHP 7.4下大概率会报错,特别是使用了mysql_系列函数的老代码,PHP 7.0开始就彻底移除了这些函数,直接导致页面打不开。
建议先在本地或临时目录复制一份站点代码,用PHP 7.4的CLI模式跑一遍php -l语法检查,把明显不兼容的文件提前修掉,相当一部分老站点的兼容性问题集中在magic_quotes、ereg函数和隐式类型转换上。
VestaCP备份策略和回滚方案
升级前务必在VestaCP后台创建一个完整备份,备份文件会自动生成在/backup目录,同时把/usr/local/vesta/
目录整体打个tar包,这个目录里存着面板的配置文件、DNS记录和邮件配置。
tar -czf /backup/vesta-$(date +%Y%m%d).tar.gz /usr/local/vesta/
另外记录一下当前各网站的PHP处理方式,VestaCP支持Apache模块模式和Nginx+PHP-FPM模式,升级后如果PHP处理方式变了,/home/{用户名}/conf/web/下的配置文件需要手动调整。
vestacp升级php7之后怎么看生效了没
升级完成不等于PHP版本就切过去了,还需要做几项检查确认实际生效的是7.x。
命令行和网页双线验证
命令行验证比较简单:
php -v
如果输出的是PHP 7.4.x,说明CLI模式已经切换,但网页不一定跟着变,因为Apache可能还在用旧的模块,在网站根目录放一个探针文件:
echo "<?php phpinfo(); ?>" > /home/{用户名}/web/{域名}/public_html/check.php
浏览器访问https://{域名}/check.php,看输出的PHP Version是不是7.4,确认后记得删除这个探针文件,防止信息泄露。
常见踩坑和解决办法
PHP处理方式变了导致动弹不得。 VestaCP默认用Apache的mod_php模式,改成PHP-FPM后需要在Apache配置里加ProxyPassMatch指令,把这个配置放到vhost的Directory段里,只对php文件生效:
<FilesMatch .php$>
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
某些扩展没装导致函数不存在。 登录后台看到Fatal error: Call to undefined function这类报错,说明缺扩展,用apt补装对应的php7.4-xxx包,然后重启php7.4-fpm,问题基本能解决。
PHP文件直接下载而不是执行。 这个问题是Apache没有把php文件交给PHP解释器,确认一下apache2.conf或vhost配置里AddType application/x-httpd-php .php是否存在,或者FastCGI配置是否正确。
升级后VestaCP后台打不开。 面板自带的PHP版本是独立的,如果误改了/usr/local/vesta目录下的文件或者覆盖了面板的PHP,后台就会挂掉,多数情况下从备份恢复面板目录即可。
VestaCP升级PHP7后源失效了怎么办
第三方源好用的是它不操心,坏了也是真麻烦,Sury源偶尔会因为签名过期或包冲突导致apt-get update报错,尤其是长期不更新的服务器。
验证Sury源的GPG密钥:
apt-key list | grep -i sury
如果密钥过期,重新导入一次即可,如果某个PHP扩展的包版本冲突,先卸载旧依赖再装新的,不要强行-f强制安装,容易把系统搞乱。
有的服务器因为镜像源配置问题连不到Sury源,把/etc/apt/sources.list.d/php.list里的deb换成deb-src试试,或者直接用IP访问,这类网络问题一般不是源本身挂掉,换源或者等一段时间再更新就恢复了。
VestaCP升级PHP7常见问题
升级后PHP版本显示还是5.6怎么办
这种情况通常是Apache还在加载旧模块,检查/etc/apache2/mods-enabled/下是否还有php5相关的软链接,执行a2dismod php5再重启Apache,如果面板后台的PHP版本显示还没变,VestaCP后台的PHP版本是读取配置文件的,手动更新/usr/local/vesta/data里的版本记录即可。
网站崩了还能回滚到PHP 5.6吗
能备份就能回滚,先恢复VestaCP备份,再重新装回PHP 5.6的包,如果用sury源升级的,直接apt-get install php5.6-fpm就能装回旧版本,再改回Apache的PHP处理方式,网站就能恢复,整个过程大概半小时内能完成,前提是备份完整。
vestacp和hestiacp哪个更适合升级后的环境
HestiaCP是VestaCP的分支,底层代码更活跃,默认支持PHP 7.4和8.x,升级脚本和源都是现成的,如果当前服务器站点不多,迁移到HestiaCP的成本比手动折腾VestaCP低得多,而且后续的PHP版本更新能跟上主流节奏,老用户从VestaCP迁移到HestiaCP有官方迁移脚本,数据迁移路径比较成熟,如果站点比较多或者有定制配置,留在VestaCP手动升级PHP7也能正常运行,只是后续维护成本会高一些。
整体来看,Ubuntu/Debian系统下VestaCP升级PHP7就是换源、装包、改Apache配置三步,核心难点在于兼容性排查和面板自身的PHP版本隔离,只要做好备份,失败了大不了回滚,没有不可逆的风险。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/665033.html





