Ubuntu22.04上Cyberpanel的网站目录Composer用PHP8.4 - 技术宅银魂 - 科技改变生活 - 万事屋

Ubuntu22.04上Cyberpanel的网站目录Composer用PHP8.4

写在前面:CyberPanel 的 PHP 版本真是个“盲盒”

用了 CyberPanel 也有好一阵子了,说实话功能整合确实能打,但每次在 Ubuntu 22.04 上折腾 PHP 版本,都有点像在开盲盒。后台明明已经给网站分配了 PHP 8.4,结果一进 SSH 敲个 php -v,好家伙,还是系统默认的 8.1,甚至有时会冒出 7.4。更别提想在网站目录里用 Composer 装个 Laravel 或者其它依赖,直接报出一堆错误,心态当场就能炸。

所以这篇东西,纯粹是我自己踩完坑后的血泪记录,目标就一个:让 Ubuntu 22.04 上 CyberPanel 的网站目录 Composer 用 php8.4,彻底服服帖帖。别指望 AI 那种全自动完美方案,这里全是实操、吐槽和绕过坑的野路子。

第一步:确认面板里的 PHP 8.4 只是个“前台”

你肯定也发现了,哪怕在 CyberPanel 后台的 PHP 管理里装好了 8.4,它也只是给 LiteSpeed 用的,命令行(CLI)这边很可能还是一片荒芜。我们先老老实实查一下系统命令行能找到什么鬼:

ls /usr/local/lsws/lsphp84/bin/
# 如果看到 lsphp,说明 CyberPanel 编译的 PHP 8.4 就在这儿

这时候你大概想直接把它软链到 /usr/bin/php?千万别,系统包管理器会跟你急,而且 Composer 依赖的一些库也不一定匹配。最稳妥的办法,是给命令行单独安装一套完整的 PHP 8.4,用来作为 Composer 的运行环境。

第二步:老老实实给系统装个独立的 PHP 8.4 CLI

Ubuntu 22.04 上,官方库里根本没有 8.4,必须走 Ondrej PPA,这几乎是 PHP 圈默认的共识了。别反抗,加就完了:

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

接下来就装一套干净的 php8.4-cli 以及 Composer 所需的常见扩展。别贪多,够用就行,不然未安装的扩展也会在之后触发报错,逼死强迫症。

sudo apt install php8.4-cli php8.4-common php8.4-mbstring php8.4-xml php8.4-curl php8.4-zip php8.4-intl php8.4-bcmath -y

敲完之后,再跑一下 php8.4 -v,你会看到版本信息,世界稍微清净了一点。注意,这时候系统默认 php 命令可能还是旧版本,我们用 php8.4 明确调用就行,绝对不出乱子。

第三步:装 Composer,还得用 PHP 8.4 来驱动它

官方那种 curl | php 的安装方式,默认调的是系统 php,大概率会跑在错误的版本上。咱们直接用 php8.4 拉取 Composer 安装脚本,一切都可控了。

# 下载安装脚本并用 php8.4 执行
php8.4 -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php8.4 composer-setup.php
php8.4 -r "unlink('composer-setup.php');"

现在当前目录下会多出一个 composer.phar,它就是咱们的 Composer 本体。为了方便全局调用,可以把它挪个地儿,再弄个别名。但切记不要覆盖掉系统可能已有的 Composer,免得 CyberPanel 面板自己哪天不高兴。

sudo mv composer.phar /usr/local/bin/composer84
# 然后可以在 ~/.bashrc 里加一行 alias composer84="php8.4 /usr/local/bin/composer84"
echo "alias composer84='php8.4 /usr/local/bin/composer84'" >> ~/.bashrc
source ~/.bashrc

之后在终端里直接敲 composer84,它就是以 PHP 8.4 身份跑起来的 Composer 了。逻辑清晰,不会打架。

第四步:切入网站目录,开始真正干活

现在进到 CyberPanel 的网站目录,一般路径在 /home/域名/public_html。为了避免权限地狱,强烈建议不要用 root 跑 composer 指令,而是用这个网站对应的用户身份。怎么看用户?去 CyberPanel 面板的“列出网站”里,能看到每个网站的属主,通常是该域名的前缀。

举个例子,如果网站用户是 mysite,路径是 /home/mysite.com/public_html,那就切过去:

sudo -u mysite -i
cd /home/mysite.com/public_html

然后直接跑 composer84 installcomposer84 require 包名。这时候大概率会遇到两种让人恼火的报错,但别急,都是有解的。

第五步:干掉那两个最恶心的 Composer 报错

1. 内存限制,proc_open 被禁,open_basedir 拦路

当你看到类似 proc_open() has been disabledAllowed memory size of ... exhausted,说明 PHP 8.4 的 CLI 配置太保守。直接去修改它的 php.ini

# 找到 php8.4-cli 的配置路径,通常在 /etc/php/8.4/cli/php.ini
sudo nano /etc/php/8.4/cli/php.ini

找到 disable_functions 这一行,把里面的 proc_openproc_get_status 删掉。再把 memory_limit 改成 -1 或者 2Gopen_basedir 如果写得太死,直接注释掉或者设为合适的路径范围。这样操作虽然略粗糙,但对 Composer 这种本地开发辅助工具来说,绝对够用,也不会影响 LiteSpeed 那边的安全设置,因为那是另一套 php.ini

2. 缺少扩展或版本不符

有时候执行 composer84 时会提示 ext-something is missing。这种最好补,继续用 apt 装对应的 php8.4-扩展名,例如缺少 ext-fileinfo 就装 php8.4-fileinfo。记住一定要用 8.4 版本的包,别手抖装成不带版本号的,那样会污染其他 PHP 版本环境。

sudo apt install php8.4-fileinfo php8.4-gd -y

第六步:验证一切,享受短暂的宁静

改完配置后,回到网站目录,用网站用户身份重新跑一次:

sudo -u mysite -i
composer84 install

如果屏幕顺利地开始下载一堆依赖,没有红色报错,就说明你成功了。这时候再去面板里看一眼站点的 PHP 8.4,它是给网页访问用的,跟你命令行这套独立体系相辅相成,互不干扰。

整个折腾过程,说白了就是:系统 CLI 的 PHP 8.4 和 LiteSpeed 的 PHP 8.4 从来就不是一回事,当你想在 Ubuntu 22.04 上让 CyberPanel 网站目录 Composer 用 php8.4 时,就必须手动搭起这座桥。CyberPanel 再智能化,也猜不到你非要用命令行干活。

附赠:一些可能会救命的提示

  • 如果你网站用的是 Laravel,记得把 .env 配置完,并且 storage 和 bootstrap/cache 权限给足,不然 composer 过后依旧白屏。
  • CyberPanel 的“PHP 选择器”里切换版本后,最好重启一下对应站点的 PHP 进程,否则前台可能仍跑着旧版本。
  • composer84 update 时,先 composer84 diagnose 检查一下环境,能从源头避免一些诡异问题。

万事屋原创教程 · 原文链接:https://www.rei3.com
转载请保留出处。

请登录后发表评论

    没有回复内容

万事屋新帖