本项目实现自动从 GitHub 获取指定启动器(fcl、zl、zl2)的最新 release,并将资产文件下载到本地存储结构,同时提供一个简单的黑白风格前端页面展示版本信息与下载链接,并具备基本文件浏览功能。
- 官方镜像站: https://mirror.lemwood.icu/
- 通过浏览器模拟(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 工作流,用于自动构建。
- Go: 1.21 或更高版本(用于构建后端)。
- Node.js & npm: 最新稳定版(用于构建前端)。
- 操作系统: Windows Server 2022 / Linux。
如果你在GitHub Actions中下载了构建好的二进制文件,无需安装Go和Node.js等环境,直接解压运行即可。
进入 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在运行前,请根据实际情况修改项目根目录下的 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才能正常获取版本。
# Windows
./mirror.exe
# Linux
chmod +x mirror
./mirror可以通过环境变量覆盖配置:
$env:GITHUB_TOKEN = "your_token"
./mirror.exe建议使用 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、地理位置、封禁时间等信息。
- 下载统计: 记录具体下载的启动器、版本和文件名。
- 可视化面板: 前端提供直观的每日趋势、下载分布图表。
- 流量限制: 支持单 IP 每日下载流量上限。
- 自动封禁: 触发限制后自动封禁 IP,并支持从外部黑名单实时同步。
- 公开透明: 封禁记录会自动同步到
banned_ips.txt供用户查阅。 - 申诉指引: 封禁页面会显示 IP、封禁原因、当前流量及申诉联系方式。
详细的 API 接口说明请参阅 API 文档。
Powered by Lemwood Mirror Team