使用 satis 搭建私有 composer 库,加速 PHP 测试部署

为什么要搭建私有 composer 软件库

composer 是 PHP 开发处理代码库依赖关系的标准,但是由于需要访问 packagist.org 和 github.com 获取依赖库信息和下载代码,国内使用的速度很慢,导致 composer 的代码库下载和更新成了 PHP 项目迈向自动化测试和部署路上极大的障碍。

为了提高国内 composer 软件库的下载速度,有热心的朋友搭建了网站——https://pkg.phpcomposer.com/ ,镜像了 packagist.org 的内容,提升了 composer 安装依赖库的速度。但是对于自动化测试和部署环境来说,还是要一遍遍地下载文件,仍然会浪费不少时间。

同时,公司内部会有私有软件库,不适合放到 github.com 开源。这些软件库如果需要被公司内多个项目共用,同时处理好版本和依赖问题,就有使用 composer 管理的需要。

提高 composer 安装依赖软件库的速度、管理公司私有软件库,这些需求一起,促使我们要搭建私有的 composer 软件库。

如何使用 satis 搭建 composer 软件库

搭建 composer 软件库,首先最好更深入地熟悉 composer 的功能,推荐通读一遍 composer 的官方文档:https://getcomposer.org/doc/,特别要理解 composer 如何决定应该安装哪个版本的软件库,决定到哪里下载,推荐文档中 RepositorySchema 两个部分。

简单来讲,composer 根据 composer.json 文件完成依赖的软件包下载包含以下几步:

  1. 根据 repositories 字段的数组中定义的软件库,依次访问这些软件库,获得所有可以下载的软件包的名字、版本、下载路径信息。
  2. 根据 require 和 require-dev 中定义的所需的软件包名字和版本范围(以及这些软件包依赖的软件包的软件包名字和范本范围),确定需要下载的每个软件包的具体版本。
  3. 从第一步获取的数据中,根据软件包和对应版本,找到下载路径,完成下载。

以上第一步获取软件包信息默认从 packagist.org 获取,第三部下载软件包一般从 github.com 下载,这两部就是国内使用 composer 速度慢的症结,也就是本文搭建私人 composer 库的内容。

这个轮子 composer 核心团队已经为我们做好了,也即标题中所说的 satis 项目 https://github.com/composer/satis,你可以参考这篇文章:https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md。下文对其中的一些细节和可能踩的坑做补充说明。

只下载需要的软件包,避免下载所有

在开头的示例中,satis 的 json 配置文件包含 require-all: true,表示下载 repositories 里自定义软件库的所有版本的软件包。如果你没有定义 repositories,repositories 默认为 packagist.org 中的所有软件包。这样你的 build 过程会没完没了,所以一定要记得去掉 require-all: true 一行,而是和普通的 composer.json 一样,添加 require 字段,写上实际需要的具体软件包的名字和版本范围。

设置下载软件包代码到本地

如果需要将软件包下载到本地,需要添加 archive 一段,否则将会只下载软件包信息。

一段 satis 的配置示例

{
  "name": "flarum repos",
  "homepage": "http://packages.example.org",
  "require": {
    "flarum/core": "^0.1.0-beta.8",
    "flarum/approval": "^0.1.0",
    "flarum/auth-facebook": "^0.1.0",
    "flarum/auth-github": "^0.1.0",
    "flarum/auth-twitter": "^0.1.0",
    "flarum/bbcode": "^0.1.0",
    "flarum/emoji": "^0.1.0",
    "flarum/lang-english": "^0.1.0",
    "flarum/flags": "^0.1.0",
    "flarum/likes": "^0.1.0",
    "flarum/lock": "^0.1.0",
    "flarum/markdown": "^0.1.0",
    "flarum/mentions": "^0.1.0",
    "flarum/pusher": "^0.1.0",
    "flarum/statistics": "^0.1.0",
    "flarum/sticky": "^0.1.0",
    "flarum/subscriptions": "^0.1.0",
    "flarum/suspend": "^0.1.0",
    "flarum/tags": "^0.1.0"
  },

  "require-dependencies": true,
  "require-dev-dependencies": true,
  "archive": {
    "directory": "dist",
    "skip-dev": true
  }
}

如何使用 satis 下载好的 composer 库

satis 下载的实际只是一些静态文件,而 composer 需要的是可访问的网页地址。所以我们需要将 satis 下载并构建的目录放到 apache 或者 nginx 目录下,可以通过浏览器访问到。之后作为 composer 类型的 repo 加入 composer.json 中的 repositories 段中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

elasticsearch 查询格式整理
Previous post
Ubuntu18.04 安装 Docker
Next post