使用satis自建私有鏡像

創建目的

爲了避免讓代碼公開,可以讓項目基於gitlab快速自動化部署,簡化單個composer.json文件配置內容php

安裝

使用composer

composer create-project composer/satis --keep-vcs

安裝完以後與github中的目錄結構一致nginx

配置satis.json

接着在項目根目錄下建立satis.json文件git

{
    "name": "satis packages",
    "homepage": "http://satis.example.com",
    "repositories": [
        { "type": "git", "url": "ssh://git@gitlab.example.com/tim/test.git" }
    ],
    "require":{
        "tim/test":"dev-master"
    }
}
  • homepagegithub

    在satis上顯示的默認私有鏡像地址
  • repositoriesweb

    須要被索引的git代碼倉庫地址
  • requiredocker

    明肯定義包名能夠減小索引內容,s中使用require-all通過測試發現會索引全網的php包

接下來對鏡像中的packages建立索引json

php bin/satis build  satis.json ./web -v #-v參數能夠看到被索引的包

clipboard.png

使用docker

pull imagecomposer

git pull composer/satis

在build目錄下建立satis.json文件以後運行ssh

docker run --rm -it -v /build:/build composer/satis

上面這條命令的做用與bin/satis命令同樣,都是建立索引gitlab

自動更新

使用crontab執行建立索引命令,時間間隔看具體狀況

訪問web界面

配置nginx將root指向索引輸出目錄
訪問域名以後能夠看到以下界面
clipboard.png

與gitlab一塊兒工做

配置satis.json中看到repositories的定義是使用ssh://協議
clipboard.png

目的在於方便管理項目成員開發以及項目部署中的權限。
假設同一個包有多個開發人員則將其餘人員設置爲組成員,在同一臺跳板機上部署項目,而且設置項目的Visibility LevelInternal
clipboard.png

這樣在開發環境中經過登錄gitlab來判斷權限。
在跳板機上則經過添加該機器的公鑰到deploy keys來判斷權限
clipboard.png

這樣就算其餘人有倉庫地址也不能拉到代碼,目的基本達成。

使用私有鏡像中的包創建項目

建立一個目錄,再建立一個composer.json文件,依賴添加剛剛建立的包

{
    "repositories": [
        { "type": "composer", "url": "http://satis.example.com" }
    ],
    "config": {
        "secure-http": false
    },
    "require": {
          "tim/test": "dev-master"
    }
}
  • secure-http設置爲false是由於satis默認爲https

  • repositories是爲了告訴composer鏡像源不單單隻有packagist.org,還包括了剛剛咱們設置的私有鏡像

這些配置能夠單獨在每一個composer.json文件中設置,也能夠像下面這樣(全局加 -g )配置

composer config secure-http false
composer config repo.packagist composer http://satis.example.com

建立完以後composer install(忽略域名於以前配置的不一樣,這是我本地域名,可是已經弄完了懶得改)
clipboard.png

最後附上tim/test包的composer.json

{
    "name": "tim/test",
    "authors": [
        {
            "name": "tim",
            "email": "tim@example.com"
        }
    ],
    "require":{
        "monolog/monolog":"1.0.*"
    }
}

參考

Handling private packages

相關文章
相關標籤/搜索