推荐跳过 apt 安装 Composer,改用官方脚本安装;需启用 mbstring、xml、zip、curl、json 等 PHP 扩展;全局命令需将 ~/.composer/vendor/bin 加入 PATH;国内用户应配置阿里云镜像源。

Ubuntu 上直接用 apt 装的 composer 通常不是你想要的版本
Ubuntu 官方源里的 composer 包往往滞后多个大版本(比如还卡在 2.2.x),且不带自动更新机制,composer create-project 或 composer require 在较新 PHP 版本下容易报错或行为异常。
真正推荐的做法是跳过 apt,用官方安装脚本直接部署 —— 它生成的是独立可执行文件,不依赖系统包管理,也避免和 php-composer 这类旧包冲突。
- 运行
curl -sS https://getcomposer.org/installer | php下载安装器 - 执行
sudo mv composer.phar /usr/local/bin/composer全局可用 - 验证:
composer --version应显示类似Composer version 2.7.7 - 如果提示
Command 'php' not found,说明没装 PHP CLI,先装sudo apt install php-cli
PHP 扩展缺失会导致 composer install 直接失败
Composer 不只是下载代码,它会解压、校验、生成 autoloader,这些操作依赖特定 PHP 扩展。Ubuntu 默认 PHP 安装通常只含最简模块,缺一不可。
常见报错如:The requested PHP extension mbstring is missing、cURL extension is required,或者 zip extension is missing。
- 必须启用的扩展:
mbstring、xml、zip、curl、json - 检查是否已启用:
php -m | grep -E "mbstring|zip|curl" - 若缺失,例如装 zip:
sudo apt install php-zip(注意:不同 PHP 版本前缀可能为php8.1-zip,用php -v确认主版本) - 改完扩展后无需重启服务,但要确保 CLI 使用的 PHP 配置一致:
php --ini查路径,确认.ini文件里没注释掉对应extension=行
composer global require 的二进制命令找不到?PATH 没配对
用 composer global require laravel/installer 后,laravel 命令却提示 command not found —— 这不是 Composer 故障,是 shell 找不到全局 bin 目录。
Composer 默认把全局命令放 ~/.composer/vendor/bin/,这个路径不在 Ubuntu 默认 $PATH 里。
- 临时生效:
export PATH="$HOME/.composer/vendor/bin:$PATH" - 永久生效:把上面那行加到
~/.bashrc或~/.zshrc(看你在用哪个 shell) - 验证:
echo $PATH看是否包含该路径;再运行which laravel应返回完整路径 - 注意:如果用了
sudo composer global require,命令会被装到/root/.composer/vendor/bin/,普通用户当然找不到 —— 切记别加sudo
国内用户绕不开的源切换:不换镜像,composer create-project 可能卡死
官方源域名 repo.packagist.org 在国内直连极慢,甚至超时中断,尤其拉大型项目(Laravel、Symfony)时,create-project 经常停在 “Installing dependencies” 卡住不动。
这不是网络问题,是 Composer 默认没设超时重试策略,且不走系统代理(即使开了 http_proxy 也不一定生效)。
- 切阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 验证配置:
composer config -g repo.packagist应输出镜像地址 - 如需恢复官方源:
composer config -g --unset repos.packagist - 注意:某些企业网络会拦截 HTTPS 镜像证书,若报 SSL 错误,可临时关验证(不推荐):
composer config -g secure-http false,但优先排查本地 CA 证书是否过期










