内容简介:先上链接:ZComposer 镜像诞生于2017年3月份,至今已经运行2年多了,这不是一个多么有技术含量的东西,所以简单聊一些开发和解决问题的思路,希望能对你有一点启发。如果你觉得有些收获,请点下鼠标,在
先上链接: https://github.com/zencodex/c...
ZComposer 镜像诞生于2017年3月份,至今已经运行2年多了,这不是一个多么有技术含量的东西,所以简单聊一些开发和解决问题的思路,希望能对你有一点启发。如果你觉得有些收获,请点下鼠标,在 github 上给我1个 star(支持下),谢谢。
- 安全性,不对原有的json,zip做修改,否则会引起 hash 变化,重新计算 hash 没问题(之前第三方有这么做的), 这样带来的问题是,无法对包的安全性做校验 ,假如有恶意黑镜像,对数据做了修改,就无法判断了。所以 ZComposer 的镜像,所有的包都是和 packagist.org 官方一致的,可以比对 hash ,没有任何修改。
- 稳定性,因为不间断的采集数据,上传数据,中间有一个环节出现差错,就可以导致有问题,所以务必对采集完的包,通过 hash 值做完整性检查。有时候第三方的API策略,或者CDN线路都可能导致出现问题。所以做镜像最大的难点,是稳定性的保障。
- Webysther/packagist-mirror(官方推荐的镜像开源) fork 自 hirak/packagist-crawler,但这些镜像开源都没有处理dist包,而dist包才是最大/最多的,最值得CDN处理的。ZComposer 开源是全量镜像,包含了对 dist 部分的处理。dist 包还有个 65000上限子目录数 的问题,1年的时间,包的数量都是成倍的增加。软连接的方案是我原创出来的,或许随着包的无限增加,还需要设计其他方案。
ZComposer 镜像的安装部署
推荐运行主机配置:
- [x] 内存最好不低于4G
- [x] 剩余磁盘空间不低于30G
$ apt install beanstalkd $ cd composer-mirror $ composer install
修改配置参数
通常根据自己部署的实际环境,修改参数。详细配置说明详见 config.default.php
cp config.default.php config.php ,修改 config.php 中的如下参
/**
* distdir 用于存储 zip 包
*/
'distdir' => __DIR__ . '/dist/',
/**
* 指向 mirrorUrl 对应的 web 实际目录
*/
'cachedir' => __DIR__ . '/cache/',
/**
* packagistUrl:官方采集源
*/
'packagistUrl' => 'https://packagist.org',
/**
* 镜像包发布站点, packages.json 入口根域名
*/
'mirrorUrl' => 'https://packagist.laravel-china.org',
/**
* .json 中 dist 分发 zip 包的CDN域名
*/
'distUrl' => 'https://dl.laravel-china.org/',
supervisor 配置
sudo vim /etc/supervisor/supervisord.conf ,添加如下配置信息:
[program:crawler] command=php ./bin/console app:crawler directory=/home/zencodex/composer-mirror/ ;部署代码的位置,自行替换 autostart=true autorestart=true redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 10MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 5 ; stdout 日志文件备份数 stdout_logfile = /tmp/composer_crawler_stdout.log [program:composer_daemon] command=php ./bin/console app:daemon directory=/home/zencodex/composer-mirror/ ;部署代码的位置,自行替换 autostart=true autorestart=true redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 10MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 5 ; stdout 日志文件备份数 stdout_logfile = /tmp/composer_daemon_stdout.log
crontab 定时任务
# sudo crontab -e # 根据自己环境代码的位置,替换 /home/zencodex/composer-mirror # getcomposer 是获取最新的 composer,上传到 CDN 云存储 0 */2 * * * /usr/bin/php /home/zencodex/composer-mirror/bin/console app:clear --expired=json 0 1 * * * /usr/bin/php /home/zencodex/composer-mirror/getcomposer.php
常用命令
# 执行抓取任务 $ php ./bin/console app:crawler # 后台多进程模型同步又拍云 $ php ./bin/console app:daemon # 清理过期垃圾文件 $ php ./bin/console app:clear --expired=json # 扫描并校验所有json和zip文件的hash256 $ php ./bin/console app:scan
For Developers
- 没有使用数据库存储,完全是按目录结构存储
- 每个包的 dist/zip 文件存储的是对应 github url的下载地址,因磁盘空间有限,不在本地存储,直接推送到云端
- 清理过期文件,判断是否有更新,是否过期的依据是文件的时间戳,所以不要手动对文件做 touch,或引起时间戳变化的操作
如果使用非又拍云的其他平台,需要注意以下代码,需要自行实现
ZenCodex\Support\Flysystem\Adapter\UpyunAdapter
注意最大子目录数的坑
代码详情见 src/Commands/PatchCommand.php
/* |-------------------------------------------------------------------------- | linux ext4 支持的最大子目录数有上限,大约 64000 ~ 65000,目前包的数量已经超过上限 |-------------------------------------------------------------------------- | | 有三种解决方法,前2种基本不现实。所以自己通过尝试,找到了3 (软连接不计数的方案) | | 1. 更换没有子文件夹数量限制的文件系统,比如 xfs | 2. 或者更改相关代码,重新编译 ext4 内核 | 3. 切割大的文件夹,分散不同字母开头的文件。在主文件夹里面使用软连接,软连接并不计数 | */
ZComposer 镜像早期是 @Summer 提出的构想,期间也得到了 @overtrue 和LC社区小伙伴们的大力支持,开源也是 Overtrue 提的建议,一并感谢大家们的鼓励和支持。大侠们会在 2019 年 8 月 3 - 4 日,举办国内 第一届 Laravel Conf China 大会,可谓华山论剑,高手云集的盛会,赶紧通过官网报名吧: http://laravelconf.cn
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
如何构建敏捷项目管理团队
丽萨·阿金斯 / 徐蓓蓓、白云峰、刘江华 / 电子工业出版社 / 2012-6 / 49.00元
《敏捷项目管理系列丛书•PMI-ACPSM考试指定教材•如何构建敏捷项目管理团队:ScrumMaster、敏捷教练与项目经理的实用指南》结合作者的亲身经历告诉读者如何建立一个高性能的敏捷项目管理团队,以及最终成为一名优秀的敏捷教练。作者将敏捷教练定义为导师、协助者、老师、问题解决者、冲突领航员、协作指挥者,正是这种不同角色之间的细微区别才使敏捷教练的工作富有深度。《敏捷项目管理系列丛书•PMI-A......一起来看看 《如何构建敏捷项目管理团队》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
XML、JSON 在线转换
在线XML、JSON转换工具