使用 Satis 创建 Composer 私有库

本文中使用satis搭建内部的composer仓库

创建Composer包

首先要先创建一个Composer包,可参考:创建你的第一个composer包

创建好之后,可以托管到任意的VCS仓库里,如:GIT、SVN等,也可以放在本地以Path的方式指定路径,更多可参考:点击这里

安装satis

1
2
3
$ composer create-project composer/satis --stability=dev --keep-vcs
$ mv satis private_composer_repo
$ cd private_composer_repo

创建配置文件

下例中,我们使用两个已经创建的Composer包,包名分别为:greatcl/package01greatcl/package02,分别以公开和私有的方式托管在Gitlab上。

创建satis的配置文件satis.json。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"name": "My Private Composer Repository",
"homepage": "http://composer.domain.name",
"repositories": [
{
"type": "vcs",
"url": "https://gitlab.com/greatcl/package01.git"
},
{
"type": "vcs",
"url": "git@gitlab.com:greatcl/package02.git",
"options": {
"ssh2": {
"username": "composer",
"pubkey_file": "/home/greatcl/.ssh/id_rsa.pub",
"privkey_file": "/home/greatcl/.ssh/id_rsa"
}
}
}
],
"require": {
"greatcl/package01": "dev-master",
"greatcl/package02": "*"
}
}

其中repositories段配置的是你的composer包托管的仓库地址。

生成仓库目录

在satis项目根目录下执行如下命令,将会生成静态的仓库目录public/。添加--no-interaction选项,使build命令使用公钥进行授权验证,而不是交互式的询问用户名密码。

注意:你可能需要先在github或其他代码托管系统的某个账号里加入satis服务器的公钥。

1
$ php bin/satis build --no-interaction satis.json public

配置一个虚拟站点指向public目录,我们可以在浏览器上访问到此站点的页面。
Satis

注意:如果我们代码仓库的url不是https的,可能需要设置composer的配置项secure-http为false。

在代码中引用

需要引用私有包的项目的composer.json文件中加入repositories信息:

1
2
3
4
5
6
7
8
9
10
11
12
{                                               
"require": {
"greatcl/package01": "dev-master",
"greatcl/package02": "dev-master"
},
"repositories": [
{
"type": "composer",
"url": "http://composer.domain.name"
}
]
}

如果项目初次使用composer执行composer install进行安装,否则使用composer update进行更新。

下载

上面配置已经可以实现私有仓库的功能了,但是目前每次有项目要引用这些包的时候,都需要去托管的仓库里clone代码,这样速度就会比较慢。

我们可以配置让satis将所有require的包下载到本地,这样就不会每次去clone代码了。在satis.json中添加以下代码:

1
2
3
4
5
6
7
{
"archive": {
"directory": "dist",
"format": "tar",
"skip-dev": true
}
}

参数说明:

  • directory 必须的,在输出目录中的包存放的目录(在output-dir中)
  • format 可选的,zip(默认)或者tar
  • prefix-url 可选的,下载链接的地址,默认是homepage(satis.json中的配置)加上directory
  • skip-dev 可选的,默认是false,当设置true时,不会下载分支的代码,只会下载tag的代码
  • absolute-directory 可选的,存放dist文件的本地绝对目录,而不是output-dir/directory
  • whitelist 可选的,如果设置为一些包名的列表,则只会下载这些包的文件
  • blacklist 可选的,如果设置为一些包名的列表,则不会下载这些包的文件
  • checksum 可选的,默认是true,设置为false时,satis不会检测dist文件的sha1 checksum

至此,一个基本的私有Composer仓库就搭建完成了。

参考资料