centos 7/8 默认 yum 源无 composer 包,需手动下载 composer.phar 安装或启用 remi 仓库;推荐手动安装并校验签名,注意 php 版本、扩展及权限配置。

直接用 yum install composer 会失败,因为默认源没这个包
CentOS 7/8 的官方 yum 源(base、epel)不提供 composer 包,强行 yum install composer 会提示 No package composer available。这不是你网络或配置的问题,是源里真没有。
可行路径只有两条:用 curl 下载二进制 Phar 文件手动安装,或者启用第三方仓库(如 EPEL + Remi)。前者更轻量、可控,后者适合需要系统级管理的场景。
- 推荐新手走手动安装:下载
composer.phar→ 放到/usr/local/bin/composer→ 加执行权限 - 若已在用 Remi 仓库(常见于 PHP 环境),可先运行
yum install epel-release && yum install https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm,再yum --enablerepo=remi-php81 install php-composer(注意 PHP 版本需匹配) - 别用
php composer-setup.php这种方式在生产环境部署——它依赖本地 PHP 配置(如allow_url_fopen、openssl扩展),容易卡在验证签名环节
curl 安装时校验失败(Signature mismatch)怎么绕过又不丢安全
官方安装脚本 curl -sS https://getcomposer.org/installer | php 在 CentOS 上常因 OpenSSL 版本老(如 CentOS 7 默认 OpenSSL 1.0.2k)导致 SHA384 校验失败,报错类似 Signature mismatch, could not verify the phar file。
这不是该关校验,而是要换更兼容的下载方式:跳过 installer 脚本,直接取已签名的稳定版 Phar,并用 php -r 手动验签。
- 执行:
curl -sS https://getcomposer.org/download/2.7.7/composer.phar -o /tmp/composer.phar(用具体版本号,避免 latest 重定向风险) - 再运行:
php -r "if (hash_file('sha384', '/tmp/composer.phar') === file_get_contents('https://getcomposer.org/download/2.7.7/composer.phar.sha384')) { echo 'OK'; } else { exit(1); }" - 通过后移动:
sudo mv /tmp/composer.phar /usr/local/bin/composer && sudo chmod +x /usr/local/bin/composer - 别用
php composer.phar长期调用——必须设为可执行并全局可用,否则 cron 或其他用户执行时会找不到命令
安装后 php -v 正常但 composer 报错“PHP Parse error”或“requires ext-zip”
Composer 运行时报 PHP 解析错误,或明确提示缺扩展(如 ext-zip、ext-xml、ext-mbstring),说明它正在用和 php -v 不同的 PHP SAPI 或 ini 文件。
CentOS 下常见原因是:CLI 用的是系统默认 PHP(如 7.4),但 composer 被 symlink 到另一个版本(如通过 alternatives 设置),或 php.ini 路径被覆盖。
- 查真实路径:
which php和composer --version同时跑,再对比php -i | grep 'Loaded Configuration File'与php -c /etc/php.d/zz-composer.ini -i | grep 'Loaded Configuration File' - 确保
/usr/local/bin/composer头部 shebang 是#!/usr/bin/env php,而不是硬编码#!/usr/bin/php(后者可能指向旧版本) - 补扩展(以 zip 为例):
yum install php-zip,然后确认该模块在 CLI 的php.ini中已启用(检查/etc/php.d/zip.ini是否存在且未被注释) - 如果用了多版本 PHP(如 via Software Collections),必须用完整路径调用:
/opt/rh/rh-php74/root/usr/bin/php /usr/local/bin/composer
非 root 用户无法运行 composer global require
composer global require 默认写入 ~/.composer/vendor/bin/,但 CentOS 默认 umask 是 0022,导致生成的 bin 目录权限为 drwxr-xr-x,而某些 shell(如 zsh)或 sudo 环境下 PATH 查找会拒绝执行其他用户可读但不可写的目录里的二进制文件。
这不是权限不足,是 POSIX 对“world-writable dir in PATH”的安全限制触发了静默失败。
- 改全局安装路径:
export COMPOSER_HOME="$HOME/.local/share/composer",再mkdir -p $COMPOSER_HOME/bin,最后把$COMPOSER_HOME/bin加进$PATH - 或者直接禁用 global 模式,改用项目级
composer require+vendor/bin/xxx调用,更干净 - 别碰
chmod 777 ~/.composer—— 这会让后续composer update拒绝写入,报Not a valid Composer installation










