Облако ↗

pull-through кэширующее зеркало · rocketmirror.ru

Ускорьте свой CI.

Единое кэширующее зеркало пакетов и регистри рядом с вашими раннерами. Меньше внешних сетевых зависимостей, предсказуемые сборки, раздача из кэша — даже когда upstream недоступен.

# config.yaml — один источник = одно поле kind
sources:
  - name: pypi
    kind: pypi                 # apt | apk | pacman | rpm | oci | npm
    upstreams:                 # cargo | rubygems | maven | composer
      - https://pypi.org       # go | gh | gl | http
    cache: s3                  # filesystem | s3 (rustfs)
  • несколько upstream-зеркал с fallback
  • пулы socks5/https-прокси
  • метрики VictoriaMetrics
  • облачные серверы — в России 🇷🇺

01

Что мы зеркалируем

Один движок кэширования и маршрутизации — тип источника задаётся полем kind.

🌀aptDebian · Ubuntu
🏔️apkAlpine
🏹pacmanArch Linux
🎩rpmRHEL · Fedora
🐳Docker / OCIобразы и слои
📦npmnpm · pnpm · yarn
🐍PyPIpip · uv · poetry
🦀Cargocrates.io + static.rust-lang.org
💎RubyGemsgem · bundler
MavenCentral · Gradle
🐘ComposerPackagist
🐹Go modulesproxy.golang.org
🗂️dl.google.comстатические файлы
📄raw.githubusercontent.com+ get.nexte.st
GitHub / GitLabстраницы и файлы в реальном времени
Custom HTTPлюбой источник по конфигу

Эндпоинты и доступ

Каждый источник — свой поддомен. Доступ ко всем зеркалам — по токену: в заголовке Authorization: Bearer <token> или прямо в URL (https://<token>@npm.rocketmirror.ru/…).

ЭндпоинтЧто зеркалирует
docker.rocketmirror.ruDocker/OCI — registry-1.docker.io
npm.rocketmirror.runpm — registry.npmjs.org
pypi.rocketmirror.ruPyPI — pypi.org
cargo.rocketmirror.rucrates.io
gems.rocketmirror.rurubygems.org
maven.rocketmirror.ruMaven Central
composer.rocketmirror.ruPackagist
debian / ubuntu / debian-security.rocketmirror.ruapt — несколько зеркал с fallback
alpine.rocketmirror.ruapk — dl-cdn.alpinelinux.org
arch.rocketmirror.rupacman — зеркала Arch с fallback
gh / gl.rocketmirror.rugithub.com / gitlab.com — со следованием редиректам
rust-static.rocketmirror.rustatic.rust-lang.org — тулчейны rustup
nextest.rocketmirror.ruget.nexte.st
nodejs.rocketmirror.runodejs.org
dl-google.rocketmirror.rudl.google.com — Chrome и др.
raw-gh.rocketmirror.ruraw.githubusercontent.com
dl-minio.rocketmirror.rudl.min.io — клиент MinIO
# Токен — в заголовке или прямо в URL
curl -H "Authorization: Bearer $RM_TOKEN" https://pypi.rocketmirror.ru/simple/requests/
curl "https://$RM_TOKEN@pypi.rocketmirror.ru/simple/requests/"

# apt — /etc/apt/sources.list.d/rocketmirror.sources
deb https://$RM_TOKEN@debian.rocketmirror.ru bookworm main

# npm — .npmrc
registry=https://npm.rocketmirror.ru/
//npm.rocketmirror.ru/:_authToken=${RM_TOKEN}

# Docker — /etc/docker/daemon.json
{ "registry-mirrors": ["https://docker.rocketmirror.ru"] }

# rustup
export RUSTUP_DIST_SERVER="https://rust-static.rocketmirror.ru"

Открытый список всего, что лежит в кеше: страница кеша или JSON /api/assets. Короткие адреса вроде /sccache/sccache-v0.10.0-x86_64-unknown-linux-musl.tar.gz — декларативные алиасы поверх GitHub-релизов.

02

Как это работает

Пакеты неизменяемы и адресуются по содержимому — кэш не может «протухнуть» по смыслу.

1

Настройте источник

Добавьте источник в конфиг с явным полем kind: pypi, oci, apt, gh… Укажите одно или несколько upstream-зеркал.

2

Запрос пакета

Ваши pip, npm, docker и apt идут на RocketMirror как на обычный реестр.

3

Кэш и проверка

Проверяем кэш, при промахе загружаем с upstream, валидируем контрольные суммы и подписи (GPG), складываем в layered-хранилище.

4

Отдача из кэша

Дальше пакет раздаётся мгновенно из кэша — даже когда upstream недоступен. Сбой внешней сети больше не ломает CI.

03

Для DevOps

Зеркало знает, что реально скачивалось через него, — и помогает держать инфраструктуру в актуальном состоянии.

Предупреждения об обновлениях

Сервер предупреждает, если вы долго не обновляли пакеты — как apticron, но на основе того, что реально скачивалось через зеркало. Для этого сценария выдаются приватные mirror-ссылки.

скоро

Устаревшие пакеты

Логи и предупреждения о версиях, по которым давно вышли обновления — по данным прошедшего через зеркало трафика.

скоро

Уязвимые пакеты

Предупреждения об известных уязвимостях в пакетах, которые тянет ваша инфраструктура.

04

Модель ценообразования

Коротко и честно.

Бесплатно

0 ₽

  • Базовое зеркалирование всех экосистем
  • Лимит трафика на IP-адрес
  • Лимиты рассчитаны на обычного пользователя

Для CI

приватные токены

  • Высокое потребление в CI без лимитов по IP
  • Платные приватные токены на зеркало
  • Позже — аутентифицированные per-user mirror-ссылки

05

Два режима

Один и тот же движок — у вас на сервере или в нашем облаке.

Open source · Apache-2.0

Self-hosted

  • Развёртывание на своей инфраструктуре
  • Хранилище: файловая система + S3/RustFS (layered)
  • Свои источники, upstream-зеркала и прокси-пулы
  • Метрики в VictoriaMetrics
Установить self-hosted
проприетарный · хостится нами

SaaS — облако

  • Готовые эндпоинты на rocketmirror.ru
  • Серверы в России — низкая задержка для команд и CI в РФ
  • Без серверов и обслуживания
  • Автоматические обновления и мониторинг
  • Те же протоколы и конфигурация
Подключить облако

06

Используем и вдохновляемся

Проекты, на плечах которых мы стоим.

VerdaccioMIT
GemstashMIT
kellnrApache-2.0
HarborApache-2.0
FlexoMIT
apt-proxyApache-2.0
apt-cacher-ngBSD-4-clause
distributionApache-2.0
zotApache-2.0
RustFSApache-2.0
VictoriaMetricsApache-2.0