bricev/compolab

GitLab的Composer仓库

1.0.1 2019-05-31 16:17 UTC

README

Scrutinizer Code Quality Code Coverage Build Status

CompoLab是一个PHP包仓库服务器,它将所有符合GitLab规范的仓库作为Composer依赖项提供。

为了在CompoLab注册,您的GitLab仓库必须包含根目录中有效的composer.json文件。

安全免责声明

默认情况下,CompoLab未加密,任何人都可以访问您的包。为了保护对您的包的访问,您必须按自己的意愿配置您的Web服务器。例如,您可以使用IP白名单过滤,或要求使用自己的自签名SSL证书。

要求

一个(最好是Unix)服务器,配置了以下内容:

  • PHP 7.1(一个PHP组件与PHP 7.2存在问题,使此代码仅符合7.1版本)
  • Git / Composer
  • 一个Web服务器(Nginx或Apache)
  • 一个正在运行的GitLab实例(具有管理员用户账户)

安装

  1. 从您的GitLab实例,编辑您的个人资料,然后转到访问令牌并创建一个具有您选择的名称的令牌(例如,CompoLab),没有过期日期,并仅检查apisudo作用域。如果您不是具有sudo令牌的管理员,您可能在使用CompoLab仓库缓存中缓存组和项目时受到限制。

  2. 在您想要用作Composer仓库的服务器上运行以下composer命令:composer create-project bricev/compolab --no-dev --keep-vcs /var/www/compolab(其中最后一个命令参数是要安装CompoLab的路径)。

  3. 通过运行命令php bin/install执行安装脚本(从CompoLab目录)。在此步骤中,您需要准备好注册GitLab URL和令牌。设置将保存在config/settings.yml文件中(该文件未进行版本控制)。如果您愿意,您可以使用config/settings.yml.example模板手动创建它。

  4. Web服务器必须正确配置,以便接收GitLab Webhooks并接收GET /packages.json请求。主要问题是使public/packages.jsonpublic/archives可以从域根目录访问(例如,https://composer.my-website.com/packages.json)。所有其他查询必须转发到public/index.php。这里可以找到文档化的Nginx配置示例:config/templates/nginx.conf

  5. 使用您的服务器上的cli应用程序,并运行以下命令php bin/cli sync:这将完全同步您的GitLab服务器与CompoLab仓库。执行后,所有分发存档将存储在CompoLab缓存中,而packages.json索引将是最新的。

  6. 从您的GitLab实例,转到管理区域 > 系统钩子,并配置一个带有URL https://composer.my-website.com/gitlab(其中composer.my-website.com是您想要与CompoLab实例一起使用的域或IP)的系统钩子(您被建议在Web服务器级别确保安全性,因此不需要秘密令牌),并仅检查推送事件标记推送事件启用SSL验证(如果您的Web服务器已正确配置以接受SSL请求)。

一切就绪:您的仓库已经完整,并且任何未来推送到GitLab的推送/标记都将由CompoLab注册。

用法

为了使您的本地Composer安装知道如何找到您的CompoLab仓库,您需要添加一些配置。您可以从您的机器或直接从您的包中配置仓库。

本地设置

您可以在本地计算机/服务器上执行以下命令,让Composer知道CompoLab的存在

composer config -g repositories.compolab composer https://composer.my-website.com

此命令应在Unix系统中的~/.composer/config.json(文件中添加以下行

{
    "repositories": {
        "compolab": {
            "type": "composer",
            "url": "https://composer.my-website.com"
        }
    }
}
包设置

或者,您可以直接在包的composer.json文件中设置仓库地址

{
    "repositories": [
        {
            "type": "composer",
            "url": "https://composer.my-website.com"
        }
    ]
}