在我們的日常php開發中需要使用大量的第三方包和類庫, 怎么管理是一個問題,
我們用的Yii2框架, 但是並沒有把composer用起來, 由於最近更換為docker部署項目, 於是想起來用composer來管理包並降低部署代碼的時間
安裝composer(在你當做私有庫的服務器上以及開發環境)
參考 https://www.phpcomposer.com/ (有國內鏡像使用方法)
安裝satis (在你當做私有庫的服務器上)
-
mkdir /data #我是在根目錄下 cd data/ mkdir satis cd satis/ composer create-project composer/satis --stability=dev --keep-vcs mv satis mypackages.com cd mypackages.com/ vim satis.json #配置文件需要手動創建
satis.json文件內容如下, 可以復制后修改成你的參數
-
{ "name": "MyRepository", "homepage": "http://mydandan.wang", "repositories": [ { "type": "vcs", "url": "https://github.com/LIzheng1993/test.git"}, { "type": "vcs", "url": "https://git.oschina.net/1129103472/ceshi.git"} ], "require-all" : true, "archive":{ "directory":"dist", "format":"tar", "prefix-url":"http://mydandan.wang", "skip-dev":true } }
其中部分配置的含義
- repositories: 包的存儲路徑,這里可以是內網, 為了演示, 我用github來存儲代碼
require:具體的包的名稱,后面的版本號實際就是git里的tag 。也可以直接使用 require-all:true 的配置獲取全部。
archive:下載遠端項目到本地存儲,會自動生成tar包保存在dist里,可以加快后續composer的速度。
PS:如果git使用的是ip訪問,需要設置 composer config -g secure-http false 再PS:如果設置了archive,對於nginx用戶請注意nginx用戶與php-fpm的執行用戶相同,否則會導致下載tar包無效
生成(類似於build) 一般出問題的話都是目錄的權限問題
php bin/satis build satis.json public/
配置Nginx
server { listen 80; server_name mydandan.wang; root /data/satis/mypackages.com/public; index index.php index.html; access_log /var/log/nginx/mypackages.com.log; error_log /var/log/nginx/mypackages.com.log.err debug; rewrite_log on; location ~* \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php-cgi.sock; fastcgi_index index.php; } location = /favicon.ico { log_not_found off; access_log off; } }
成功后進入mydandan.wang 會出現這樣的頁面
使用
在自己的項目中添加composer.json文件
{ "repositories": [ { "type": "composer", "url": "https://packagist.phpcomposer.com" }, { "type": "composer", "url": "http://mydandan.wang" } ], "require": { "sapolang/ceshi": "*", "test/helloworld": "*" }, "config": { "secure-http": false } }
"secure-http": false 是檢查是否https, 設置false就可以使用http地址作為倉庫了, 否則會報錯
然后執行composer install 或 composer update
也可以添加 -vvv選項來觀察運行的詳情
自定義路徑
在這里我僅說明作為一個包使用者時如何把包下載到我們想安裝的任何位置
僅需要在composer.json文件中的 requires 中添加這個包 "composer/installers": "*" 並在 extra 下設置 installer-paths 屬性。(extra和require是同級別的)
Drupal 的多站點設置就是一個很好的例子,其中的資源包應該被安裝到各自網站的子目錄。
在這里我們使用 composer/installers 來覆蓋安裝路徑:
{ "extra": { "installer-paths": { "sites/example.com/modules/{$name}": ["vendor/package"] } } }
上面的 "sites/example.com/modules/{$name}": ["vendor/package"] 中 sites/example.com/modules/ 可以是你項目中的任何目錄, {$name} 會被 : 后面的["vendor/package"] 替換掉
至此,可以用於公司內部的私有倉庫就搭建完成了
總結
本地 : 只需配置composer.json使用就行, 最多設置下目錄, 設置下https檢查為false
用作私有庫的服務器 : 主要是起了一個packagist的作用, 但是它是我們自己私有的, 而packagist是公開的, 如不理解可以看下packagist網站 https://packagist.org/
需要做也很簡單, 安裝satis, 配置satis.json文件, 配置Nginx, 然后Build生成代碼庫
真正代碼存放的地方:
可以是github也可以是你們公司本地的gitlab,應該也可以直接存到私有庫的服務器上(這里筆者沒嘗試)

