内容简介:先上链接: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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Composer 中国全量镜像开源了,一起让 PHP 社区更繁荣
- Kubernetes生态圈繁荣背后的利与弊
- 深度长文:表面繁荣之下,人工智能的发展已陷入困境
- AI繁荣下的隐忧——Google Tensorflow安全风险剖析
- 余凯揭开自动驾驶繁荣外衣:激荡硅谷、失落中国 | 自动驾驶这十年
- 对话AWS上海AI研究院长张峥:寻找繁荣背后的正确道路
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Is Parallel Programming Hard, And, If So, What Can You Do About
Paul E. McKenney
The purpose of this book is to help you understand how to program shared-memory parallel machines without risking your sanity.1 By describing the algorithms and designs that have worked well in the pa......一起来看看 《Is Parallel Programming Hard, And, If So, What Can You Do About 》 这本书的介绍吧!