GDUT开源镜像站搭建

前言

广东工业大学开源镜像站( mirrors.gdut.edu.cn ),目前只能校内访问。

网站截图

该项目于2019年启动,持续运行至今。

项目代码开源地址: mirrors-gdut

B站视频

这个视频教大家如何搭建一个开源镜像站。

代码:https://github.com/chn-lee-yumi/mirrors-gdut

视频文字稿

国内常用的开源镜像站有清华、中科大、阿里、腾讯、华为、网易等等……这个视频会教你如何搭建一个自己的开源镜像站。

镜像站的架构其实很像 CDN。如图所示,

本地镜像站 - 上游镜像站1(清华) - 源站1
         |                 |—源站2
         |- 上游镜像站2(中科大) - 源站3
         |-源站4

本地镜像站会从上游镜像站同步,这个上游镜像站也可以直接是源站。【不同的源的源站是不同的,比如 Ubuntu 的源站是 archive.ubuntu.com,CentOS 的源站是 msync.centos.org。】

一般来说从上游镜像站同步,速度会比直接从源站同步更快,但内容更新会有一定的延迟,一般是几个小时。而直接从源站同步,时效性会更高。这个需要自己取舍。

搭建镜像站,有两种方式,一种是同步所有文件下来,另一种是只缓存用到的文件。如果同步所有文件,会占大量的磁盘空间;如果选择缓存,当下载到没缓存的文件时速度会比较慢,但是当缓存好了之后再次下载就很快了。

首先介绍第一种方式,同步所有文件。选择你想要的源,然后去这些源的官方文档上看如何同步镜像,一般都是直接 rsync,有的源可能会提供一个脚本给你跑。比如 Debian 和 Ubuntu,他们都有自己的同步脚本。像 CentOS,就没有脚本,只要一条 rsync 命令就可以了。

知道同步方法之后,就可以写一个脚本,内容就是调用你的同步命令,这个脚本再通过 crontab 定期执行,这样你的镜像站上的内容就会定期更新了。

这是一个我写的脚本的例子,代码仓库在视频描述里。脚本很短,调用方法是脚本+要同步的源。首先在同步前会判断某个文件是否存在,如果存在就说明这个源还在同步中,就不重复执行了。如果不存在,就生成这个文件,作为一个正在同步的标记,然后执行同步命令。比如这里的 archlinuxcn 就是从清华同步,debian 就是直接跑官方脚本。同步命令执行完成后就删掉前面创建的标记文件。

内容都同步完了,再装个 nginx,把目录设置到你的镜像位置,再加个允许列目录的选项,就可以用了。

第二种方式,缓存,这里用到了 nginx 的 proxy_pass 模块,直接配置回源地址就可以了。

镜像站搭建完成后,样子有点简陋,我们可以加个门面啥的,我选择参考网易开源镜像站的样式,这个简洁,F12打开,刷新一下,是个静态页面,打开元素看看,看懂了,它的头部和尾部是不变的,变化的只有中间的表格。所以我们可以定义一个头部和尾部字符串,中间表格的行再弄成一个模板字符串。然后遍历镜像站的根目录进行生成。代码仓库在视频描述里。

这样子这个门面就弄好了。

以上就是这个视频的全部内容,谢谢大家。