Composer/satis 極速搭建 Composer 私有源

Kurisu發表於2018-07-25

前置操作(satis安裝)

#這裡的 /var/www/packagist.satis.cc 只是舉個例子,以自己實際的資料夾為準
git clone https://github.com/composer/satis.git  /var/www/packagist.satis.cc

然後 在 nginx 加一個 packagist.satis.cc 的配置,指向 /var/www/packagist.satis.cc/public(略)

例示配置

對裡面的 /var/www/packagist.satis.cc/satis.json 檔案的配置

{
  "name": "Easy Repository",
  "homepage": "http://packagist.satis.cc",
  "repositories": [
    {"type": "vcs","url": "https://gitlab.local.com/aBigPackage/helloWorld"},
    {"type": "composer", "url": "https://packagist.laravel-china.org"}
  ],
  "archive": {
    "directory": "dist",
    "format": "tar",
    "skip-dev": true,
    "prefix-url": "http://packagist.satis.cc"
  },
  "abandoned":{
    "lastcraft/simpletest" : "simpletest/simpletest"
  },
  "require":{
    "monolog/monolog": "*",
    "darkaonline/l5-swagger": "~5.4",
    "laravel/laravel":"~5.4",
    "league/flysystem-aws-s3-v3":"*",
    "zircote/swagger-php":"*",
    "simpletest/simpletest":"*"
  },
  "require-all": false,
  "require-dependencies": true,
  "require-dev-dependencies": true
}

配置解釋

// Composer 私有源的名稱,可隨意
"name": "Easy Repository",

// 建立之後home頁面的地址(用於檢視這個源有哪些package)
"homepage": "http://packagist.satis.cc",

// 獲取package的地址
/** 
  這裡如果你是需要從私有的git源獲取package的話,就參照如下這樣寫就可以了
  (帶.git和不帶.git似乎都ok)
  {"type": "vcs","url": "https://gitlab.local.com/aBigPackage/helloWorld"}

  如果你是需要構建內網的源,且內外網分離的情況下從外網獲取package到內網,就參照下面這樣寫就好了
  (沒有必要挨個去寫需要引用的package的github地址)
  {"type": "composer", "url": "https://packagist.laravel-china.org"}
*/
"repositories": [
  {"type": "vcs","url": "https://gitlab.local.com/aBigPackage/helloWorld"},
  {"type": "composer", "url": "https://packagist.laravel-china.org"}
],

//如果需要satis將package下載到本地,直接從本地拉取,則需要配置這一項
//(內網源必須配置此項)
"archive": {
  "directory": "dist",

  //tar or zip
  "format": "tar",

  //是否需要為分支建立下載(預設只對有tag的提交建立下載)
  "skip-dev": false,
  "prefix-url": "http://packagist.satis.cc"
},

// 被拋棄或替換的package
"abandoned":{
  //true表示這個 package 真正的被拋棄
  "lox/simpletest":true
  //表示 lastcraft/simpletest 被 simpletest/simpletest 替換
  "lastcraft/simpletest" : "simpletest/simpletest"
},

// 需要 satis 的全部的 package
"require":{
  "monolog/monolog": "*",
  "darkaonline/l5-swagger": "~5.4",
  "laravel/laravel":"~5.4",
  "league/flysystem-aws-s3-v3":"*",
  "zircote/swagger-php":"*",
  "simpletest/simpletest":"*"
},

//是否需要將配置的源的全部的package都拉取
"require-all": false,
//是否自動解決依賴
"require-dependencies": true
//是否自動解決dev依賴
"require-dev-dependencies": true

build

/var/www/packagist.satis.cc 資料夾下執行命令:

// 全部需要的package重新檢查更新並構建
// 強烈推薦追加 --skip-errors 引數,否則碰到某些已經被放棄的 package 會卡住構建
php bin/satis build satis.json public/ --skip-errors

// 僅僅重新檢查更新並構建指定的幾個包
php bin/satis build satis.json public/ A/package B/other-package

// 如果只想掃描單個儲存庫並更新其中找到的所有包,請將VCS儲存庫URL作為可選引數傳遞:
php bin/satis build --repository-url https://only.my/repo.git satis.json public/

使用 Composer 私有源

有兩種方法可以讓composer去使用私有源

區域性

  1. 在 composer.json 裡新增
    "repositories": [
    {
    "type": "composer",
    "url": "http://packagist.satis.cc"
    }
    ],

全域性

  1. 將composer全域性的源換成私有源
    composer config -g repo.packagist composer https://packagist.laravel-china.org

引入

在引入的時候,如果因為其他 package 已經被改的面目全非導致報錯 無法引入你需要的package,推薦 --ignore-platform-reqs引數

composer require xxx/xxxpackage --ignore-platform-reqs

FAQ

  1. composer 報 SSL 相關問題

    • 這個可以網上找一下解決方案,錯誤資訊搜一下就有了。。。
  2. 對 satis 執行 build 的時候的引數有沒有什麼文件可以看啊!

    • 推薦直接在命令列下使用以下命令看引數列表,快捷方便
      php bin/satis build --help
      //---- or ----
      php bin/satis --help
  3. 待補充

more

個人認為主要的配置項大概是這麼些,如果有更多需求,例如需要http驗證,ssl驗證等的配置請查閱 官方文件

參考來源:

在此基礎上進行 修改,整理,編輯


links: