演示站点:https://mirror.dal.ao

项目地址:dalao-org/MirrorOne

老项目重构求点 Star

前言

可能很多人还记得前几年的 Oneinstack/lnmp 脚本被收购后出现供应链投毒的问题。

OneInStack 疑似供应链投毒 Nginx

但是投毒的方式并不是在脚本本身进行了修改,而是在脚本依赖的 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 后端 + 定时任务来处理。主要原因有以下几个:

  1. GitHub Actions 访问 PHP 的官方站点频繁出错
  2. Netlify 和 Cloudflare Pages 都有跳转规则数量上限
  3. 自托管可以处理局域网等受限网络的情况

新的特点

  1. 新增了 WebUI 界面,允许管理员进行设置,包括对抓取的软件包版本的限制、版本类型限制。避免了命令行程序设置的麻烦。
  1. 重定向和缓存的双重镜像模式。在默认的重定向模式下,对软件包下载的请求仍然会被重定向到官方下载链接;而缓存模式下,会从托管的服务器下载。但为了避免恶意利用,当系统在缓存模式下时,仍然可以通过 force_redirect=true 请求参数来强制使用重定向模式。
  2. 标准化的爬虫 Scraper 基类,可以更容易地添加更多软件包。

📌 转载信息
转载时间:
2026/1/14 10:53:34

标签: 开源工具, FastAPI, MirrorOne, LNMP, Linux软件包镜像

添加新评论