主流 Linux 服务器软件镜像缓存工具,轻松搭建稳定、快速、可信的私有镜像源
A caching mirror tool for popular Linux server software. Build your own fast, reliable, and trustworthy mirror.
- 动态重定向 - 实时生成的重定向规则,存储于 Redis 中
- 双镜像模式
redirect重定向模式:302 跳转到原始源,提供最安全的保证cache缓存模式:本地缓存文件,为特殊网络(如本地局域网)提供镜像中转支持
- Web 管理后台 - 直观的 Dashboard,管理资源和设置
- 定时自动抓取 - 基于 APScheduler 的后台任务,定期更新资源链接
- 模块化爬虫架构 - 标准化的 Scraper 基类,轻松扩展新软件包
- Docker 一键部署 - 使用 Docker Compose 快速部署
- Oneinstack
- linuxeye/lnmp
| 软件包 | 来源 |
|---|---|
| Nginx | nginx.org |
| Apache HTTP Server (httpd) | archive.apache.org |
| OpenResty | openresty.org |
| Tengine | GitHub |
| 软件包 | 来源 |
|---|---|
| MySQL | dev.mysql.com |
| MariaDB | mariadb.org |
| PostgreSQL | ftp.postgresql.org |
| Redis | redis.io |
| 软件包 | 来源 |
|---|---|
| PHP | php.net |
| phpMyAdmin | phpmyadmin.net |
| PHP 扩展 (apcu, igbinary, redis, swoole, yaf...) | pecl.php.net |
| Phalcon (cphalcon) | GitHub |
| XCache | GitHub |
| 软件包 | 来源 |
|---|---|
| cURL | curl.se |
| OpenSSL | openssl.org |
| nghttp2 | GitHub |
| APR / APR-util | apache.org |
| ImageMagick | imagemagick.org |
| FreeType | sourceforge.net |
| libiconv | gnu.org |
| Boost | boost.io |
| Bison | gnu.org |
| 软件包 | 来源 |
|---|---|
| Python | python.org |
| pip | pypi.org |
| 软件包 | 来源 |
|---|---|
| Memcached | memcached.org |
| 软件包 | 来源 |
|---|---|
| Fail2ban | GitHub |
| CA 证书 (cacert) | curl.se |
| acme.sh | GitHub |
| Pure-FTPd | GitHub |
| htop | GitHub |
| 软件包 | 来源 |
|---|---|
| lua-nginx-module | GitHub |
| ngx_devel_kit | GitHub |
| 软件包 | 来源 |
|---|---|
| jemalloc | GitHub |
| lua-resty-core | GitHub (OpenResty) |
| lua-resty-lrucache | GitHub (OpenResty) |
| luajit2 | GitHub (OpenResty) |
| lua-cjson | GitHub (OpenResty) |
| gperftools | GitHub |
| ICU4C | GitHub |
| libzip | GitHub |
| libsodium | GitHub |
| Argon2 | GitHub |
| libevent | GitHub |
| Oniguruma | GitHub |
- Docker & Docker Compose
- Git
-
克隆仓库
git clone https://github.com/dalao-org/MirrorOne.git cd MirrorOne -
配置环境变量
cp .env.example .env
-
编辑
.env文件(参照下方环境变量说明) -
启动服务
docker-compose up -d
-
访问管理后台
- 前端 Dashboard:
http://localhost:3000 - 后端 API:
http://localhost:7980
- 前端 Dashboard:
| 变量名 | 说明 | 默认值 |
|---|---|---|
APP_NAME |
应用名称 | MirrorOne |
DEBUG |
调试模式 | false |
DATABASE_URL |
SQLite 数据库路径 | sqlite+aiosqlite:///./data/app.db |
REDIS_URL |
Redis 连接地址 | redis://redis:6379/0 |
SECRET_KEY |
JWT 密钥 ( |
- |
JWT_ALGORITHM |
JWT 算法 | HS256 |
JWT_EXPIRE_HOURS |
JWT 过期时间(小时) | 24 |
ADMIN_USERNAME |
管理员用户名 | admin |
ADMIN_PASSWORD |
管理员密码 ( |
- |
CORS_ORIGINS |
允许的跨域来源 | ["http://localhost:3000"] |
NEXT_PUBLIC_API_URL |
前端访问后端的 URL | http://backend:8000 |
TUNNEL_TOKEN |
Cloudflare Tunnel Token(可选) | - |
如果你想通过 Cloudflare Tunnel 暴露服务:
- 在 Cloudflare Zero Trust Dashboard 中创建 Tunnel
- 获取 Tunnel Token
- 在
.env中设置TUNNEL_TOKEN - 重启服务
cd backend
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt
# 启动开发服务器
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000cd frontend
# 安装依赖
pnpm install
# 启动开发服务器
pnpm dev-
在
backend/app/scrapers/目录下创建新文件:# backend/app/scrapers/mypackage.py from .base import BaseScraper, Resource, VersionMeta, ScrapeResult from .registry import registry @registry.register("mypackage") class MyPackageScraper(BaseScraper): async def scrape(self) -> ScrapeResult: result = ScrapeResult(scraper_name=self.name) # 你的抓取逻辑 response = await self.http_client.get("https://example.com") # 解析响应并添加资源 result.resources.append(Resource( file_name="mypackage-1.0.0.tar.gz", url="https://example.com/download/mypackage-1.0.0.tar.gz", version="1.0.0", )) result.success = True return result
-
在
backend/app/scrapers/__init__.py中导入:from . import mypackage
修改 OneinStack 的 options.conf 文件,将 mirror_link 设置为你的镜像地址:
mirror_link="https://your-mirror-domain.com"
登录管理后台 → Settings → 修改 mirror_mode 设置:
redirect: 302 重定向到原始下载地址cache: 从本地缓存提供文件(需要预先下载)
登录管理后台 → Dashboard → 点击 "Run Full Scrape" 按钮
登录管理后台 → Dashboard → Scrape Logs 区域
- JWT Token 默认 24 小时过期
- 密码使用 bcrypt 加密存储
- 生产环境请务必修改
SECRET_KEY和ADMIN_PASSWORD - 生产环境建议禁用 API 文档(设置
DEBUG=false)
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/new-scraper) - 提交更改 (
git commit -am 'Add new scraper') - 推送到分支 (
git push origin feature/new-scraper) - 创建 Pull Request
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
