Files
mirror_server/mirrors/__init__.py
T
HYC Fixer dfae749612 P2: 清理与一致性
- CLI: --preset 实际生效;--directory-listing/--enable-stats/--enable-*/--ignore-hidden 支持 true/false(修复 type=bool 陷阱),未显式传入时不再覆盖 settings.json
- 版本号统一 v2.3(settings.json/config.py/v1/v2/Dockerfile)
- 移除硬编码 /tmp/pypi_debug.log 写文件;v2 裸 except 改记录错误返回 500
- webhook id 非法输入返回 400;下载趋势 timedelta 导入提升修复 NameError
- 打包模式 auth_token 写入 exe 目录(不再写入 _MEIPASS)
- README 修正: 线程池架构、pyinstaller 构建方式
- mirrors/__init__.py ' Quay.io' 笔误;chunked 响应去掉 Content-Length;docs/ui realpath 边界
- SQLite WAL+busy_timeout;下载计数原子 UPDATE
- requirements 移除未使用的 cachetools/apscheduler
2026-08-30 12:25:26 +08:00

584 lines
19 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
镜像源处理器包
支持 Docker、APT、YUM、PyPI、npm、Go、Maven、Gradle 等镜像源代理
"""
from .docker import DockerMirror
from .apt import APTMirror
from .yum import YUMMirror
from .pypi import PyPIMirror
from .npm import NpmMirror
from .go import GoProxy
from .http import HttpMirror
# 镜像处理器映射
# 特殊类型使用专用处理器,其他使用通用HTTP处理器
MIRROR_HANDLERS = {
# 专用处理器
'docker': DockerMirror,
'apt': APTMirror,
'yum': YUMMirror,
'pypi': PyPIMirror,
'npm': NpmMirror,
'go': GoProxy,
# ======== 包管理器 ========
# Python
'pip': HttpMirror,
'pipenv': HttpMirror,
'poetry': HttpMirror,
'conda': HttpMirror,
'anaconda': HttpMirror,
'bandersnatch': HttpMirror,
'twine': HttpMirror,
# Node.js
'yarn': HttpMirror,
'pnpm': HttpMirror,
'bower': HttpMirror,
# Java
'maven': HttpMirror,
'gradle': HttpMirror,
# .NET
'nuget': HttpMirror,
# Ruby
'gem': HttpMirror,
'rubygems': HttpMirror,
# Rust
'cargo': HttpMirror,
'rustup': HttpMirror,
# PHP
'composer': HttpMirror,
'packagist': HttpMirror,
# Swift/Apple
'cocoapods': HttpMirror,
# C/C++
'conan': HttpMirror,
'vcpkg': HttpMirror,
# Dart/Flutter
'pub': HttpMirror,
'dart': HttpMirror,
'flutter': HttpMirror,
# Haskell
'hackage': HttpMirror,
'stackage': HttpMirror,
# OCaml
'opam': HttpMirror,
# D语言
'dub': HttpMirror,
# Nim
'nimble': HttpMirror,
# V语言
'v': HttpMirror,
# Julia
'julia': HttpMirror,
# Lua
'lua': HttpMirror,
'luarocks': HttpMirror,
# Elm
'elm': HttpMirror,
# Perl
'cpan': HttpMirror,
'cpanm': HttpMirror,
# R
'cran': HttpMirror,
# LaTeX
'ctan': HttpMirror,
# Haskell
'haskell': HttpMirror,
# ======== 容器/云原生 ========
'helm': HttpMirror,
'kubernetes': HttpMirror,
'quay.io': HttpMirror,
'quay': HttpMirror,
'ghcr': HttpMirror,
'gcr': HttpMirror,
'harbor': HttpMirror,
# ======== 开发工具 ========
'jetbrains': HttpMirror,
'vscode': HttpMirror,
'cuda': HttpMirror,
# ======== 语言运行时 ========
'node': HttpMirror,
'python': HttpMirror,
'ruby': HttpMirror,
'php': HttpMirror,
'java': HttpMirror,
'dotnet': HttpMirror,
# ======== Linux 发行版 ========
'alpine': HttpMirror,
'arch': HttpMirror,
'aur': HttpMirror,
'centos': HttpMirror,
'debian': HttpMirror,
'fedora': HttpMirror,
'gentoo': HttpMirror,
'opensuse': HttpMirror,
'void': HttpMirror,
'freebsd': HttpMirror,
'netbsd': HttpMirror,
'openbsd': HttpMirror,
'rocky': HttpMirror,
'alma': HttpMirror,
'kali': HttpMirror,
'ubuntu': HttpMirror,
'mint': HttpMirror,
'manjaro': HttpMirror,
'slackware': HttpMirror,
'mageia': HttpMirror,
'openmandriva': HttpMirror,
# ======== 系统包管理器 ========
'homebrew': HttpMirror,
'brew': HttpMirror,
'chocolatey': HttpMirror,
'snap': HttpMirror,
'flatpak': HttpMirror,
'appimage': HttpMirror,
'winget': HttpMirror,
'scoop': HttpMirror,
# ======== 数据库/运维 ========
'postgresql': HttpMirror,
'mysql': HttpMirror,
'mariadb': HttpMirror,
'mongodb': HttpMirror,
'redis': HttpMirror,
'influxdata': HttpMirror,
'grafana': HttpMirror,
'prometheus': HttpMirror,
'elastic': HttpMirror,
'bitnami': HttpMirror,
# ======== 代码托管/源码 ========
'git': HttpMirror,
'github': HttpMirror,
'gitlab': HttpMirror,
'bitbucket': HttpMirror,
'sourceforge': HttpMirror,
# ======== 其他 ========
'pacman': HttpMirror,
'nix': HttpMirror,
'guix': HttpMirror,
'termux': HttpMirror,
'msys2': HttpMirror,
'google-fonts': HttpMirror,
'aurora': HttpMirror,
'cloudflare': HttpMirror,
'fastly': HttpMirror,
# ======== 自定义 ========
'http': HttpMirror,
'custom': HttpMirror,
}
def get_mirror_handler(mirror_type: str):
"""获取镜像处理器类"""
return MIRROR_HANDLERS.get(mirror_type)
# 各镜像类型的默认上游URL
DEFAULT_UPSTREAM_URLS = {
# ======== 包管理器 ========
# Python
'pip': 'https://pypi.org/simple',
'pipenv': 'https://pypi.org/simple',
'poetry': 'https://pypi.org/simple',
'conda': 'https://repo.anaconda.com',
'anaconda': 'https://repo.anaconda.com',
'bandersnatch': 'https://pypi.org/simple',
'twine': 'https://pypi.org/simple',
# Node.js
'yarn': 'https://registry.yarnpkg.com',
'pnpm': 'https://registry.npmjs.org',
'bower': 'https://registry.bower.io',
# Java
'maven': 'https://repo1.maven.org/maven2',
'gradle': 'https://services.gradle.org/distributions',
# .NET
'nuget': 'https://api.nuget.org/v3',
# Ruby
'gem': 'https://rubygems.org',
'rubygems': 'https://rubygems.org',
# Rust
'cargo': 'https://crates.io',
'rustup': 'https://static.rust-lang.org',
# PHP
'composer': 'https://repo.packagist.org',
'packagist': 'https://repo.packagist.org',
# Swift/Apple
'cocoapods': 'https://cdn.cocoapods.org',
# C/C++
'conan': 'https://center.conan.io',
'vcpkg': 'https://github.com/microsoft/vcpkg/archive/refs/heads/main.tar.gz',
# Dart/Flutter
'pub': 'https://pub.dev',
'dart': 'https://storage.googleapis.com/flutter_infra_release',
'flutter': 'https://storage.flutter-io.cn',
# Haskell
'hackage': 'https://hackage.haskell.org',
'stackage': 'https://www.stackage.org',
# OCaml
'opam': 'https://opam.ocaml.org',
# D语言
'dub': 'https://code.dlang.org',
# Nim
'nimble': 'https://nimble.directory',
# V语言
'v': 'https://vpm.itsgriffin.com',
# Julia
'julia': 'https://pkg.julialang.org',
# Lua
'lua': 'https://luarocks.org',
'luarocks': 'https://luarocks.org',
# Elm
'elm': 'https://package.elm-lang.org',
# Perl
'cpan': 'https://www.cpan.org',
'cpanm': 'https://www.cpan.org',
# R
'cran': 'https://cran.r-project.org',
# LaTeX
'ctan': 'https://ctan.math.illinois.edu',
# Haskell
'haskell': 'https://haskell.org',
# ======== 容器/云原生 ========
'helm': 'https://charts.helm.sh',
'kubernetes': 'https://dl.k8s.io/release',
'quay': 'https://quay.io',
'quay.io': 'https://quay.io',
'ghcr': 'https://ghcr.io',
'gcr': 'https://gcr.io',
'harbor': 'https://harbor.io',
# ======== 开发工具 ========
'jetbrains': 'https://www.jetbrains.com',
'vscode': 'https://code.visualstudio.com',
'cuda': 'https://developer.download.nvidia.com/compute/cuda/repos',
# ======== 语言运行时 ========
'node': 'https://nodejs.org/dist',
'python': 'https://www.python.org/ftp/python',
'ruby': 'https://www.ruby-lang.org',
'php': 'https://www.php.net/distributions',
'java': 'https://download.oracle.com/java',
'dotnet': 'https://dotnetcli.azureedge.net',
# ======== Linux 发行版 ========
'alpine': 'https://dl-cdn.alpinelinux.org',
'arch': 'https://mirror.archlinux.org',
'aur': 'https://aur.archlinux.org',
'centos': 'https://mirrors.aliyun.com/centos',
'debian': 'https://deb.debian.org/debian',
'fedora': 'https://mirrors.fedoraproject.org',
'gentoo': 'https://distfiles.gentoo.org',
'opensuse': 'https://download.opensuse.org',
'void': 'https://repo.voidlinux.org',
'freebsd': 'https://pkg.freebsd.org',
'netbsd': 'https://cdn.netbsd.org',
'openbsd': 'https://cdn.openbsd.org',
'rocky': 'https://download.rockylinux.org',
'alma': 'https://repo.almalinux.org',
'kali': 'http://.kali.org',
'ubuntu': 'https://releases.ubuntu.com',
'mint': 'https://packages.linuxmint.com',
'manjaro': 'https://repo.manjaro.org',
'slackware': 'https://mirrors.slackware.com',
'mageia': 'https://www.mageia.org',
'openmandriva': 'https://download.openmandriva.org',
# ======== 系统包管理器 ========
'homebrew': 'https://github.com/Homebrew/brew',
'brew': 'https://github.com/Homebrew/brew',
'chocolatey': 'https://chocolatey.org/api/v2',
'snap': 'https://snapcraft.io',
'flatpak': 'https://flathub.org',
'appimage': 'https://github.com/AppImage/AppImageHub/releases',
'winget': 'https://github.com/microsoft/winget-pkgs',
'scoop': 'https://scoop.sh',
# ======== 数据库/运维 ========
'postgresql': 'https://www.postgresql.org',
'mysql': 'https://dev.mysql.com',
'mariadb': 'https://mariadb.org',
'mongodb': 'https://www.mongodb.org',
'redis': 'https://redis.io',
'influxdata': 'https://portal.influxdata.com',
'grafana': 'https://grafana.com',
'prometheus': 'https://prometheus.io',
'elastic': 'https://www.elastic.co',
'bitnami': 'https://bitnami.com',
# ======== 代码托管/源码 ========
'git': 'https://github.com',
'github': 'https://github.com',
'gitlab': 'https://gitlab.com',
'bitbucket': 'https://bitbucket.org',
'sourceforge': 'https://sourceforge.net',
# ======== 其他 ========
'pacman': 'https://mirror.archlinux.org',
'nix': 'https://nix-community.org',
'guix': 'https://guix.gnu.org',
'termux': 'https://termux.net',
'msys2': 'https://repo.msys2.org',
'google-fonts': 'https://fonts.google.com',
'aurora': 'https://auroralinux.org',
'cloudflare': 'https://cloudflare.com',
'fastly': 'https://fastly.com',
}
def get_default_upstream(mirror_type: str) -> str:
"""获取镜像类型的默认上游URL"""
return DEFAULT_UPSTREAM_URLS.get(mirror_type, 'https://mirror.example.com')
def list_available_mirrors() -> list:
"""列出可用的镜像类型"""
return [
# ======== 专用处理器 ========
{
'type': 'docker',
'name': 'Docker Registry',
'description': 'Docker镜像代理'
},
{
'type': 'apt',
'name': 'APT (Debian/Ubuntu)',
'description': 'APT软件源代理'
},
{
'type': 'yum',
'name': 'YUM/DNF (RHEL/CentOS)',
'description': 'YUM/DNF软件源代理'
},
{
'type': 'pypi',
'name': 'PyPI',
'description': 'Python包索引代理'
},
{
'type': 'npm',
'name': 'npm Registry',
'description': 'Node.js包管理器代理'
},
{
'type': 'go',
'name': 'Go Modules',
'description': 'Go模块代理'
},
# ======== 包管理器 ========
# Python
{'type': 'pip', 'name': 'pip', 'description': 'Python pip包管理器'},
{'type': 'pipenv', 'name': 'Pipenv', 'description': 'Python Pipenv代理'},
{'type': 'poetry', 'name': 'Poetry', 'description': 'Python Poetry包管理器'},
{'type': 'conda', 'name': 'Conda', 'description': 'Python Conda包管理器'},
{'type': 'anaconda', 'name': 'Anaconda', 'description': 'Anaconda Python发行版'},
# Node.js
{'type': 'yarn', 'name': 'Yarn', 'description': 'Node.js Yarn包管理器'},
{'type': 'pnpm', 'name': 'pnpm', 'description': 'Node.js pnpm包管理器'},
{'type': 'bower', 'name': 'Bower', 'description': '前端包管理器'},
# Java
{'type': 'maven', 'name': 'Maven Central', 'description': 'Java/Maven包管理器'},
{'type': 'gradle', 'name': 'Gradle', 'description': 'Gradle构建工具分发'},
# .NET
{'type': 'nuget', 'name': 'NuGet', 'description': '.NET包管理器'},
# Ruby
{'type': 'gem', 'name': 'RubyGems', 'description': 'Ruby包管理器'},
{'type': 'rubygems', 'name': 'RubyGems', 'description': 'Ruby官方仓库'},
# Rust
{'type': 'cargo', 'name': 'Crates.io', 'description': 'Rust语言包管理器'},
{'type': 'rustup', 'name': 'Rustup', 'description': 'Rust工具链'},
# PHP
{'type': 'composer', 'name': 'Composer', 'description': 'PHP包管理器'},
{'type': 'packagist', 'name': 'Packagist', 'description': 'PHP官方包仓库'},
# Swift/Apple
{'type': 'cocoapods', 'name': 'CocoaPods', 'description': 'iOS/macOS包管理器'},
# C/C++
{'type': 'conan', 'name': 'Conan', 'description': 'C/C++包管理器'},
{'type': 'vcpkg', 'name': 'vcpkg', 'description': 'C/C++包管理器'},
# Dart/Flutter
{'type': 'pub', 'name': 'Pub.dev', 'description': 'Dart/Flutter包管理器'},
{'type': 'dart', 'name': 'Dart SDK', 'description': 'Dart SDK'},
{'type': 'flutter', 'name': 'Flutter', 'description': 'Flutter SDK'},
# Haskell
{'type': 'hackage', 'name': 'Hackage', 'description': 'Haskell包管理器'},
{'type': 'stackage', 'name': 'Stackage', 'description': 'Haskell Stackage'},
# OCaml
{'type': 'opam', 'name': 'OPAM', 'description': 'OCaml包管理器'},
# D语言
{'type': 'dub', 'name': 'Dub', 'description': 'D语言包管理器'},
# Nim
{'type': 'nimble', 'name': 'Nimble', 'description': 'Nim语言包管理器'},
# V语言
{'type': 'v', 'name': 'V PM', 'description': 'V语言包管理器'},
# Julia
{'type': 'julia', 'name': 'Julia Packages', 'description': 'Julia语言包管理器'},
# Lua
{'type': 'lua', 'name': 'Lua', 'description': 'Lua语言'},
{'type': 'luarocks', 'name': 'LuaRocks', 'description': 'Lua包管理器'},
# Elm
{'type': 'elm', 'name': 'Elm Packages', 'description': 'Elm语言包管理器'},
# Perl
{'type': 'cpan', 'name': 'CPAN', 'description': 'Perl包管理器'},
{'type': 'cpanm', 'name': 'cpanm', 'description': 'Perl cpanminus'},
# R
{'type': 'cran', 'name': 'CRAN', 'description': 'R语言包仓库'},
# LaTeX
{'type': 'ctan', 'name': 'CTAN', 'description': 'LaTeX包管理器'},
# ======== 容器/云原生 ========
{'type': 'helm', 'name': 'Helm Charts', 'description': 'Kubernetes Helm包'},
{'type': 'kubernetes', 'name': 'Kubernetes', 'description': 'Kubernetes发行版'},
{'type': 'quay', 'name': 'Quay.io', 'description': 'Quay容器仓库'},
{'type': 'ghcr', 'name': 'GitHub Container Registry', 'description': 'GitHub容器仓库'},
{'type': 'gcr', 'name': 'Google Container Registry', 'description': 'Google容器仓库'},
{'type': 'harbor', 'name': 'Harbor', 'description': 'Harbor容器仓库'},
# ======== 开发工具 ========
{'type': 'jetbrains', 'name': 'JetBrains', 'description': 'JetBrains IDE'},
{'type': 'vscode', 'name': 'VS Code', 'description': 'Visual Studio Code'},
{'type': 'cuda', 'name': 'CUDA', 'description': 'NVIDIA CUDA工具包'},
# ======== 语言运行时 ========
{'type': 'node', 'name': 'Node.js', 'description': 'Node.js官方'},
{'type': 'python', 'name': 'Python', 'description': 'Python官方'},
{'type': 'ruby', 'name': 'Ruby', 'description': 'Ruby官方'},
{'type': 'php', 'name': 'PHP', 'description': 'PHP官方'},
{'type': 'java', 'name': 'Java JDK', 'description': 'Oracle/OpenJDK'},
{'type': 'dotnet', 'name': '.NET SDK', 'description': '.NET SDK'},
# ======== Linux 发行版 ========
{'type': 'alpine', 'name': 'Alpine Linux', 'description': 'Alpine Linux'},
{'type': 'arch', 'name': 'Arch Linux', 'description': 'Arch Linux'},
{'type': 'aur', 'name': 'AUR', 'description': 'Arch Linux AUR'},
{'type': 'centos', 'name': 'CentOS', 'description': 'CentOS'},
{'type': 'debian', 'name': 'Debian', 'description': 'Debian'},
{'type': 'fedora', 'name': 'Fedora', 'description': 'Fedora'},
{'type': 'gentoo', 'name': 'Gentoo', 'description': 'Gentoo'},
{'type': 'opensuse', 'name': 'openSUSE', 'description': 'openSUSE'},
{'type': 'void', 'name': 'Void Linux', 'description': 'Void Linux'},
{'type': 'freebsd', 'name': 'FreeBSD', 'description': 'FreeBSD'},
{'type': 'netbsd', 'name': 'NetBSD', 'description': 'NetBSD'},
{'type': 'openbsd', 'name': 'OpenBSD', 'description': 'OpenBSD'},
{'type': 'rocky', 'name': 'Rocky Linux', 'description': 'Rocky Linux'},
{'type': 'alma', 'name': 'AlmaLinux', 'description': 'AlmaLinux'},
{'type': 'kali', 'name': 'Kali Linux', 'description': 'Kali Linux'},
{'type': 'ubuntu', 'name': 'Ubuntu', 'description': 'Ubuntu'},
{'type': 'mint', 'name': 'Linux Mint', 'description': 'Linux Mint'},
{'type': 'manjaro', 'name': 'Manjaro', 'description': 'Manjaro Linux'},
{'type': 'slackware', 'name': 'Slackware', 'description': 'Slackware'},
{'type': 'mageia', 'name': 'Mageia', 'description': 'Mageia Linux'},
{'type': 'openmandriva', 'name': 'OpenMandriva', 'description': 'OpenMandriva'},
# ======== 系统包管理器 ========
{'type': 'homebrew', 'name': 'Homebrew', 'description': 'macOS Homebrew'},
{'type': 'brew', 'name': 'Brew', 'description': 'Homebrew'},
{'type': 'chocolatey', 'name': 'Chocolatey', 'description': 'Windows Chocolatey'},
{'type': 'snap', 'name': 'Snap Store', 'description': 'Snap应用商店'},
{'type': 'flatpak', 'name': 'Flatpak', 'description': 'Flatpak应用'},
{'type': 'appimage', 'name': 'AppImage', 'description': 'AppImage应用'},
{'type': 'winget', 'name': 'winget', 'description': 'Windows winget'},
{'type': 'scoop', 'name': 'Scoop', 'description': 'Windows Scoop'},
# ======== 数据库/运维 ========
{'type': 'postgresql', 'name': 'PostgreSQL', 'description': 'PostgreSQL数据库'},
{'type': 'mysql', 'name': 'MySQL', 'description': 'MySQL数据库'},
{'type': 'mariadb', 'name': 'MariaDB', 'description': 'MariaDB数据库'},
{'type': 'mongodb', 'name': 'MongoDB', 'description': 'MongoDB数据库'},
{'type': 'redis', 'name': 'Redis', 'description': 'Redis数据库'},
{'type': 'influxdata', 'name': 'InfluxData', 'description': 'InfluxDB时序数据库'},
{'type': 'grafana', 'name': 'Grafana', 'description': 'Grafana可视化'},
{'type': 'prometheus', 'name': 'Prometheus', 'description': 'Prometheus监控'},
{'type': 'elastic', 'name': 'Elastic', 'description': 'Elasticsearch'},
# ======== 代码托管 ========
{'type': 'github', 'name': 'GitHub', 'description': 'GitHub代码托管'},
{'type': 'gitlab', 'name': 'GitLab', 'description': 'GitLab代码托管'},
{'type': 'bitbucket', 'name': 'Bitbucket', 'description': 'Bitbucket代码托管'},
{'type': 'sourceforge', 'name': 'SourceForge', 'description': 'SourceForge开源托管'},
# ======== 其他 ========
{'type': 'nix', 'name': 'Nix/NixOS', 'description': 'Nix包管理器'},
{'type': 'guix', 'name': 'Guix', 'description': 'Guix包管理器'},
{'type': 'termux', 'name': 'Termux', 'description': 'Termux包管理器'},
{'type': 'msys2', 'name': 'MSYS2', 'description': 'MSYS2包管理器'},
{'type': 'google-fonts', 'name': 'Google Fonts', 'description': 'Google字体库'},
# ======== 自定义 ========
{'type': 'custom', 'name': '自定义HTTP', 'description': '自定义HTTP镜像源'}
]