本文中使用satis搭建内部的composer仓库
创建Composer包
首先要先创建一个Composer包,可参考:创建你的第一个composer包
创建好之后,可以托管到任意的VCS仓库里,如:GIT、SVN等,也可以放在本地以Path的方式指定路径,更多可参考:点击这里
安装satis
代码语言:txt复制$ composer create-project composer/satis --stability=dev --keep-vcs
$ mv satis private_composer_repo
$ cd private_composer_repo
创建配置文件
下例中,我们使用两个已经创建的Composer包,包名分别为:greatcl/package01
和greatcl/package02
,分别以公开和私有的方式托管在Gitlab上。
创建satis的配置文件satis.json。
代码语言:txt复制{
"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命令使用公钥进行授权验证,而不是交互式的询问用户名密码。
代码语言:txt复制注意:你可能需要先在github或其他代码托管系统的某个账号里加入satis服务器的公钥。
$ php bin/satis build --no-interaction satis.json public
配置一个虚拟站点指向public目录,我们可以在浏览器上访问到此站点的页面。
注意:如果我们代码仓库的url不是https的,可能需要设置composer的配置项secure-http为false。
在代码中引用
需要引用私有包的项目的composer.json
文件中加入repositories
信息:
{
"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
中添加以下代码:
{
"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
仓库就搭建完成了。
参考资料
- http://www.cnblogs.com/maxincai/p/5308284.html
- https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md
- http://blog.sina.com.cn/s/blog_64f0a9e90102vyfb.html