phpcomposer的介绍和中国镜像的设置

composer install 背后到底是怎么运作的?

我们用一张图来说明一下

Composer 就是我们安装在自己系统上的 composer 工具。所有 package 元数据和 zip 文件的下载、安装工作都是它帮我们完成的。

从图上我们可以看到,不管是 Packagist.org 还是 Github.com 出现故障或者被墙,我们都无法正常安装 package,即便能安装的时候,也是龟速。

说到这里,我们看到如果要做镜像的话,单是为 Packagist.org 做镜像显然是不够的,因为它存放的是所有 package 的元数据,真正安装包还在 Github.com 上面呢。所以“全量镜像”就必须将 Packagist.org 和 Github.com 全部镜像才可以。具体到我们的实现来说,就是将 Packagist.org 上的元数据和 Github.com 上面的 zip 包镜像到国内。

Toran Proxy 时代

去年底我们的中国全量镜像上线时用的是 Toran Proxy 搭建的。这个是一个很不错的搭建镜像的工具,而且也是能够同时镜像 Packagist.com 和 Github.com ,并且还是 Composer 作者亲自开发的,兼容、稳定都不会有问题,所以我们就在第一时间用 Toran Proxy 在国内搭建了一个镜像。但是问题很快就显露了出来,下面挨个说一说:

1、“墙”

国内的开发者之所以抱怨 composer install 慢,就是因为国内到国外(Packagist 主站和 Github 的服务器都在国外)的带宽低,不稳定,而且时不时还被“墙”。由于我们意在帮助国内开发者解决痛点,因此必然要将 Toran Proxy 搭建在国内才能起到加速作用,当然,低带宽和墙都是绕不过去的坑。接下来我们就找解决方案吧,只有两种方案:一是将 Toran Proxy 搭建在国外,比如可以放在香港(香港是中国不可分割的一部分!);二是在国外搭建一个 VPN ,让 Toran Proxy 走 VPN 通道。

对于第一种方案,虽然能够顺畅访问 Packagist 和 Github 了,但是大陆到国外访问速度仍然受限,镜像的意义是为了加速 package 的安装的,速度慢也就失去了这个存在的意义。况且,一但流量大了,单机无法承受负载、带宽也非常昂贵(在香港购买百兆带宽不是好办法!)。

第二种方案倒是可行,但是,Toran Proxy 不支持 CDN 分流的,势必存在单机负载重,吃带宽的问题。

2、版权问题

上面两种方案貌似第二种还能凑合,但是有一个最大的问题 -- “版权”,Toran Proxy 是 Composer 作者开发出来希望企业能够付费购买,然后将收到的钱用于 Composer 和 Packagist 的继续维护上,我们继续使用 Toran Proxy 搭建镜像的话其实是违反了版权协议,再用下去显然不合适。另外,如果想要 Toran Proxy 支持 CDN 加速的话,势必要对其进行改造,这个更不道义了,Toran Proxy 并非真正的开源产品,对其改造更不合适。

镜像的实现原理

用图说话:

全量镜像和你同在“中国局域网”内,而且配合 CDN 加速,速度当然杠杠滴!

镜像用法

有两种方式启用本镜像服务:

  • 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中。见“方法一”
  • 单个项目配置: 将配置信息添加到某个项目的 composer.json 文件中。见“方法二”

方法一: 修改 composer 的全局配置文件(推荐方式)

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:

复制

composer config -g repo.packagist composer https://packagist.phpcomposer.com

方法二: 修改当前项目的 composer.json 配置文件:

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户),进入你的项目的根目录(也就是 composer.json 文件所在目录),执行如下命令:

复制

composer config repo.packagist composer https://packagist.phpcomposer.com

上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):

复制

"repositories": {

    "packagist": {

        "type": "composer",

        "url": "https://packagist.phpcomposer.com"

    }

}

以 laravel 项目的 composer.json 配置文件为例,执行上述命令后如下所示(注意最后几行):

复制

{

    "name": "laravel/laravel",

    "description": "The Laravel Framework.",

    "keywords": ["framework", "laravel"],

    "license": "MIT",

    "type": "project",

    "require": {

        "php": ">=5.5.9",

        "laravel/framework": "5.2.*"

    },

    "config": {

        "preferred-install": "dist"

    },

    "repositories": {

        "packagist": {

            "type": "composer",

            "url": "https://packagist.phpcomposer.com"

        }

    }

}

OK,一切搞定!试一下 composer install 来体验飞一般的速度吧!

可惜的事,没有卵用,还是链接不上,也是醉了

镜像原理:

一般情况下,安装包的数据(主要是 zip 文件)一般是从 github.com 上下载的,安装包的元数据是从 packagist.org 上下载的。

然而,由于众所周知的原因,国外的网站连接速度很慢,并且随时可能被“墙”甚至“不存在”。

“Packagist 中国全量镜像”所做的就是缓存所有安装包和元数据到国内的机房并通过国内的 CDN 进行加速,这样就不必再去向国外的网站发起请求,从而达到加速 composer install 以及 composer update 的过程,并且更加快速、稳定。因此,即使 packagist.orggithub.com 发生故障(主要是连接速度太慢和被墙),你仍然可以下载、更新安装包。

解除镜象:

如果需要解除镜像并恢复到 packagist 官方源,请执行以下命令:

复制

composer config -g --unset repos.packagist

执行之后,composer 会利用默认值(也就是官方源)重置源地址。

将来如果还需要使用镜像的话,只需要根据前面的“镜像用法”中介绍的方法再次设置镜像地址即可。

composer切换中国镜像

替换 composer.lock 文件中的 https://files.phpcomposer.com/files/ 为 https://dl.laravel-china.org

命令行 composer config -g repo.packagist composer Laravel China 镜像完成历史使命,将于两个月后停用 | PHP 技术论坛

wget http://curl.haxx.se/ca/cacert.pem

curl -sS https://getcomposer.org/installer | php -- --cafile=cacert.pem

おすすめ

転載: blog.csdn.net/fish_study_csdn/article/details/107349683