使用 Satis 创建 Composer 私有库

2018-09-13 18:03:14 浏览数 (1)

本文中使用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/package01greatcl/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命令使用公钥进行授权验证,而不是交互式的询问用户名密码。

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

代码语言:txt复制
$ php bin/satis build --no-interaction satis.json public

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

SatisSatis

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

在代码中引用

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

代码语言:txt复制
{                                               
    "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中添加以下代码:

代码语言:txt复制
{
    "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

0 人点赞