如何快速搭建一个镜像源

引言

其实不少开源镜像站给出了他们的开源代码,例如清华大学镜像管理器tunasync中科大镜像Docker
当时思考了很久,没有使用他们的代码,主要是认为,没什么必要,做一个简单的源没必要那么复杂,于是自己仿照着写了个Demo

实现

Github-SZUmirrors
暂时来说,我们使用的仓库只有少部分几个,同步方式较为单一,pypi为bandersnatch同步,其余系统软件源为rsync同步,这里借用了ustcmirror-images的rsync镜像,其实就是一句rsync指令和一些配置了
守护进程采用service实现,能够开机启动,也能查看状态

流程如下

service(守护进程)->python(分配进程)->docker(工作单元)

这里还需要加上一些前端,一些数据库之类的同步信息,不过作为demo已经足够了,剩下的需要的交给各位自己完善了
TODO:增加Docker反代

注意

  1. bandersnatch同步python源时可以做一些设置,减小同步的大小(Python全部库同步下来要15T),下文范例为只同步100G以下包
[plugins]
enabled =
    size_project_metadata
[size_project_metadata]
max_package_size = 100G
  1. 要进行nginx调优,以提高负载量
    Nginx调优可以参考此文档
    具体可以进行百度,唯一难以解决的问题时https中tls握手造成的高负载和高延迟(响应速度慢)情况。
    下图为对比


    效率上有将近十倍的区别,延迟也显著提升,不过好在公布在外网的时候https握手可以由转发机实现,并且可以一次握手传输多个包(链接复用?)
  2. pypi可以给单独的域名指向pypi/web/simple方便访问,但是同时也要注意python只支持https形式访问
    虽然其他软件源http也行,但是https还是安全不少,性能却跟不上,也是恨头疼的一件事

发布者

正汰

永远是这样,山前面是山,天空上面是天空,道路前面还是道路,迷茫之后还有迷茫。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注