Skip to content

NingZeStudio/lemwood-mirror

Repository files navigation

柠枺镜像 (Lemwood Mirror)

本项目实现自动从 GitHub 获取指定启动器(fcl、zl、zl2)的最新 release,并将资产文件下载到本地存储结构,同时提供一个简单的黑白风格前端页面展示版本信息与下载链接,并具备基本文件浏览功能。

🌐 在线演示

功能概述

  • 通过浏览器模拟(colly)获取启动器的 GitHub 仓库地址。
  • 使用 GitHub API(go-github v50)获取最新 release(仅最新,不取历史)。
  • 支持并发下载,可通过配置限制并发数(默认为 3)。
  • 每 10 分钟自动检查更新(可通过配置调整)。
  • 启动时执行异步初始扫描,不阻塞 Web 服务启动。
  • 下载 release 资产到 download/启动器名/版本号/,并生成 info.json
  • 集成 SQLite 数据库,并支持 MySQL 数据库(支持自动从 SQLite 迁移数据)。
  • 具备防刷墙功能,支持单 IP 每日流量限制,并自动生成公开的封禁记录文件 banned_ips.txt
  • 提供详细的数据统计功能,包括访问量、下载排行、地域分布和每日趋势图表。
  • 提供完善的 HTTP API 接口和后台管理功能(详见 API 文档)。

目录结构

  • cmd/mirror:主程序入口。
  • internal/...:配置、浏览器模拟、GitHub 交互、下载、存储、HTTP 服务。
  • web/:前端 Vue 项目源码。
  • web/dist:构建后的前端静态资源(由后端托管)。
  • download:下载文件根目录(默认)。
  • .github/workflows:GitHub Actions 工作流,用于自动构建。

部署说明

1. 环境准备

  • Go: 1.21 或更高版本(用于构建后端)。
  • Node.js & npm: 最新稳定版(用于构建前端)。
  • 操作系统: Windows Server 2022 / Linux。
    如果你在GitHub Actions中下载了构建好的二进制文件,无需安装Go和Node.js等环境,直接解压运行即可。

2. 构建项目

前端构建

进入 web 目录进行构建:

cd web
npm install
npm run build

构建产物将存放在 web/dist 目录中,后端会自动托管此目录。

后端构建

在项目根目录执行:

# Windows
go build -o mirror.exe ./cmd/mirror

# Linux
go build -o mirror ./cmd/mirror

3. 配置文件 (config.json)

在运行前,请根据实际情况修改项目根目录下的 config.json

{
  "server_address": "http://your-domain.com", // 服务器访问地址,用于生成 index.json 中的链接
  "server_port": 8080,                        // HTTP 服务监听端口
  "download_url_base": "https://mirror.lemwood.icu", // 外部下载链接的基准地址(如 CDN 或反代地址)
  "check_cron": "*/10 * * * *",               // 定时任务表达式,默认每 10 分钟扫描一次
  "storage_path": "download",                 // 下载文件和数据库的存储路径
  "github_token": "your_github_token",        // GitHub PAT 令牌,用于解除 API 请求频率限制
  "proxy_url": "",                            // 全局 HTTP 代理地址
  "asset_proxy_url": "",                      // GitHub Release 资产下载加速代理前缀
  "xget_domain": "https://xget.xi-xu.me",      // Xget 加速服务域名
  "xget_enabled": true,                       // 是否启用 Xget 加速
  "download_timeout_minutes": 40,             // 单个文件下载超时时间(分钟)
  "concurrent_downloads": 3,                  // 同时进行的下载任务数量
  "captcha_enabled": true,                    // 是否启用下载验证码
  "captcha_app_id": "your_captcha_id",        // 极验验证码 Captcha ID
  "captcha_secret_key": "your_private_key",   // 极验验证码 Private Key
  "traffic_limit_gb": 5,                      // 单 IP 每日下载流量限制 (GB)
  "ban_record_file": "banned_ips.txt",        // 公开封禁记录文件名
  "appeal_contact": "QQ群 964498276",         // 申诉联系方式
  "external_blacklist_url": "",               // 外部黑名单 URL (每 10 分钟同步一次)
  "mysql_host": "",                           // MySQL 主机 (留空则默认使用 SQLite)
  "mysql_port": 3306,                         // MySQL 端口
  "mysql_user": "user",                       // MySQL 用户
  "mysql_password": "password",               // MySQL 密码
  "mysql_database": "mirror",                 // MySQL 数据库名
  "mysql_migration": true,                    // 启动时是否自动从 SQLite 迁移数据
  "launchers": [                              // 需要镜像的启动器配置列表
    {
      "name": "fcl",                          // 启动器唯一标识名称
      "source_url": "https://github.com/FCL-Team/FoldCraftLauncher", // 官方页面或仓库 URL
      "repo_selector": "",                    // CSS 选择器或正则,用于从 source_url 提取仓库地址
      "include_prerelease": true,             // 是否包含预发布版本,默认 false。对于只有 pre-release 的仓库需设为 true
      "max_versions": 2                       // 最多检查的版本数量,0 或不设置表示仅检查最新版本
    }
  ]
}

关键配置项:

  • github_token: 建议配置以避免 GitHub API 频率限制。
  • download_url_base: 外部访问的基准 URL,用于生成 info.json 中的下载链接。
  • captcha_enabled: 启用后,用户下载文件前需完成极验滑块验证,防止机器人滥用。
  • include_prerelease: 对于只有预发布版本的仓库(如某些处于早期开发阶段的启动器),需设为 true 才能正常获取版本。

4. 运行服务

直接运行

# Windows
./mirror.exe

# Linux
chmod +x mirror
./mirror

使用环境变量 (可选)

可以通过环境变量覆盖配置:

$env:GITHUB_TOKEN = "your_token"
./mirror.exe

5. 反向代理 (推荐)

建议使用 Nginx 进行反向代理,并开启 HTTPS:

server {
    listen 443 ssl;
    server_name mirror.lemwood.icu;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

使用说明

  • 前端首页: 显示各启动器最新版本信息、下载量统计与下载链接。
  • 手动刷新: 点击“手动刷新”或访问 POST /api/scan 将立即触发一次版本检查。
  • 文件浏览: 访问 /files 可视化浏览存储目录结构。

数据统计

系统内置了数据统计功能,自动记录用户的访问和下载行为。默认存储在 storage_path 下的 stats.db (SQLite) 中,也可配置为使用 MySQL

  • 访问统计: 记录 IP、User-Agent、地理位置、封禁时间等信息。
  • 下载统计: 记录具体下载的启动器、版本和文件名。
  • 可视化面板: 前端提供直观的每日趋势、下载分布图表。

🛡️ 防刷墙 (Anti-Abuse)

  • 流量限制: 支持单 IP 每日下载流量上限。
  • 自动封禁: 触发限制后自动封禁 IP,并支持从外部黑名单实时同步。
  • 公开透明: 封禁记录会自动同步到 banned_ips.txt 供用户查阅。
  • 申诉指引: 封禁页面会显示 IP、封禁原因、当前流量及申诉联系方式。

📖 API 文档

详细的 API 接口说明请参阅 API 文档


Powered by Lemwood Mirror Team

About

一个自动化程序,自动从github release获取文件并下载,支持多个仓库,代理地址,github代理以及xget代理。

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors