根据rfc介绍 6.5.7. 408 Request Timeout
SSH命令实例
连接服务器最常用命令
Golang 项目部署方案总结
常用的 Golang web/api 项目部署方案有4种
1. nohup xxx &
2. supervisord
3. nginx proxy
4. apache proxy
可以参考beego的文档 https://beego.me/docs/deploy/
然而我们可以换一种思路,以软件的形式部署,流程如下:
1. Go打包为特定版本的rpm,版本号自增,rpm包包含打包的可执行程序、配置、service脚本
2. 推到内部yum仓库,yum仓库索引更新
3. 目标机执行 yum update xxx
4. 目标机yum update执行结束时触发Service xxx-server reload
Laravel依赖注入深入浅出
我们在开始用Laravel时会大量用到依赖注入,由于框架做了很多工作,所以可以方便的依赖绑定和自动注入。
具体的写代码时参考文档的“服务容器”实例代码就能快速上手。但是依赖注入到底是什么?
依赖注入是一种设计模式。
《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)是软件工程领域有关软件设计的一本书,提出和总结了对于一些常见软件设计问题的标准解决方案,称为软件设计模式。该书作者为:埃里希·伽玛(Erich Gamma), Richard Helm , Ralph Johnson,John Vlissides,后以“四人帮”(Gang of Four,GoF)著称。
设计模式一般指本书中提出的3大类(创建模式、行为模式、组合模式)共23种经典的可以解决常见软件设计问题的可复用设计方案。https://www.zhihu.com/question/19558521
在2004年,Martin Fowler提出了“哪些方面的控制被反转了?”这个问题。
另外 SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖倒置)是由罗伯特·C·马丁在2009年引入的术语,指代了面向对象编程和面向对象设计的五个基本原则。
依赖倒置原则规定:
高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。
抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口。
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
为了实现自动注入,在PHP中可以使用反射实现一个IoC容器,Laravel就是这么做的。
https://segmentfault.com/a/1190000002424023
PHPUnit: Exception: Serialization of "Closure" is not allowed
用phpstorm测试laravel程序的时候发现单独执行phpunit命令可以把所有测试用例都跑一遍,而单独指定某个测试文件,某个测试方法则报错。百思不得其解。今天终于下决心查一下。
基本上是因为你的全局变量中, 包含了闭包. PHPUnit 在执行过程中会对全局变量进行序列化备份, 而PHP 自身的机制限制了序列化对闭包(Closure)的操作. 因此只要禁用序列化全局变量好了.
执行的时候加上phpunit --no-globals-backup xxx
参数
或者在phpunit.xml配置文件里加上backupGlobals="false"
引用:
https://xwsoul.com/posts/1137
https://github.com/sebastianbergmann/phpunit/issues/451
https://github.com/kenjis/ci-phpunit-test/issues/90
https://stackoverflow.com/questions/33477923/phpunit-tests-from-code-gives-exception-serialization-of-closure-is-not-allow
2017年总结
- 调到web前端组,在邢岩手下做事,飞凡JS工程师,业务主要分App内H5和商户后台管理系统,,基于angular 1.5+开发了fancyUI。
- nodejs上手,辅助前端同学搭建开发脚手架部分。
- 在webpack打包方面,通篇阅读webpack文档和插件,优化配置参数,引入并行化组件,将webpack打包时间缩短到之前的1/5。
- 跟帅鑫配合搭建了前端性能监控分析平台,利用现代浏览器提供的JS API采集用户访问页面的加载时间等数据,分页面在后台统计后绘制成图表展示。
- 17年上半年,微风系统——穿云项目前期子项目之一,这个系统可以在后端收集到2000多台线上服务器的linux 操作日志、F5、路由器、交换机的操作日志。
- 17年中旬,重新接手php项目,发现DevOps的价值,人难免出错,所以给你出错的机会,也给程序一个机会告诉你你出错了,给程序一个机会自动恢复正常。我们在程序外围增加守护进程,我们在程序内增加报警日志,在程序外围增加报警监控。
- 学习了解DevOps知识。我们希望各种数据都能在远端通过web界面看到,于是有了kafka生产消费监控、有了redis指标监控、mysql指标监控、机器指标监控等。kibana、grafana、zabbix等。
- 学习Go语言,在gitchat上发表话题《私有仓库搭建指南》《Go类型转换》
- 9月,离开飞凡进入影合众。介绍引入molten,搭建了walle部署系统替换jenkins,节省大量部署时间,原来一个项目部署要花10分钟,现在只用20秒。
- 在项目上将原来在php5.3运行的扩展升级到支持php5.6并且做好了编译脚本和文档,这样以后升级更高版本的php也做好了准备,发表了《php内存泄露治理》gitchat
- 年底正在撰写gitchat《TDD开发:gitlab、jenkins、sonar碰撞火花》,免费发布。
- 分享inception - mysql审计及秒及回滚的解决方案,从源码解析 mysql binlog2sql 回滚方案原理。
省市县数据在程序中如何管理
我们开发时可能会遇到需要存储xx数据对应的省市县信息,这个时候大家会考虑地名会改名,所以需要有一个映射表,通过id来对应一个地名,比如1山东 2山东济南 3山东济南xx区,然后还会考虑由于行政区划变更导致A地之前属于山东省,更新后属于江苏省,那么还需要记录地方的上级信息,只考虑三级数据那么可以用三个字段存,考虑多级可以用parentId一个字段来存。
实际上我们应该以国家统计局发布的数据为准,他足够权威数据精准,更新频度不高,且id设计合理
http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html
6位编码如110105 表示北京市(市辖区)朝阳区每两位数为一级,前两位11表示北京市(省级),中间两位01表示北京市(市级),后两位05表示区县(县级)
整理出id、name的表后如果有数据变更只需全量更新即可。除此之外还可以自定义省市简写、简称等功能以便满足实际业务需求。
devOps 组合
最近在忙devOps相关的工作。
主要围绕:
1:walle 代码快速部署及回滚系统
2:inception Mysql数据库SQL审核、自动生成回滚SQL、自动执行上线、一键回滚等功能
3:sonar 代码静态分析
4:wrench 业务辅助工具:快速生成配置工具、快速查看实际价格生成原因工具等
5:jenkins 自动化测试、语法检查等
有工具,业务开发效率提高,大家工作更有动力,这些工作就有他的价值。
web开发常用程序安装提速指南
一、常用的通用方案我们再过一遍,VPN、HTTP/HTTPS代理、Socks5代理、IPv6
二、做php开发离不开composer
composer本身下载是个挺蛋疼的事,我做了一个windows版本的composer安装包,linux、mac用户可以用包管理或者翻墙下载
三、mac用户必备的homebrew
第一步
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin git://mirrors.ustc.edu.cn/homebrew-core.git
第二步
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
brew update
注意有的人用的zsh,要注意修改命令生效的文件
参考链接https://www.zhihu.com/question/31360766
四、nodejs
淘宝给我们做了一件大好事
先安装nvm然后
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
export NVM_IOJS_ORG_MIRROR=https://npm.taobao.org/mirrors/iojs
然后想安装哪个版本的nodejs、npm随便你
nvm install 7
nvm use 7
如果装了新版本的nodejs,以前装的全局npm包可以这么迁移过来
nvm install 7 --reinstall-packages-from=6
五、npm、yarn
搞nodejs、前端js开发的同学用的最多的就是npm和yarn
全局装一个nrm
nrm use taobao
还可以直接去修改.npmrc
# .npmrc
registry=https://registry.npm.taobao.org/
disturl=https://npm.taobao.org/dist
参考链接:http://zqlu.github.io/2016/05/10/taobao-nodejs-mirror/
php资深工程师必备知识
面试php资深工程师相信你已经在这个领域深入耕耘5年以上,有丰富的实践经验和知识深度广度。
作为一个phper,你一定对php和Mysql熟悉的不能再熟悉了,那么必考的知识点有:
php的面向对象的知识、迭代器、协程、流
mysql的引擎区别、索引相关用法、升级mysql实践、安全相关、锁
一般来说你至少还应该熟悉memcached、redis的一种
memcached的cas一致性分布式算法应该有所了解
redis的存储类型、用法、场景也应该门清,要是能把redis的二进制数据存储getbit、setbit搞明白可以加分,redis的备份机制有哪些?有没有看过源代码?
nginx或Apache的相关知识
php-fpm怎么管理php进程的?
如何优化性能?如何debug?这些开放命题就是面试官结合自己的水平给你打分了,你要是能把他忽悠住那你的水平一定比他高
就算你没了解也得知道php APC缓存、opcode cache吧,怎么实现的?
队列是干什么的?实际应用中什么时候用?
用过什么队列?kafka、NSQ、RabbitMQ还有啥?
然后再看看知识的广度
其他的数据库有没有了解运用过?MongoDB有啥特点?为啥不该用MongoDB?ElasticSearch呢?
linux相关业务场景的命令使用
基础不再赘述,算法题好好刷一刷是必须的
是否真正了解计算机原理?系统内核?编译原理?能否说明白进程、线程、协程?
2016年总结
玩了php7
设计模式玩了一圈
composer玩腻了
不想写php扩展
转了nodejs
npm、yarn玩了,自己会发布包了
angular开始学
react开始学
架构设计
玩了openresty
MongoDB及mapReduce
2015年总结
前6个月在windows服务器上把一整套电商团购特卖系统开发并run起来
后6个月接触了很多
restful API开发模式开发
thinkphp+smarty、lumen、yii等框架下开发
phpUnit单元测试
jenkins自动化集成测试
自动打包发布脚本编写
gerrit git workflow
大用户量、大并发下如何防止商品超卖,如何提高并发量
redis、lua相关开发
vagrant+homestead搭建php开发环境
ELK logstash抓日志、elasticsearch做日志索引、kabana做数据分析
linux常见命令使用tailf 、wc、watch
【广告】fancyUI
fancyUI是飞凡前端团队基于angularjs 1.4开发的一套前端组件库,可以为后台管理系统搭建节省大量时间,极大提升开发效率,关注核心业务功能界面开发而非页面公共头部菜单等
PHP源码学习计划1
计划:通过3个月时间把php源码学习完毕
今晚我只看了一个库https://github.com/php/php-svn-helpers
这个库只有两个shell脚步文件
作用是我们从github迁出php代码后需要提交到svn时,把git代码库转换为对应的git-svn库
文件内容非常简单
适合初学shell、git命令的同学阅读
========
更新:我又看了一个库https://github.com/php/pecl-file_system-phdfs
这个是pecl库中的php操作hdfs(Hadoop)的扩展
目测功能单一,不会太复杂
采用的是php license 3.0
P3P之殇
P3P:Platform for Privacy Preferences (P3P) (https://www.w3.org/P3P/)
P3P 计划是由服务端告知浏览器一系列多选项问题的答案组成的策略。
P3P规范也包含有用于请求和传输P3P策略的协议.P3P协议所基于的HTTP协议与 Web 浏览器用来与 Web服务器进行通信的 HTTP 协议相同。
不论在何时设置cookie都可以用特定的HTTP报头来传送一个可选的 P3P 简洁策略。
引自:http://www.cnblogs.com/_franky/archive/2011/03/16/1985954.html
大部分查询P3P资料的朋友都是在解决跨域ajax请求和跨域读写cookie两个事的时候偶然知道了这个名词,所以我就不多说了,直接上结论,其他的大家可以参考官方网站以及其他资料。
for IE developers
一些企业应用都是IE only,用P3P解决跨域问题可行,前提是浏览器仅限于IE7~10,做法就是在页面返回的http header中增加一行
P3P:CP=
因为IE对P3P简洁策略的支持,属于搞笑级别的.根本不看内容。(PS:再度引用上文资料)
FOR OTHERS
别看P3P了,兼容性完全不行,项目理念也有安全风险,也未作为正式标准进入http协议内容,甚至我的《松鼠·HTTP权威指南》里一句话都没提过。
对于同网站不同二级域名下解决跨域ajax请求和跨域读写cookie,想要兼容现代浏览器、移动浏览器的朋友,下面是我们整理的一套可行方案
1.设置cookie的domain为一级域名,如.ffan.com,*.ffan.com,ffan.com,此时,浏览器中cookie可以在任一二级三级域名的页面、图片、接口地址中获取到
2.使用jsonp代替json,json仅在同域名,相对路径下可以请求,否则有跨域问题,为此除了jsonp外还可以考虑在json输出前设定response http header 中Access-Control-Allow-Origin: *,不过要注意的是不能设置多次Access-Control-Allow-Origin,否则浏览器仍然不识别。
jsonp的方案所有参数均通过get方式明文传输,Access-Control-Allow-Origin方案需要小心的设置header,但支持get、post两种,可以按需选择。
image/png 和 image/x-png 有哪些区别?
referer: http://stackoverflow.com/questions/2086374/what-is-the-difference-between-image-png-and-image-x-png
前缀 x- 是非标准的 MIME 类型 (例如:未在 IANA注册). 所以可以认为 image/x-png 是 PNG 类型未被标准化之前使用的
6.3. New Content-Transfer-Encodings
Implementors may, if necessary, define private Content-Transfer-Encoding values, but must use an x-token, which is a name prefixed by “X-”, to indicate its non-standard status, e. g., “Content-Transfer-Encoding: x-my-new-encoding”. Additional standardized Content-Transfer-Encoding values must be specified by a standards-track RFC. The requirements such specifications must meet are given in RFC 2048. As such, all content-transfer-encoding namespace except that beginning with “X-” is explicitly reserved to the IETF for future use.
—RFC 2045 — Multipurpose Internet Mail Extensions, Section 6.3
This is also documented in the PNG specification. See FalseVinylShrub's answer.
根据W3C关于PNG的标准 http://www.w3.org/TR/PNG/#A-Media-type
"image/png" 是PNG格式网络媒体类型的 MIME 类型 [RFC-2045], [RFC-2048].同时也建议支持识别 MIME 类型 "image/x-png".
所以, 如果你打算上传或是提供一个 PNG 图片, 该用'image/png'. 另外, 处理上传后文件等其他情况应该两种 MIME 类型都支持.
由于IE前些年一直在用"image/x-png"上传,所以造成了一些开发上的困扰。
一行命令解决composer下载问题
一行命令解决composer下载问题: composer config -g repositories.packagist composer https://packagist.phpcomposer.com
===
2016-3-21 更新说明(http://pkg.phpcomposer.com/)
本镜像已经依照 composer 官方的数据源安全策略完全升级并支持 https 协议!请各位同学 按照下面所示的两个方法将 http://packagist.phpcomposer.com 修改为 https://packagist.phpcomposer.com
今天我把chrome的网络设置改成了模拟2G网络
今天我把chrome的网络设置改成了模拟2G网络
大家好,我是一个php web开发人员,我今天开发效率很低,因为我的chrome老提示我『正在等待可用的套接字』。
页面打开极其缓慢,这还怎么愉快的写bug,不,debug。直到我忍无可忍,我Google了一下,原来浏览器对一个网址同时最多发起6个请求链接,可以通过chrome://net-internals/#sockets 实时查看,似乎这个设置是硬性设置,无法修改,我陷入了困境。
万万没想到我最后还是解决了这个问题,我发现关了开发者工具打开速度就恢复正常了,然后仔细看了下面板的参数才想起之前把网络设置改成了模拟2G网络
mac下安装php-memcached提示configure: error: memcache support requires ZLIB. Use --with-zlib-dir= to specify prefix where ZLIB解决办法
[code language="plain"]checking for the location of zlib... configure: error: memcache supportrequires ZLIB. Use --with-zlib-dir=
brew install zlib
brew link --force zlib[/code]
默认用brew 安装zlib提示有可能会跟系统的zlib库冲突,没有吧zlib库link到系统目录
重新安装xcode,然并卵
[code language="plain"]xcode-select --installbrew install php{xx}-memcache[/code]
批量从服务器执行命令脚本
#! /bin/bash
machine_list=serverList
lineno=`cat $machine_list |wc -l`;
for((i=1; i<=lineno; i++)) {
line=`sed -n "$i p" $machine_list`;
machine=`echo $line | gawk -F" " '{ print $1 }'`;
path='/var/log/httpd/logs/lumen.log';
file=`echo $path`;
echo "INFO: "$file"@"$machine;
ssh $machine "df -h;echo ;echo";
}
exit 0;
原理就是循环一个ip列表
ssh并执行命令
优化lumen加载速度
通过xdebug+QCachegrind分析lumen一个项目里的某一接口
分析每一个时间较长或者调用次数较多的函数
先看了下route这块用到的是nikic/fast-route 其中按照官方文档介绍,动态路由比静态路由慢,所以项目路由设计时我们添加的都是静态路由,而项目自带一个欢迎页面的动态路由。
优化方案,干掉动态路由,静态路由函数优化:找到
vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php
的addStaticRoute方法
其中为了验证添加的路由是否有效,每一条记录都做了循环校验,这里其实可以在开发环境中启用,线上干掉来提速。
注释代码
/*
if (isset($this->methodToRegexToRoutesMap[$httpMethod])) {
foreach ($this->methodToRegexToRoutesMap[$httpMethod] as $route) {
if ($route->matches($routeStr)) {
throw new BadRouteException(sprintf(
'Static route "%s" is shadowed by previously defined variable route "%s" for method "%s"',
$routeStr, $route->regex, $httpMethod
));
}
}
}
*/
整个请求最重的就是mysql数据库操作了,其中prepare是pdo中做安全验证的必要组件,参考php手册
http://www.php.net/manual/de/pdo.prepare.php
http://stackoverflow.com/questions/1176352/pdo-prepared-inserts-multiple-rows-in-single-query
有说php5.6中array_push 比array_merge快很多
lumen框架做PHPUNIT测试时遇到ReflectionException: Class config does not exist
https://github.com/laravel/framework/issues/8547
解决方法:每个test实例都重新创建应用
public function setUp()
{
parent::setUp();$this->createApplication();
}
精简mac ox
忽然发现mbp的250GB硬盘只剩下20GB左右了,遂准备清理下硬盘,打开finder看一下几个常用目录右键查看简介,哪个目录的占用空间最大,先把应用程序里暗黑三给删掉了,mac下还是纯粹做开发机用的了,玩放到台机上去玩,应用程序里按文件大小排序,发现Xcode居然是个巨无霸,其他应用普遍在300MB以下,它却占了8GB,右键显示内容,进去后Contents/Developer/Platforms删掉watch、ios虚拟机的目录,反正就算开发我也会在真机上做的,删除,倾倒废纸篓,xcode尺寸直接少了5GB。应用程序最终占用了10~20GB,毕竟常用的软件还是不少。
虚拟机是我的必备装备,把多余的linux和windows虚拟机删掉,80GB 腾出来了....
homebrew缓存路径
由于在终端下载速度太慢,遂考虑先通过地址下载文件后手动放到 缓存目录
$wget https://homebrew.bintray.com/bottles/mysql-5.6.26.yosemite.bottle.tar.gz
$cd /Library/Caches/Homebrew/
$mv ~/mysql-5.6.26.yosemite.bottle.tar.gz ./
$brew install mysql
done!
==> Downloading https://homebrew.bintray.com/bottles/mysql-5.6.26.yosemite.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/mysql-5.6.26.yosemite.bottle.tar.gz
==> Pouring mysql-5.6.26.yosemite.bottle.tar.gz
==> /usr/local/Cellar/mysql/5.6.26/bin/mysql_install_db --verbose --user=zouyi --basedir=/usr/local/Cellar/mysql/5.6.26 -
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.
To connect:
mysql -uroot
To have launchd start mysql at login:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Or, if you don't want/need launchctl, you can just run:
mysql.server start
==> Summary
? /usr/local/Cellar/mysql/5.6.26: 9854 files, 339M
Mac下MySql卸载方法
Mac下MySql卸载方法
mac下mysql的DMG格式安装内有安装文件,却没有卸载文件……很郁闷的事。
网上搜了一下,发现给的方法原来得手动去删。
很多文章记述要删的文件不完整,后来在stackoverflow这里发现了一个遗漏的地方,所以将完整版记述在这里,以供查阅。
先停止所有mysql有关进程。
最后这条很多文章都丢了,切记切记。
[code language="plain"]sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql*sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My*vim /etc/hostconfig and removed the line MYSQLCOM=-YES-rm -rf ~/Library/PreferencePanes/My*sudo rm -rf /Library/Receipts/mysql*sudo rm -rf /Library/Receipts/MySQL*sudo rm -rf /var/db/receipts/com.mysql.*[/code]
Incompatible implementation of send() in Client / ClientInterface (phpunit)?
Incompatible implementation of send() in Client / ClientInterface (phpunit)?
开发环境 lumen
在phpunit执行测试时报错
PHP Fatal error: Declaration of GuzzleHttp\Client::send() must be compatible with GuzzleHttp\ClientInterface::send(GuzzleHttp\Message\RequestInterface $request) in /Users/michael/Code/contrib/guzzle/src/Client.php on line 26
https://github.com/guzzle/guzzle/issues/1214
找到报错的解决帖
发现自己的项目版本挺新的
于是在autoload加上加载文件的文件名输出
发现加载了global 文件
框架安装的时候是全局安装的
composer update却只更新了本项目
找到global的composer。json文件,把phpunit之外的项目都删掉,global update 解决问题
linux并行执行命令方法
Console Wars – PHP CLI Libraries 命令行战争 - PHP的终端类库
http://www.sitepoint.com/console-wars-php-cli-libraries/
三大PHP终端类库
- The Symfony console component (symfony/Console)
- The Hoa console (hoa/console)
- The Webmozart console (webmozart/console)
每个都zhendui不同用户类型用户喜好提供了不同的方法
- Symfony console 测试稳定、鲁棒性好、文档丰富、能解决大部分问题
- Hoa console 更专业,适合做控制窗口、鼠标、指针等
- Webmozart console 是最新的库,马上要出稳定版本了,适合那些很快变大的新项目
私有Composer代理服务器 Toran Proxy 安装使用教程(1)
这几年新的php包管理工具Composer火起来了,但是无奈被?。。。。
还好我们可以把文件同步到自己的服务器缓存起来,这样xuy组件依赖时就不用再去考虑这个问题了。
安装完toran proxy 安装jiem有个google的网址会卡住,直接暂停页面就出来了,hul这个问题
我们自己用,☑️This instance is for personal use
packagist.org是一个php组件包查询下载的站点,我们选上
缓存选项
考虑到硬盘小,还是lazy模式吧
git settings 等需要时再配置
安装
搭建自己的公开CentOS源
背景:公司的网络实在是有够变态的,有层http代理,没法好好上网,装个linux做实验的时候各种软件下不了,不太懂运维,偶然想到去看局域网里的linux服务器是怎么更新的,果然挖出一个内网的yum源,顺便就想到自己搭建一套http源,从公网里定期同步更新一下,用到的时候就很爽了。
上手:
首先呢,把这个服务器扔到虚拟机里了,远程操作和扩展硬盘会比较容易一些,而且平时挂在那也不会费太多资源。
安装了Centos 6.5
分配两个网卡(一个自动,一个对接局域网)和两块硬盘,其中一个硬盘挂载到/var
找到了国内的高校源 bit、ustc
http://mirror.bit.edu.cn/web/
他们都提供了rsync服务
在linux上安装rsync客户端
我把目录放在/var/www/pub下
依次创建目录层级,只同步我需要的源可以有效减少磁盘占用,不然一个源同步下来我的硬盘就报废了
rsync -avrtH rsync://mirrors.ustc.edu.cn/centos/6/ /var/www/pub/centos/6/
rsync -avrtH rsync://mirrors.ustc.edu.cn/rpmfusion/free/el/ /var/www/pub/rpmfusion/free/el/
rsync -avrtH rsync://mirrors.ustc.edu.cn/rpmfusion/nonfree/el/ /var/www/pub/rpmfusion/nonfree/el/
rsync -avrtH rsync://mirrors.ustc.edu.cn/epel/6Server/x86_64/ /var/www/pub/epel/6Server/x86_64/
同步了几天,同步完成后看了一下虚拟机的硬盘文件还不到100GB,比预想的小很多,分配磁盘时专门划出了200GB呢。
安装apache yum install -y httpd
关闭selinux vim /etc/selinux/config selinux=disabled
最后有个软件createrepo可以指定目录生成索引,大家自行百度就知道了