# mirror-web **Repository Path**: oumi520/mirror-web ## Basic Information - **Project Name**: mirror-web - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-09-25 - **Last Updated**: 2024-09-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TUNA 镜像站主页 注意:如果使用本项目搭建开源镜像站,**必须**: * 移除所有与清华大学和 TUNA 相关的内容,包括且不限于站名、logo 和各种文档中出现的所有相关文本和图形; * 在网站首页恰当标注项目来源(`tuna/mirror-web`); * 遵循 GPLv2 协议开放修改后的源代码; ## 配置修改 除具体页面内容外,可修改的配置还包括: * `_config.yml`:Jekyll 配置文件,包括站点名称、描述、链接等;请不要轻易改动构建配置。 * `_data/options.yml`:Jekyll 数据文件,主要包括各个镜像的简要描述和部分特殊镜像的配置。请仿照已有的配置进行修改。 * `geninfo/genisolist.ini`:生成直接下载链接的配置文件。具体内容修改请提交到 [mirrorz-org/genisolist](https://github.com/mirrorz-org/genisolist)。 ## 编译方式 本站使用 Jekyll 编写,并使用了 Vue、TypeScript、Vite 等前端框架开发。 由于本站部分文档使用 submodule 方式嵌入仓库,clone 后构建前请运行 `git submodule update --init`。 ### 本地开发 为正常运行,一些动态数据文件需要从镜像站下载: ```bash wget https://mirrors.tuna.tsinghua.edu.cn/static/tunasync.json -O static/tunasync.json mkdir -p static/status wget https://mirrors.tuna.tsinghua.edu.cn/static/status/isoinfo.json -O static/status/isoinfo.json ``` 编译前,先安装 Ruby (>= 3.0) 和 Node.js (>= 18),然后执行: ```bash bundle install --deployment npm install bundle exec jekyll build # 编译到 `_site/` 目录,或者 bundle exec jekyll serve --livereload # 实时预览 ``` 在编译时可选的环境变量: * `JEKYLL_ENV=production`:编译生产版本(启用代码压缩),可能需要较长时间。 * `VISUALIZER=true`:生成 Rollup 编译体积分析文件到 `_stats.html`。 ### Docker 部署 仓库中的 `Dockerfile.build` 也可用于编译,推荐在生产环境部署时使用。 可用以下命令构建(如依赖无变化,镜像无需重复构建): ```bash docker build -t tunathu/mirror-web -f Dockerfile.build . docker pull tunathu/mirror-web # 或者直接拉取 ``` 构建时,仅需将本地目录挂载到容器中: ```bash docker run --rm -v /path/to/mirror-web:/data tunathu/mirror-web ``` 即可在 `/path/to/mirror-web/_site` 中得到编译结果。 ### 编译流程 本项目使用 Jekyll 作为唯一入口完成全部的构建流程。其具体流程是: 1. Jekyll 读取 `_config.yml` 和全部需要渲染的页面,并读取 `_data` 中的数据文件; 2. Jekyll 调用 vite 的 Jekyll 插件,将所有的前端代码编译到 `_site/assets` 目录: 1. 插件将需要传递给 vite 的数据编码为 JSON,并写入临时文件; 2. 插件执行 vite 命令,根据 `_vite.config.mjs` 中的配置编译前端代码; 1. `_vite.config.mjs` 读取临时文件,向 vite 流程中注册虚拟导入文件; 2. vite 中注册的 `vite-plugin-ruby` 插件导入其配置文件; 3. vite 加载 `_src/entrypoints` 中的代码,并生成依赖树; 4. vite 中注册的 `vite-plugin-legacy` 插件增加一份输出版本,并增加 legacy 标志; 5. vite 完成各代码的编译: - 对于 Vue 组件,调用 Vue 的 SFC 编译器完成编译; - 对于其中模板(`