手记

Composer 国内加速

一、加速原理

Composer 安装时候回向国外的 Packagist 服务器发送请求,因为从所周知的原因,国内请求国外服务器,是有会出现不稳定甚至不可用的情况。

镜像加速就是把国外的数据缓存到国内的服务器上,Composer 客户端只需配置服务器为国内的服务器,即可从国内服务器上下载,稳定性会有很高的提升。

二、要点

要点一:全量与非全量镜像

Composer 安装扩展包的时候,一般会发起两种请求:

  • JSON 请求 —— 扩展包元信息,包括 zip 包的下载链接;
  • Zip 包请求 —— 扩展包源码压缩包。

全量镜像指的是以上两种请求都使用国内服务器加速。而非全量服务器一般只缓存 JSON 数据。

要点二、更新时间

当一个 PHP 扩展包从 GitHub 上发布新版本的时候,Packagist.org 上会接收到回调并记录新版本的信息。与 GitHub 的回调相比,国内镜像只能通过主动请求 Packagist.org 的方式来获取更新的扩展包版本。

更新时间指的是国内镜像服务器更新请求的频率,意味着当你在 GitHub 上发布了新版本,此新版本需要多长时间才能在国内的镜像服务器上出现。

故更新时间越短越好。

三、调用方式

全局模式(以阿里云为例,推荐):

$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

单独项目使用

$ composer config repo.packagist composer https://mirrors.aliyun.com/composer/

取消镜像

$ composer config -g --unset https://mirrors.aliyun.com/composer/

四、遇到问题

composer 命令后面加上 -vvv (是 3 个 v)可以打印出调错信息,命令如下:

$ composer -vvv create-project laravel/laravel blog
$ composer -vvv require psr/log

常见问题

1、已存在 composer.lock 文件,先删除,再运行 composer install 重新生成。

原因:composer.lock 缓存了之前的配置信息,从而导致新的镜像配置无效。

2、使用 laravel new 命令创建工程, 这个命令会从 这里 下一个 zip 包,里面自带了 composer.lock,和上面原因一样,也无法使用镜像加速,解决方法:

  • 方法一 (推荐):

不使用 laravel new,直接用 composer create-project laravel/laravel xxx 新建工程。

  • 方法二:

运行 laravel new xxx,当看见屏幕出现 - Installing doctrine/inflector 时,Ctrl + C 终止命令,cd xxx 进入,删除 composer.lock,再运行 composer install

3、缓存多久更新一次?

  • 0 时 - 早上 7 时,这个时间段考虑使用人数不会太频繁,间隔为 15 分钟
  • 其余时间,间隔为 5 分钟
正常更新速度可在 1 分内完成 ,但更新太快,会降低 CDN 命中率,如果总有新文件让 CDN 去缓存,反而拖慢了速度,所以故意加了些延迟。我们每次采集中还会删减掉数千个僵尸包,以加快传输速度。

五、常用命令

查看当前版本

$ composer -V

升级版本

$ composer selfupdate
注意 selfupdate 升级命令会连接官方服务器,速度很慢。建议直接下载我们的 composer.phar 镜像,每天都会更新到最新。

六、镜像源列表

1、阿里云 Composer 全量镜像(推荐)

镜像类型:全量镜像

更新时间:1 分钟

镜像说明:阿里云 CDN 加速,更新速度快,推荐使用

2、安畅网络镜像

镜像类型:全量镜像

更新时间:1 分钟

镜像地址:https://php.cnpkg.org

官方地址:https://php.cnpkg.org/

镜像说明:此 Composer 镜像由安畅网络赞助,目前支持元数据、下载包全量代理。

3、交通大学镜像

镜像类型:非全量镜像

镜像说明:上海交通大学提供的 composer 镜像,稳定、快速、现代的镜像服务,推荐使用。

0人推荐
随时随地看视频
慕课网APP