分享一下我的开源项目技术架构以及成就:被阮一峰博客推荐,一天涨了100多star

阮一峰博客地址:https://www.ruanyifeng.com/blog/2025/07/weekly-issue-357.html

我的项目地址:GitHub - sky22333/hubproxy: 自托管轻量级、高性能的多功能代理加速服务,提供 Docker 镜像加速、GitHub 加速、下载离线镜像等功能。一个二进制文件实现所有功能,支持仓库审计。流式转发,无缓存。

这是一个go实现的,轻量级、高性能的多功能代理服务,提供 Docker 镜像加速、GitHub 文件加速、下载离线镜像、在线搜索 Docker 镜像等功能。创建此项目的初衷是目前各大镜像站都比较单一不够方便,此项目解决了集各种镜像加速于一体,单个二进制文件,所有代理都在统一的入口,方便垃圾小鸡部署。并且自托管的好处就是不依赖cf等等不稳定的网络

:sparkles: 特性

  • :spouting_whale: Docker 镜像加速 - 单域名实现 Docker Hub、GHCR、Quay 等多个镜像仓库加速,流式传输优化拉取速度。
  • :spouting_whale: 离线镜像包 - 支持下载离线镜像包,流式传输加防抖设计。
  • :file_folder: GitHub 文件加速 - 加速 GitHub Release、Raw 文件下载,支持api.github.com,脚本嵌套加速等等
  • :robot: AI 模型库支持 - 支持 Hugging Face 模型下载加速
  • :shield: 智能限流 - IP 限流保护,防止滥用
  • :prohibited: 仓库审计 - 强大的自定义黑名单,白名单,同时审计镜像仓库,和GitHub仓库
  • :magnifying_glass_tilted_left: 镜像搜索 - 在线搜索 Docker 镜像
  • :high_voltage: 轻量高效 - 基于 Go 语言,单二进制文件运行,资源占用低,优雅的内存清理机制。
  • :wrench: 统一配置 - 统一配置管理

从完全重构开源,一个月时间从0 star到截至目前一共收获了562 star。当然也有很多佬友的支持,目前项目已经算是比较稳定了,部署在优质线路机器上,从国内拉取代理镜像可以做到无墙一样。

关于设计思路

镜像加速

之前我使用直接用的官方registry做镜像加速,但是我发现一个问题,就是从docker pull到出现下载进度条会有很长的延迟,原因在于官方的registry每次都会去docker hub请求匿名token和寻找镜像清单,并且代理转发到客户端时会将镜像缓存到机器,我的实现跟官方registry部署方法相比的优势是,不会缓存镜像到机器中,并且优化了匿名token和镜像清单做了缓存,减少了重复认证的请求耗时,然后流式转发到客户端,所以能尽量做到最快。这里跟上游仓库的接口交互,是直接复用了google的docker库部分组件。接口很通用。

离线镜像下载

关于在线下载离线镜像的逻辑,之前用了及其笨的方法,是让先让代理机器拉取镜像,然后自动打包为tar文件,然后开放一个文件接口供用户下载,这种方法速度特别慢,后来经过摸索优化,现在是直接请求docker仓库镜像的文件层数据,然后流式转发到客户端,边下载变压缩为tar离线文件,速度相当于直接拉取镜像的速度,连打包tar文件的时间都省了。

github文件加速

关于github文件加速的逻辑是直接借鉴了网上开源的github文件加速的思路,然后重构为go实现。这里非常感谢这些大佬。

中间件

然后主入口加了一些IP限流中间件,黑名单中间件等等,防止被拉爆。前端则是直接让AI写的。直接调用后端接口。
项目总体实现没啥问题,就是我比较菜,写的不够优雅,优化空间还很大。

关于速度

我在cn2的美国机器上部署,国内机器拉192MB的nginx镜像用时15秒,如果用HK优质线路机器的话还能更快,如图:

关于性能占用和稳定性

然后我github上的demo镜像站是用的wap.ac的1H1G的2刀机器,带宽1000M。并且做了性能监控。
这个监控是随便写的一个go程序:go-utils/jiankong at main · sky22333/go-utils · GitHub

demo站镜像地址:https://demo.52013120.xyz 大家可以随便拉,就当帮我测试稳定性了

基本上每天都有人在拉镜像,而且我看日志每天都有人在拉几个G的大镜像,稳定运行了22天,无崩溃,无内存飙升,无重启。流量差不多干了2600 GB,程序很轻量,也有自动回收内存和缓存等等,占用很低,如图:

44 个赞

大佬,手下我的膝盖。

太强啦佬

大佬恐怖如斯,学习了。

佬友太强了 :+1:,恭喜佬友 :tada:

大佬,这个怎么做?想学习一下。

随便写的一个监控:go-utils/jiankong at main · sky22333/go-utils · GitHub

用了挺久了,很好用,感谢大佬

感谢大佬的认可

:+1: :+1:

感谢大佬 。

大佬项目特别优秀,我之前帖子也是用的大佬项目构建的。

感谢大佬的认可,其实代码写的比较烂,我感觉还是不够优雅,本着能用就别动的原则,我也就懒得优化了,哈哈

主要是解决的场景恰到好处,够用就好。

膜拜一下 大佬

感谢分享,已Star :hand_with_index_finger_and_thumb_crossed:

大佬优秀

赞赞 :tieba_048:

给大佬点个star,yysy,非常实用。

今天刚在阮一峰周刊刷到,没想到大佬就在L站,太强了!