【开源】MirrorOne: 自建可靠的 LNMP/Linux 软件包镜像源
项目地址:dalao-org/MirrorOne
老项目重构求点 Star
前言
可能很多人还记得前几年的 Oneinstack/lnmp 脚本被收购后出现供应链投毒的问题。
但是投毒的方式并不是在脚本本身进行了修改,而是在脚本依赖的 oneinstack 托管的软件包里直接进行了投毒。相当于是脚本下载了含木马的软件包。因此,在那之后我就写了一个 Python 脚本来爬取 Oneinstack 全部依赖的软件包的官方下载地址,并通过 GitHub Actions 自动运行,生成 Cloudflare/Netlify 支持的跳转脚本。当 lnmp 这一类脚本请求下载时,会被自动跳转到原始的官方链接。
举个例子
当你请求下载 MySQL 8.4.6 的时候,请求镜像地址 https://mirror.dal.ao/src/mysql-8.4.6-linux-glibc2.28-x86_64.tar.xz 会直接 302 跳转到 https://downloads.mysql.com/archives/get/p/23/file/mysql-8.4.6-linux-glibc2.28-x86_64.tar.xz
MirrorOne
这两天因为重新部署服务器,因此重新把这个项目拾起来重构了一番。将原本依赖 GitHub Actions 的运行方式彻底抛弃了,改为 FastAPI 后端 + 定时任务来处理。主要原因有以下几个:
- GitHub Actions 访问 PHP 的官方站点频繁出错
- Netlify 和 Cloudflare Pages 都有跳转规则数量上限
- 自托管可以处理局域网等受限网络的情况
新的特点
- 新增了 WebUI 界面,允许管理员进行设置,包括对抓取的软件包版本的限制、版本类型限制。避免了命令行程序设置的麻烦。
- 重定向和缓存的双重镜像模式。在默认的重定向模式下,对软件包下载的请求仍然会被重定向到官方下载链接;而缓存模式下,会从托管的服务器下载。但为了避免恶意利用,当系统在缓存模式下时,仍然可以通过
force_redirect=true请求参数来强制使用重定向模式。 - 标准化的爬虫 Scraper 基类,可以更容易地添加更多软件包。

