之前發現兩個自己維護的網站有重複的 code
想說提出成 package 來重複利用

不過由於都不是 open source 的網站,所以 package 先弄成 private
這導致 composer 設定上比較麻煩
雖然最後看起來很簡單,但這是經過不少錯誤的嘗試才成功
這邊寫個文章記錄下來


目標

假設有一個放在 Gitlab 的 private repository
名稱是:danny50610/website-core
最少設有一個 tag (假設是:0.1)

希望使用 Deploy Keys 存取

目標是想讓 danny50610/mywebsite 使用 danny50610/website-core
讓開發人員用的電腦、CI 和 Server 都能使用

Deploy Keys

首先,由於 danny50610/website-core 是 private repository
要先新增 Deploy Keys,每一台要使用的電腦都要建立,並新增 public key 到 Gitlab 上

這邊不列出指令,可以參考 Gitlab 的教學

composer require

danny50610/mywebsitecomposer.json 加上

{
    //...
    "repositories": [
        {
            "type": "git",
            "url":  "git@gitlab.com:danny50610/website-core.git"
        }
    ],
    //...
}

type 請使用 git,不要用 vcsgitlab,這樣 composer 才會使用 ssh
url 是 repository 的 clone url (ssh)

接著執行,就大功告成:

composer require danny50610/website-core

備註

如果之前有錯誤的嘗試,先移除先前的設定,並把 composer.jsoncomposer.lock 回復成原本的樣子

因為自己遇到 composer install 突然要求輸入 Gitlab 的 password
後來發現是 composer.lockdanny50610/website-core 不小心讓他存到 https 的下載地址
composer remove danny50610/website-corecomposer require danny50610/website-core 就沒問題了