本文中使用satis搭建内部的composer仓库
创建Composer包
首先要先创建一个Composer包,可参考:创建你的第一个composer包
创建好之后,可以托管到任意的VCS仓库里,如:GIT、SVN等,也可以放在本地以Path的方式指定路径,更多可参考:点击这里
安装satis
1  | composer create-project composer/satis --stability=dev --keep-vcs  | 
创建配置文件
下例中,我们使用两个已经创建的Composer包,包名分别为:greatcl/package01和greatcl/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目录,我们可以在浏览器上访问到此站点的页面。
注意:如果我们代码仓库的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(默认)或者tarprefix-url可选的,下载链接的地址,默认是homepage(satis.json中的配置)加上directoryskip-dev可选的,默认是false,当设置true时,不会下载分支的代码,只会下载tag的代码absolute-directory可选的,存放dist文件的本地绝对目录,而不是output-dir/directorywhitelist可选的,如果设置为一些包名的列表,则只会下载这些包的文件blacklist可选的,如果设置为一些包名的列表,则不会下载这些包的文件checksum可选的,默认是true,设置为false时,satis不会检测dist文件的sha1 checksum值
至此,一个基本的私有Composer仓库就搭建完成了。