腾讯云服务器配腾讯云镜像最省事,执行composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/即可启用内网加速,但需注意键名、type字段和末尾斜杠;若仍走官方源,可能是项目级配置覆盖全局,可用composer config -l | grep repositories.packagist验证;ci/cd中推荐用--repository-url参数临时切换;换源后需清缓存和lock文件以防hash不匹配。

腾讯云服务器上直接配腾讯云镜像最省事
在腾讯云 CVM 上跑 PHP 项目,composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ 这条命令就能让所有项目走内网加速——只要服务器在腾讯云华南、华东等主流地域,mirrors.cloud.tencent.com 解析出来的 IP 往往是同地域 CDN 节点或内网代理,不用额外开白名单或调 DNS。
但注意三点:
-
repo.packagist是固定键名,写成repos.packagist或repositories.packagist都会静默失败 -
composer必须作为type字段值显式写出,不能省略 - URL 末尾的
/缺不得,漏掉会导致Invalid repository type或Could not fetch https://mirrors.cloud.tencent.com/composer/p2/
为什么配了还是走 packagist.org?优先级和覆盖逻辑必须搞清
腾讯云服务器上执行完全局配置,composer install 却仍慢如龟速,大概率是项目级配置盖掉了全局设置。Composer 的仓库加载顺序是:项目 composer.json 中的 repositories → 当前用户配置 → 全局配置。只要项目里有类似这样的字段:
{"repositories": {"packagist.org": {"type": "composer", "url": "https://packagist.org"}}}
那无论全局怎么设,都只会连官方源。
验证当前实际生效源的方法是:
- 运行
composer config -l | grep repositories.packagist,如果输出为空或仍是https://packagist.org,说明被项目覆盖了 - 想保留项目私有源又加镜像?别手动改 JSON,进项目目录执行
composer config repo.packagist composer https://mirrors.cloud.tencent.com/composer/(不加-g),它会安全 merge 到现有repositories字段里
CI/CD 流水线里临时切镜像,别污染环境
在腾讯云 CODING 或 Jenkins 里跑构建任务时,不想动全局配置,又得确保每次拉包都走腾讯云镜像,用 --repository-url 参数最干净:
-
composer update --repository-url=https://mirrors.cloud.tencent.com/composer/会完全忽略所有已配置的仓库(包括项目级),只连这个地址 - 加上
-vvv可看到真实请求 URL,比如GET https://mirrors.cloud.tencent.com/composer/p2/laravel/framework.json,确认没走错地方 -
composer create-project不支持-r参数,得先composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/,再跑创建命令
换源后首次 install 报 hash 不匹配?缓存和 lock 文件要清干净
腾讯云服务器上刚配好镜像,composer install 却报 Invalid argument: The lock file does not contain the required package 或 hash 校验失败,不是镜像问题,而是本地缓存和 lock 文件残留了旧源信息。
必须做两件事:
- 运行
composer clear-cache清掉~/.composer/cache/下的元数据缓存,否则 Composer 仍会尝试从 packagist.org 加载旧索引 - 删掉项目里的
vendor/和composer.lock,再重新composer install—— 新镜像生成的 lock 文件 hash 和旧的不兼容
内网加速效果是否真起作用,不能只看命令有没有报错;得看 composer show laravel/framework --no-ansi | head -n 3 输出里 URL 是否含 mirrors.cloud.tencent.com,或者用 tcpdump -i any port 443 | grep mirrors 抓包确认实际连接目标。











