tahaghafuri / acappella
为Gitea的Composer仓库
Requires
- php: *
- php-http/guzzle6-adapter: ^1.0
- 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
- tahaghafuri/sugar-cube-client: *
Requires (Dev)
This package is auto-updated.
Last update: 2024-10-02 12:38:44 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/
文件夹中)。但是,为了确保它正常工作,请确保你可以通过https://composer.my-website.com/packages.json
访问packages.json文件,以及通过https://composer.my-website.com/gitea
访问/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 或打标签的都将由 Acappella 进行注册。
用法
为了让您的本地 Composer 安装知道 Acappella 仓库的位置,您需要添加一些配置。您可以从您的机器或直接从您的包中配置仓库。
本地设置
您可以在本地计算机/服务器上执行以下命令,让 Composer 了解 Acappella 的存在
composer config -g repositories.acappella composer https://composer.my-website.com
此命令应在 Unix 系统上的 ~/.composer/config.json
文件中添加以下行
{ "repositories": { "acappella": { "type": "composer", "url": "https://composer.my-website.com" } } }
包设置
或者,您可以直接在包的 composer.json 文件中设置仓库地址
{ "repositories": [ { "type": "composer", "url": "https://composer.my-website.com" } ] }
接下来做什么?
- 更新 PHPUnit 测试
- 更新和测试 Dockerfile
- 添加一个示例 Apache 配置文件
- 创建一个简单的基于 Web 的界面