管理私人套件#
私人 Packagist#
私人 Packagist 是一款商業套件託管產品,提供專業支援和用於管理私人和公開套件的網路基礎管理,以及精細的存取權限。私人 Packagist 提供套件的 zip 檔案鏡像服務,這會使安裝變得更快,並不受第三方系統影響 - 例如,即使 GitHub 發生故障,您也可以進行部署,因為您的 zip 檔案已建立鏡像。
私人 Packagist 提供託管式 SaaS 方案或本機自託管套件,提供互動式設定體驗。
私人 Packagist 的部分收益用於支付 Composer 和 Packagist.org 的開發和託管,因此使用它是一種在經濟上支援這些開源專案維護的好方法。您可以在 Packagist.com 上找到有關如何設定您自己的套件檔案庫的更多資訊。
Satis#
另一方面,Satis 是開源的,但它只是一個靜態的 composer
儲存庫產生器。它有點像極輕量級、基於靜態檔案的 packagist 版本,可於用來託管貴公司私人套件的元資料,或您自己的資料。您可以使用 Composer 或 Docker 來安裝它。
設定#
例如,假設您有一些套件想供全公司重複使用,但並不打算開放原始碼。您首先會定義一個 Satis 組態:一個 json 檔案,其會列出您精選的 儲存庫。
預設檔案名稱是 satis.json,但您可以使用您喜歡的任何名稱。
以下是組態範例,您可以看到它包含幾個 VCS 儲存庫,但它們可以是任何類型的 儲存庫。然後它使用 "require-all": true
,會選取您定義的儲存庫中所有套件的所有版本。
Satis 尋找的預設檔案為儲存庫根目錄中的 satis.json
。
{
"name": "my/repository",
"homepage": "http://packages.example.org",
"repositories": [
{ "type": "vcs", "url": "https://github.com/mycompany/privaterepo" },
{ "type": "vcs", "url": "http://svn.example.org/private/repo" },
{ "type": "vcs", "url": "https://github.com/mycompany/privaterepo2" }
],
"require-all": true
}
如果要精選想要的套件,可以使用傳統 composer require
鍵內列出要在 satis 儲存庫中擁有的所有套件,使用 "*"
約束條件,以確保選取所有版本,或者如果需要真正特定的版本,請使用其他約束條件。
{
"repositories": [
{ "type": "vcs", "url": "https://github.com/mycompany/privaterepo" },
{ "type": "vcs", "url": "http://svn.example.org/private/repo" },
{ "type": "vcs", "url": "https://github.com/mycompany/privaterepo2" }
],
"require": {
"company/package": "*",
"company/package2": "*",
"company/package3": "2.0.0"
}
}
完成此操作後,請執行
php bin/satis build <configuration file> <build dir>
寫好該程序後,典型的作法是將此命令作為伺服器上的 cron 工作來執行。接著,它會像 Packagist 所做的一樣,更新所有套件資訊。
請注意,如果私密套件是託管在 GitHub 上,則伺服器應擁有 ssh 金鑰,才能存取這些套件;而且應該將 --no-interaction
(或 -n
)旗標新增至命令中,以確保它會退回 ssh 金鑰驗證,而不是提示密碼。這對於持續整合伺服器來說也是個不錯的辦法。
設定指向該 web/
目錄的虛擬主機,假設是 packages.example.org
。或者,使用 PHP >= 5.4.0,可以將內建 CLI 伺服器 php -S localhost:port -t satis-output-dir/
用於臨時解決方案。
部分更新#
您可以設定 Satis 只選擇性地更新特定套件,或只處理具有特定 URL 的儲存庫。這樣可以減少重建 package.json
檔案所需的時間,如果您使用(客製)webhook 在將程式碼推送到某個儲存庫時觸發重建,會很有幫助。
要只重建特定套件,請像這樣傳遞 command 列上的套件名稱
php bin/satis build satis.json web/ this/package that/other-package
請注意,這仍然需要提取和掃描所有 VCS 儲存庫,因為任何 VCS 儲存庫都可能包含(在任何分支上)選取的某個套件。
如果您只想要掃描選取的套件,而不是所有 VCS 儲存庫,需要為所有套件宣告一個 名稱(這只適用於 VCS 儲存庫類型)
{
"repositories": [
{ "name": "company/privaterepo", "type": "vcs", "url": "https://github.com/mycompany/privaterepo" },
{ "name": "private/repo", "type": "vcs", "url": "http://svn.example.org/private/repo" },
{ "name": "mycompany/privaterepo2", "type": "vcs", "url": "https://github.com/mycompany/privaterepo2" }
]
}
如果您只想要掃描單一儲存庫並更新其中找到的所有套件,請將 VCS 儲存庫 URL 傳遞為一個自選的引數
php bin/satis build --repository-url https://only.my/repo.git satis.json web/
用法#
現在,您在專案中需要做的就是將自己的 Composer 儲存庫加入,並使用 packages.example.org
做為 URL;然後您可以向您的私密套件提出要求,並且所有事項應該都能順利執行。您不需要再在每個專案中複製所有儲存庫。只要那個唯一的儲存庫會自動更新。
{
"repositories": [ { "type": "composer", "url": "http://packages.example.org/" } ],
"require": {
"company/package": "1.2.0",
"company/package2": "1.5.2",
"company/package3": "dev-master"
}
}
安全性#
要保護私密儲存庫的安全,可以使用 SSH 或 SSL 以及用戶端憑證來託管。在您的專案中,您可以使用 options
參數來指定伺服器的連線選項。
使用 SSH 的自訂儲存庫範例(需要 SSH2 PECL 擴充功能)
{
"repositories": [{
"type": "composer",
"url": "ssh2.sftp://example.org",
"options": {
"ssh2": {
"username": "composer",
"pubkey_file": "/home/composer/.ssh/id_rsa.pub",
"privkey_file": "/home/composer/.ssh/id_rsa"
}
}
}]
}
提示:請參閱 ssh2 Context 選項以取得更多資訊。
使用用戶端憑證的 SSL/TLS (HTTPS) 的範例
{
"repositories": [{
"type": "composer",
"url": "https://example.org",
"options": {
"ssl": {
"local_cert": "/home/composer/.ssl/composer.pem"
}
}
}]
}
提示:如需更多資訊,請參閱ssl context 選項。
使用自訂 HTTP 標頭欄位進行代碼驗證範例
{
"repositories": [{
"type": "composer",
"url": "https://example.org",
"options": {
"http": {
"header": [
"API-TOKEN: YOUR-API-TOKEN"
]
}
}
}]
}
驗證#
可以在多種不同的方式中處理驗證。
下載#
當在您本地的 satis 鏡像 GitHub、GitLab 或 BitBucket 儲存庫時,建置程序會包含這些平台可用的下載位置。這表示儲存庫和設定會仰賴這些服務的可用性。
同時,這表示會將所有在別處 (位於其他服務或例如 Subversion 中) 的程式碼寄存,不會有可用的下載,因此安裝通常需要花費更長時間。
若要讓您的 satis 安裝套件為所有 (Git、Mercurial 和 Subversion) 套件建立下載,請將以下內容新增到您的 satis.json
{
"archive": {
"directory": "dist",
"format": "tar",
"prefix-url": "https://amazing.cdn.example.org",
"skip-dev": true
}
}
選項解說#
directory
:必要的,dist 檔案的位置 (位於output-dir
內部)format
:選擇性的,zip
(預設) 或tar
prefix-url
:選擇性的,下載位置,預設為首頁 (從satis.json
後面加上directory
)skip-dev
:選擇性的,預設為false
,啟用時 (true
) satis 就不會為分支建立下載absolute-directory
:選擇性的,dist 檔案會傾印到output-dir
/directory
中的一個本機目錄,而不是absolute-directory
whitelist
:選擇性的,如果設定為套件名稱清單,satis 只會傾印這些套件的 dist 檔案blacklist
:選擇性的,如果設定為套件名稱清單,satis 就會略過傾印這些套件的 dist 檔案checksum
:選擇性的,預設為true
,停用時 (false
) satis 就會略過提供 dist 檔案的 sha1 校驗碼
啟用後,所有下載 (包含來自 GitHub 和 BitBucket 的下載) 都會以本機版本取代。
prefix-url#
如果下載最後會進入私人的 Amazon S3 儲存區或 CDN 主機,則在 URL 前面加上不同的主機特別有幫助。CDN 會大幅縮短下載時間,因此也能加快套件安裝速度。
範例:https://my-bucket.s3.amazonaws.com
的 prefix-url
(以及將 directory
設定為 dist
) 會建立看起來像是下例的下載 URL:https://my-bucket.s3.amazonaws.com/dist/vendor-package-version-ref.zip
。
網頁輸出#
output-html
:選擇性的,預設為true
,停用時 (false
) satis 就不會產生output-dir
/index.html 頁面。twig-template
:選擇性的,指向output-dir
/index.html 頁面的個人化 Twig 範本路徑。
放棄的套件#
若要讓你的 satis 安裝程式指示某些套件已放棄,請在你的 satis.json
中加入下列內容
{
"abandoned": {
"company/package": true,
"company/package2": "company/newpackage"
}
}
true
值表示套件確實已放棄,而 "company/newpackage"
值則指定套件已被 company/newpackage
套件取代。
請注意,所有在其自己的 composer.json
檔案中設定為已放棄的套件也會標示為已放棄。
解析依賴關係#
可以讓 satis 自動解析並新增你專案的所有依賴關係。這可以搭配下載功能使用,以建立套件的完整本機鏡像。在你的 satis.json
中加入下列內容
{
"require-dependencies": true,
"require-dev-dependencies": true
}
搜尋套件時,satis 會嘗試從所列的儲存庫解析所有必需的套件。因此,如果你需要 Packagist 的套件,則需要在你 satis.json
中定義它。
僅當 require-dev-dependencies
參數設定為 true 時,才會包裝開發依賴關係。
其他選項#
providers
:非必要的,預設為false
,啟用(true
)時,每個套件都會轉儲到一個獨立的 include 檔案中,而且只會在真正需要套件時,才由 Composer 載入。這能讓 Composer 處理像 packagist 等 دارای大量套件的儲存庫時,處理速度變快。output-dir
:非必要的,定義儲存庫檔案的輸出位置,如果在呼叫build
指令時沒有提供為參數。config
:非必要的,允許你定義 composer 的所有設定選項,除了archive-format
及archive-dir
,因為設定是透過 archive 進行的。有關更多詳細資料,請參閱 設定架構。說明文件。notify-batch
:非必要的,指定 URL,每當使用者安裝套件時,就會呼叫該 URL。請參閱 notify-batch。
找到錯字嗎?這個說明文件有問題嗎?編輯它!