sitelease / acappella
为 Gitea 的 Composer 仓库
Requires
- php: >=7.2.0
- php-http/guzzle6-adapter: ^1.0
- sitelease/sugar-cube-client: *
- symfony/config: ^4.0
- symfony/console: ^4.0
- symfony/dependency-injection: ^4.0
- symfony/event-dispatcher: ^4.0
- symfony/http-kernel: ^4.0
- symfony/routing: ^4.0
- symfony/yaml: ^4.0
Requires (Dev)
- phpunit/phpunit: ^6
This package is auto-updated.
Last update: 2024-09-19 23:00:36 UTC
README
Acappella 是一个私有 Composer 仓库服务器,它与 Gitea 同步。你可以把它看作是一个自托管的、无头、带有 Gitea 超级功能的 Packagist。
目录
为什么选择 Acappella
虽然已经有一些私有 Composer 仓库项目(如 satis、CompoLab、gitlab-composer),但它们都不是专门为 Gitea 设计的。Acappella 是。
它是如何工作的?
第一次设置 Acappella 时,它将通过 API 连接到你的 Gitea 服务器,并解析它所拥有的所有仓库。然后,它将注册找到的任何有效的 * Composer 包,并为 Composer 生成一个 package.json 文件。
* 为了使 Acappella 将 Gitea 仓库注册为“有效”的 Composer 包,它必须在其根目录中包含一个格式正确的 composer.json
文件。
安全免责声明
默认情况下,Acappella 未经保护,任何人都可以访问你的服务器并访问你的包。为了保护包的访问权限,你需要设置某种形式的安全层(使用 IP 白名单、SSL 证书或你选择的任何其他系统)。
要求
配置如下(最好是 Unix)的服务器
- PHP 7.2 或以上(仅在 PHP 7.4.2 上进行了测试)
- Git / Composer
- Web 服务器(Nginx 或 Apache)
- 一个有效的 Gitea 实例(最好为 Acappella 设有一个专用账户)
安装
-
从你的 Gitea 实例,转到你的账户设置,然后转到
应用程序
选项卡,创建一个你选择的名称的令牌(例如,Acappella)。一旦重定向,复制生成的令牌(显示在蓝色警告框中)。 -
在用作 Composer 仓库的服务器上运行以下 composer 命令:
composer create-project sitelease/acappella --no-dev --keep-vcs /var/www/acappella
(最后一个命令参数是你想要安装 Acappella 的路径)。 -
现在转到 Acappella 目录,并执行安装脚本,通过在终端中运行
php bin/install
来执行。你需要输入你的 Gitea URL 并粘贴你之前复制的 API 令牌。
注意:设置将保存在
config/settings.yml
文件中(该文件不进行版本控制)。如果你喜欢,你可以使用config/settings.yml.example
模板手动创建此文件。 -
接下来,你需要确保你的 Web 服务器已经正确配置,以便接收 Gitea Webhooks 和
GET /packages.json
请求。主要问题是使
public/packages.json
和public/archives
可从域名根目录访问(例如,https://composer.my-website.com/packages.json)。所有其他查询都必须转发到public/index.php
。Apache: 如果您使用Apache,此功能应该可以正常工作,因为我们已经包含了某些 .htacess 文件(在根目录和
public/
文件夹中)。但是为了确保它正常工作,请确保您可以访问 packages.json 文件(通过https://composer.my-website.com/packages.json
)以及/gitea
路径(通过https://composer.my-website.com/gitea
)。第一个URL应该显示一个空的JSON字符串(或者如果您已经同步了包,可能不是空的),第二个应该会显示一个警告,内容为
"FAILED: Not POST - The request was not sent using the POST protocol"
。这是预期的(换句话说,这是一个好事)。"No route found" ERROR - 如果您访问 packages.json 文件,并且收到一个包含消息
"No route found for \"GET /packages.json\""
的JSON响应,那么您可能有一个阻止访问package.json
和packages.json
文件的防黑客软件正在运行(我们在我们的服务器安装中遇到过这种情况)。在这种情况下,您可能需要联系您的服务器管理员或支持团队以获得帮助。Nginx: Nginx用户可以在
config/templates/
文件夹中找到一个配置文件,但它尚未经过测试,因此我无法保证它将正常工作(对不起大家,我不使用 NGINX) -
完成这些后,您现在可以使用它的
cli
脚本来使用 Acappella 注册现有的 composer 包。打开您的服务器上的终端(如果需要,通过 SSH)并运行以下命令php bin/cli sync
这将完全同步您的 Gitea 服务器与 Acappella 仓库。执行后,所有分发存档都将存储在 Acappella 缓存中,并且
packages.json
索引将是最新的。 -
最后但同样重要的是,您需要创建一个
Push Events
webhook。为此,您有两个选项(实际上有三个),创建默认 webhook(仅管理员可用),创建组织 webhook,或创建仓库 webhook(不推荐)。每个选项都有其优缺点。
默认 Webhooks: 默认 webhook 将应用于(或复制到)所有未来的仓库,因此对于确保所有新的仓库都有 webhook 来说是非常有用的。不幸的是,它们不会应用于现有的仓库,一旦添加就无法更改,除非手动更新每个仓库。
组织 Webhooks: 组织 webhook 克服了许多默认 webhook 的缺点。它们适用于 所有当前和未来的仓库,并且创建后可以轻松更改。但它们也有自己的缺点,因为它们 仅应用于组织拥有的仓库。
仓库 Webhooks: 这些 webhook 是应用于 单个仓库 的,因此在 Acappella 的上下文中,它们 仅适用于测试(例如,检查 Acappella 是否已正确配置)。
多个 Webhooks: 如果这三个选项中的任何一个都不适合您的特定用例,您可以选择设置多个 webhook。只需记住,它们可能会在某些仓库上重叠,在这种情况下,同一个仓库将触发两个 webhook。虽然这不会直接对 Acappella 产生任何问题(据我所知),但它可能会在您有大量包的情况下造成速度减慢。
在本文档中,我们将设置一个“组织 webhook”。为此,请登录到您的 Gitea 账户,转到您想要添加 webhook 的组织,然后点击其名称旁边的小齿轮。然后点击
Webhooks
>添加 Webhook
并然后选择Gitea
。将出现一个新的屏幕,您可以配置新的 webhook。将目标 URL 设置为
https://composer.my-website.com/gitea
(其中composer.my-website.com
是您想要与 Acappella 实例一起使用的域名或 IP),将 HTTP 方法设置为POST
,POST 内容类型设置为application/json
,并确保触发条件设置为Push Events
。最后但同样重要的是,打开一个终端并运行以下命令来生成一个16字符的秘密密钥:
openssl rand -hex 16
将生成的密钥粘贴到
Secret
字段并保存webhook。
设置完成!您的仓库现在已完整设置,任何未来推送到Gitea的push/tag都将由Acappella注册。
CLI 命令
以下是一个CLI命令列表
-
php bin/cli sync
-sync
命令将完全同步您的Gitea服务器与Acappella。执行后,所有包含composer包的Gitea仓库将被下载为存档并存储在Acappella的系统缓存中,且
packages.json
索引将是最新的。 -
php bin/cli update argument
-update
命令接受一个参数,并将从Gitea检索指定包的更新。参数可以是composer包的名称(如
firesphere/social
)、Gitea仓库的名称(如Sitelease/sugar-cube-client
)或Gitea仓库的ID(如241
) -
php bin/cli install
-install
命令用于首次配置Acappella。
连接到 Acappella
为了让您的本地Composer安装连接到Acappella,您需要创建一个新的repository
配置。您可以在全局Composer配置文件中创建此设置,或者在composer包中直接创建。
使用全局设置
您可以在本地计算机/服务器上执行以下命令,让Composer知道Acappella的存在并禁用安全HTTP:
composer config -g repositories.acappella composer http://composer.mygit.ca
composer config --global secure-http false
此命令应在Unix系统上的~/.composer/config.json
文件中添加以下行
{ "config": { "secure-http": false }, "repositories": { "acappella": { "type": "composer", "url": "http://composer.mygit.ca" } } }
使用包设置
或者您也可以直接在包的composer.json
文件中设置仓库地址
{ "config": { "secure-http": false }, "repositories": [ { "type": "composer", "url": "http://composer.mygit.ca" } ] }
接下来是什么?
- 修复cli "update"命令
- 更新PHPUnit测试
- 更新并测试Dockerfile
- 添加一个示例Apache配置文件
- 创建一个简单的基于Web的界面