Composer 是 PHP 的软件包管理系统,它提供用于管理 PHP 软件和依赖库关系的标准格式。作为日常开发,Composer 能够满足我们的日常需求,但有些情况下,我们有些公司内部的扩展,不希望被检索或者放在共有库中,就需要搭建私有库来解决问题。
在讨论搭建私有仓库前,我们先了解一下 Composer 是如何安装扩展的

Composer 安装扩展流程

通过上图我们不难发现,如果要构建私有仓库,我们需要构建一个类似 Packagist 的网站,来告诉 Composer 该从哪里下载扩展代码,这就需要用到 Satis 工具

Satis

介绍

Satis 是一个开源的静态 Composer 仓库生成器,有了它我们可以轻松的构建出一个类似 Packagist 的索引网站,来告诉 Composer 通过我们自己的私有仓库下载扩展。

安装

命令行安装

// 安装
composer create-project composer/satis:dev-main
// 构建索引仓库
php bin/satis build <configuration-file> <output-directory>

docker 安装

下载镜像:
docker pull composer/satis 运行镜像:

docker run --rm --init -it \
  --user $(id -u):$(id -g) \
  --volume $(pwd):/build \
  --volume "${COMPOSER_HOME:-$HOME/.composer}:/composer" \
  composer/satis build <configuration-file> <output-directory>

配置

创建一个名为:satis.json 的配置文件。
内容如下:

{
    "name": "passboat", 
    "homepage": "http://packages.example.org", 
    "repositories": [
        {"type": "vcs", "url": "你的仓库地址(支持git/svn)", }
    ], 
    "require-all": true
}

为了拉取代码更为方便将 ssh 密钥配置到代码仓库中。ssh 密钥生成参考生成 SSH 公钥

构建

docker run --rm -it  -v 配置文件所在目录:/build -v 配置文件所在目录:/root/.ssh composer/satis build /build/satis.json /build/public

执行完上述命令后,会在配置文件所在目录生成一个 public 文件夹,该文件夹就是 Satis 为我们生成的静态索引网站。接下来就是通过配置 nginx 将域名解析到生成的 public 文件夹。

Nginx 配置

当通过 Satis 生成索引网站后,我们需要通过 nginx 配置,使其能够通过外网访问到该网站. 配置完成后访问下过如下:

Composer 配置

在需要安装私有扩展的项目里,在 composer.json 文件中加入如下代码:

  "repositories": [
        {
          "type": "composer",
          "url": "nginx配置的静态所以网站的域名"
        }
    ],

Conclusion

经过上述步骤,整个私有仓库的搭建就已经完成了,如果你对私有仓库需要更多的配置,可以阅读Composer 私有包文档,进行更细致的设置,祝进步!

Reference

Satis github
Composer