当前位置: 首页 > 后端技术 > PHP

使用Satis搭建一个私有的Composer包仓库

时间:2023-03-30 05:31:05 PHP

简述JamCommunity产品在建立之初是一个商业项目,但是在搭建结构的时候考虑到后续的通用性,所以每个模块都设计成一个Package供内部使用公司内部。因此这些包不能提交给packagist.org。所以我想知道是否可以建立一个私有包仓库并实现私有packagist。仔细阅读Composer文档,发现官方有一个解决方案:这里推荐处理私有包Satis,正是我们目前使用的解决方案,一切运行良好。Satis是一个静态的作曲家存储库生成器。它就像一个超轻量级的、基于静态文件的packagist版本。你给它一个包含composer.json的存储库,定义VCS和存储库。它将获取您列出的所有包并将packages.json文件打印为composer类型的存储库。说明服务器环境:centos7.2nginxphp7.1代码管理平台:码云文章尽量用真实情况来写,但是文章的仓库地址和网页地址是无法访问的,用虚拟信息代替了真实信息。由于CreatePrivateGitProject的源码对于内部项目是不公开的,所以我们选择码云而不是github。主要有两个原因:github是国外服务器,国内偶尔会出现抽风。国内也有一个比较不错的git代码托管平台,免费支持PrivateProject。比如:码云,Codinggithub私有项目是收费的,对于一个公司来说收费不高,但是加上以上两个原因后,还是没有被选中。假设我们已经在码云上建立了一个私有项目,并编写了所有的代码和单元测试。ssh地址:git@gitee.com:iBrand/test-private-composer.gitcomposer.json{"name":"iBrand/test-private-composer","type":"library","description":"iBrandtestprivatecomposer","keywords":["iBrandcrop","privatecomposer",],"license":"MIT","authors":[{"name":"shjchen","email":"ibrand.shjchen@foxmail.com"}],"require":{"php":"^5.6|^7.0",},"autoload":{"psr-4":{"iBrand\\Prviate\\Composer\\":"src/"}},"minimum-stability":"dev","prefer-stable":true}CreateSatisServerInstall$cd/data/www/$composercreate-projectcomposer/satiscompany-private-composer--stability=dev--keep-vcsSetup$cd/data/www/company-private-composer$visatis.json{"name":"iBrandPrivateComposerRepository","homepage":"http://packagist.iBrand.com","repositories":[{"type":"vcs","url":"git@gitee.com:iBrand/test-private-composer.git"}//更多vcsurl。],"要求":{"ibrand/test-private-composer":"*",//你更多的包。},"archive":{"directory":"dist","format":"tar","prefix-url":"http://packagist.iBrand.com"}}说明satis.json配置文件名:仓库名,可以自由定义所有包,使用require-all:true,directory:required,dist文件的位置(里面output-dir)format:optional,zip(default)ortarprefix-url:optional,下载位置,首页(来自satis.json)后跟默认目录Authentication构建之前,我们需要解决代码权限问题,因为之前的项目源码是私有的,所以服务器端需要有读取源码的权限,还是以码云为例:生成sshpublic可以按照以下命令生成sshkey:$ssh-keygen-trsa-C"xxxxx@xxxxx.com"#生成公私rsa密钥对...#输入三次生成sshkey查看你的公钥,把他加入码云(Gitee.com)SSH密钥添加地址:https://gitee.com/profile/ssh...$cat~/.ssh/id_rsa.pub#ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....Buildphpbin/satisbuildsatis.jsonpublic/会在/data/www/company-pri执行vate-composer/public生成仓库列表SetupNginx在上一步已经生成了仓库列表。为了保证可访问性,服务需要通过nginx或者apache暴露出来。我们使用nginx,所以以nginx为例server{listen80;server_name包装师。iBrand.com;根/data/www/company-private-composer/public;索引index.phpindex.html;access_log/data/logs/packages-access.log;error_log/data/logs/packages-error.log错误;重写登录;位置~*\.php${包括fastcgi_params;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;}location=/favicon.cc{off;not_found}log_}配置完成后需要执行servicenginxreload,然后访问http://packagist.iBrand.com可以看到你的仓库列表,如图下面:Usage然后就可以在项目中使用这个私有的Composer包仓库了。在项目"require"的composer.json文件中添加如下配置:{"iBrand/test-private-composer":"~1.0"}"config":{"preferred-install":"dist","secure-http":false},"repositories":[{"type":"composer","url":"http://packagist.iBrand.com/"}]继续实施webhooks以自动构建参考资料源码更新时私有包托管自己的包使用私有资源库讨论交流