摘要:此時(shí)我們就需要一個(gè)工具,能夠搭建私有源,里面都是私有倉(cāng)庫(kù),對(duì)內(nèi)不對(duì)外。就是官方提供的建立私有源的工具。在其它項(xiàng)目中使用私有源只需要在項(xiàng)目的文件的根上添加倉(cāng)庫(kù)地址之后再通過(guò)或者想要的倉(cāng)庫(kù)就可以了。
現(xiàn)在我們常用 Composer 進(jìn)行依賴管理。和其它語(yǔ)言的包管理工具一樣,Composer 使用 GitHub 托管代碼,可以根據(jù)配置文件管理依賴,也可以建立各種腳本,執(zhí)行特定任務(wù)。總之好處很多。
實(shí)際工作中,我們可以把多個(gè)項(xiàng)目公用的邏輯抽出來(lái),作為一個(gè)依賴,然后提交到 Packagist,就可以在其它項(xiàng)目中引用它了。但是,與 NPM 這種工具不同的是,PHP 程序多半會(huì)部署在服務(wù)器上,通過(guò)接口接受外部訪問(wèn),對(duì)安全性的要求高很多。前端可以放開給大家隨便觀摩,后端最好還是放在別人輕易看不到的地方,萬(wàn)一哪個(gè)同事把密碼、salt 寫到代碼里提交,被搜出來(lái),結(jié)果可能就很危險(xiǎn)。
此時(shí)我們就需要一個(gè)工具,能夠搭建私有源,里面都是私有倉(cāng)庫(kù),對(duì)內(nèi)不對(duì)外。
Satis 就是 Composer 官方提供的建立私有源的工具。它的文檔在這里 以及 這里。
整體流程并不復(fù)雜,文檔里都有,我簡(jiǎn)單復(fù)述一下,只包含我用過(guò)的部分,重點(diǎn)穿插我的經(jīng)驗(yàn)。我假定讀者已經(jīng)了解 Composer 的基礎(chǔ)使用,如有問(wèn)題,請(qǐng)自行翻閱文檔。
1. 建立項(xiàng)目使用 Composer 自帶的建項(xiàng)目功能,這個(gè)相當(dāng)于 git clone + composer install + 運(yùn)行 post-install 腳本。
composer create-project composer/satis my-satis --stability=dev --keep-vcs2. 建立配置文件
在 /path/to/my-satis 目錄下建立 satis.json 文件
{ "name": "倉(cāng)庫(kù)名稱", "homepage": "http://satis倉(cāng)庫(kù)地址", "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 }
注意:倉(cāng)庫(kù)名稱需要和倉(cāng)庫(kù)里 composer.json 的 name 定義一致,和路徑?jīng)]什么關(guān)系,不然就會(huì)找不到。我當(dāng)時(shí)被這個(gè)卡了好久……
因?yàn)榧尤胨接性吹膫}(cāng)庫(kù)本身可能也有依賴,require-all 會(huì)把這些依賴的信息也抓進(jìn)來(lái)。如果不需要的話,可以指定某個(gè)倉(cāng)庫(kù),甚至某個(gè)版本:
{ "name": "倉(cāng)庫(kù)名稱", "homepage": "http://satis倉(cāng)庫(kù)地址/", "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" } }3. 生成倉(cāng)庫(kù)列表
執(zhí)行
php bin/satis build satis.json ./web
就可以在 path/to/my-satis/web/ 里生成倉(cāng)庫(kù)列表了。
4. 在其它項(xiàng)目中使用私有源只需要在項(xiàng)目的 composer.json 文件的根上添加
{ "repositories": [ { "type": "composer", "url": "http://satis倉(cāng)庫(kù)地址/" } ], "require": { "company/package": "1.2.0", "company/package2": "1.5.2", "company/package3": "dev-master" } }
之后再通過(guò) composer require 或者 composer install 想要的倉(cāng)庫(kù)就可以了。
Tips: secure-http注意:源里面只有“倉(cāng)庫(kù)列表”,并沒有真的同步代碼倉(cāng)庫(kù)過(guò)來(lái),所以下載還要走托管代碼的機(jī)器,比如 GitHub,內(nèi)部 GitLab 等。所以需要確保相關(guān)的 ssh-key 已經(jīng)添加,或者在配置文件中寫上登錄信息(不建議這么做)。
satis 默認(rèn)要求使用 https,不過(guò) https 需要證書,不太好搞,比如前司運(yùn)維就不愿意弄(當(dāng)然,他們工作很忙,我十分理解)。此時(shí)我們可以設(shè)置 secure-http 為 false 強(qiáng)制 Composer 接受 http 的源。需要注意,secure-http 是 config 的屬性之一,寫在根上是沒用的。
{ "config": { "secure-http": false } }
總結(jié),Satis 私有源的搭建,對(duì)于使用 PHP 的開發(fā)團(tuán)隊(duì)來(lái)說(shuō)是非常必要的。用 Composer 管理依賴效果也非常好,希望所有 PHP 開發(fā)者都好好學(xué)一學(xué)。我現(xiàn)在用的也比較淺,將來(lái)有心得繼續(xù)補(bǔ)充。
再聊一些題外話。PHP 是個(gè)很好的語(yǔ)言,簡(jiǎn)潔高效,易學(xué)強(qiáng)大。但是出身不好,工程學(xué)上的高起點(diǎn)反而成為大家輕視它的原因。很多開發(fā)者也的確對(duì)自己要求不高,只寫業(yè)務(wù)邏輯不考慮語(yǔ)言特性,使得代碼難看難改難維護(hù)。所以我想多說(shuō)兩句回顧一下 PHP 本身的發(fā)展史。(以下以我個(gè)人經(jīng)歷為主)
上古時(shí)期我們一個(gè)頁(yè)面寫一段 PHP,或者一個(gè)動(dòng)作寫一個(gè) PHP,收集請(qǐng)求,做出處理,給出回應(yīng),完成。
好處:
簡(jiǎn)單,好上手
邏輯關(guān)系清晰,從前端可以直接找到目標(biāo)程序
一個(gè)地方出錯(cuò),多半只掛一個(gè)功能
壞處:
代碼復(fù)用率低,不好維護(hù)
難以批量修改
古典社會(huì)隨著工程變大,需要大量的 PHP,分散碎片化的代碼實(shí)在難以管理和維護(hù)。于是我們開始把一些共用代碼抽出來(lái),做成一個(gè)函數(shù),叫 functions.php,其他所有頁(yè)面都 include 它,這樣公用的代碼就不會(huì)這里一份那里一份了。
好處:
提高了代碼復(fù)用性,減少開發(fā)量,提升效率,降低維護(hù)難度
壞處:
工程大的話,一個(gè) functions.php 好幾千行,可讀性也沒好到哪兒去
有時(shí)候我們需要對(duì)一個(gè)函數(shù)進(jìn)行一些小修改,于是不僅函數(shù)庫(kù)會(huì)膨脹,函數(shù)本身也在膨脹
中世紀(jì)PHP 引入類的概念,并且提供了“魔術(shù)方法”來(lái)實(shí)現(xiàn)一些功能。有些程序員也意識(shí)到不能所有代碼都自己手寫,該引用的還得引用,于是從一些開源的庫(kù)拷來(lái)代碼開始用。這個(gè)時(shí)候連 Google Code 都不存在,下載代碼多半在網(wǎng)上搜索 + Ctrl C/V,所以代碼中各種混用。經(jīng)常出現(xiàn),我 include 一個(gè)文件,然后就掛了,原來(lái)是類被重復(fù)定義,或者全局環(huán)境下同名函數(shù)互相覆蓋。開發(fā)亂象不斷,形如黑暗的中世紀(jì)。
好處:
不考慮維護(hù)的話,開發(fā)速度還是可以的……
壞處:
越到后來(lái)坑越多,項(xiàng)目一大積重難返
內(nèi)部執(zhí)行環(huán)境不統(tǒng)一,a.php b.php 的內(nèi)部環(huán)境都不一致,共享代碼反而更加困難
文藝復(fù)興PHP 對(duì)類的支持已經(jīng)十分完善了,大家也開始習(xí)慣用命名空間劃分領(lǐng)域。通過(guò)使用設(shè)計(jì)模式、繼承、接口,復(fù)寫功能和代碼管理的情況大大改善。同時(shí),伴隨 Google Code 和 GitHub 的出現(xiàn)和發(fā)展,大家有了一個(gè)托管代碼和尋找代碼的好地方。我們也開始用 SVN 管理代碼,不會(huì)再搞出 action.php action.php.bak action_new.php action_new.20160102.php 這樣的幺蛾子。開始學(xué)習(xí)開發(fā)規(guī)范,開始更多的的用類管理代碼。
好處:
代碼規(guī)范
版本管理后,更好追溯代碼的變更記錄
可以下載到新版本的代碼
壞處:
SVN 不方便進(jìn)行多倉(cāng)庫(kù)的管理
測(cè)試還靠人工發(fā)掘問(wèn)題
近代社會(huì)Git 開始普及,我們可以更方便的管理代碼了。GitHub 發(fā)展速度很快,從上面找好代碼也很容易,憑借 Git 子倉(cāng)庫(kù)的概念,維護(hù)依賴也容易很多。MVC 框架開始普及,單入口開始流行,內(nèi)部執(zhí)行環(huán)境得到統(tǒng)一。開發(fā)者意識(shí)到測(cè)試的重要性,開始使用測(cè)試工具進(jìn)行測(cè)試開發(fā),代碼的穩(wěn)定性進(jìn)一步提升。
好處:
內(nèi)部執(zhí)行環(huán)境統(tǒng)一,全局修改變得容易
開始寫測(cè)試了
壞處:
學(xué)習(xí)成本開始增加,新入行的人開始搞不懂,為啥寫一個(gè)腳本就能干的事,你們要搞這么復(fù)雜一套架構(gòu)出來(lái)
現(xiàn)代社會(huì)包管理工具成為標(biāo)配。項(xiàng)目依賴不再通過(guò)復(fù)制代碼或者子倉(cāng)庫(kù)來(lái)管理,而是直接使用包管理工具 Compposer。并且整合測(cè)試、部署腳本,方便我們更容易地完成整套開發(fā)流程。另一方面,前端之前已經(jīng)崛起,PHP 可以更多的考慮后端業(yè)務(wù)邏輯,輸出純粹的數(shù)據(jù)接口。
好處:
大型項(xiàng)目穩(wěn)定性可用性大大增加
專業(yè)分工加強(qiáng),PHP 程序員可以更多考慮后端邏輯
壞處:
學(xué)習(xí)曲線更加陡峭,新人入行更難,甚至連有經(jīng)驗(yàn)的老人都未必能適應(yīng)新形態(tài)的開發(fā)。
然則歷史的車輪不可阻擋,我們勢(shì)必會(huì)走向?qū)W習(xí)成本更高、學(xué)習(xí)曲線更陡,但業(yè)務(wù)量更大、更穩(wěn)定的未來(lái)。
與我的博客同步更新。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22148.html
摘要:說(shuō)明服務(wù)器環(huán)境代碼管理平臺(tái)碼云文章中盡量以一個(gè)真實(shí)的情況來(lái)撰寫,但是文章的倉(cāng)庫(kù)地址,網(wǎng)頁(yè)地址均是不可訪問(wèn)的,用虛擬信息替換了真實(shí)信息。比如碼云,是收費(fèi)的,對(duì)于一個(gè)公司來(lái)說(shuō)費(fèi)用不高,但是加上以上兩點(diǎn)原因后,所以未選擇。 簡(jiǎn)述 iBrand 產(chǎn)品立項(xiàng)時(shí)是商業(yè)性質(zhì)的項(xiàng)目,但是在搭建架構(gòu)時(shí)考慮后續(xù)的通用性,因此每個(gè)模塊都設(shè)計(jì)成一個(gè) Package,作為公司內(nèi)部用,因此這些包并不能提交到 pac...
摘要:安裝包添加配置文件添加類似如下內(nèi)容配置文件詳解倉(cāng)庫(kù)名字主頁(yè)地址包所在地址指定獲取哪些包及對(duì)應(yīng)的版本,獲取所有包使用,與包中中的名稱相同,不同會(huì)出現(xiàn)問(wèn)題必需要的,表示生成的壓縮包存放的目錄,會(huì)在時(shí)的目錄中壓縮包格式默認(rèn)和 安裝satis包 cd /home/wwwroot/ composer create-project composer/satis --stability=dev -...
摘要:如果需要定時(shí)更新,則需要配置定時(shí)任務(wù)去定時(shí)更新設(shè)置本地倉(cāng)庫(kù)設(shè)置虛擬主機(jī)使用本地倉(cāng)庫(kù)中的包文件中添加以下拉取,即可獲取本地庫(kù)了如果本地倉(cāng)庫(kù)不存在且有網(wǎng)絡(luò)會(huì)去網(wǎng)絡(luò)中獲取。 環(huán)境 windows nginx php composer 安裝 拉取 satis 項(xiàng)目包,并拉取項(xiàng)目依賴 composer create-project composer/satis --stability=de...
摘要:假設(shè)同一個(gè)包有多個(gè)開發(fā)人員則將其他人員設(shè)置為組成員,在同一臺(tái)跳板機(jī)上部署項(xiàng)目,并且設(shè)置項(xiàng)目的為。這樣在開發(fā)環(huán)境中通過(guò)登陸來(lái)判斷權(quán)限。在跳板機(jī)上則通過(guò)添加該機(jī)器的公鑰到來(lái)判斷權(quán)限這樣就算其他人有倉(cāng)庫(kù)地址也不能拉到代碼,目的基本達(dá)成。 建立目的 為了不讓代碼公開,能夠讓項(xiàng)目基于gitlab快速自動(dòng)化部署,簡(jiǎn)化單個(gè)composer.json文件配置內(nèi)容 安裝 使用composer compo...
摘要:曾今誰(shuí)都有過(guò)迷茫期,下面是我開始開發(fā)中,不斷改變的代碼組織方式。 曾今 誰(shuí)都有過(guò)迷茫期,下面是我開始PHP開發(fā)中,不斷改變的代碼組織方式。 初期:所有代碼一股腦控制器controller 曾今只是簡(jiǎn)單的理解MVC 中期:業(yè)務(wù)代碼抽象一部分到模型層model 開始覺得model層是否該做點(diǎn)什么了 后期:業(yè)務(wù)代碼控制器,模型層只寫db的curd方法 復(fù)雜的業(yè)務(wù)代碼使contro...
閱讀 3441·2023-04-25 23:25
閱讀 2069·2021-11-12 10:36
閱讀 2816·2019-08-30 12:47
閱讀 2037·2019-08-29 18:45
閱讀 435·2019-08-29 17:28
閱讀 1785·2019-08-29 17:15
閱讀 1707·2019-08-29 16:05
閱讀 1405·2019-08-29 14:17