Назад к обновлениям
New releaseAug 31, 2026

proxy v0.7.0

Легковесный кэширующий прокси для реестров пакетов.

Поделиться

git-pkgs proxy

Кэширующий прокси для реестров пакетов. Ускоряет загрузку пакетов за счёт локального кэширования артефактов, снижая потребление трафика и повышая надёжность.

Version Cooldown

Большинство атак на цепочку поставок полагаются на скорость: вредоносная версия публикуется и потребляется автоматизированными конвейерами в течение нескольких минут, прежде чем кто-либо это заметит. Функция cooldown добавляет период карантина для недавно опубликованных версий. Когда она включена, прокси удаляет версии из ответов метаданных до тех пор, пока они не превысят настраиваемый порог по времени.

cooldown:
  default: "3d"              # hide versions published less than 3 days ago
  ecosystems:
    npm: "7d"                # npm gets a longer window
    cargo: "0"               # disable for cargo
  packages:
    "pkg:npm/lodash": "0"    # exempt trusted packages

Трёхдневный период ожидания означает, что когда lodash публикует версию 4.18.0, ваши сборки продолжают использовать 4.17.21, пока не пройдёт 3 дня. Если новый релиз окажется скомпрометированным, вы никогда не подвергались риску.

Порядок разрешения: переопределение пакета, затем переопределение экосистемы, затем глобальное значение по умолчанию. Это позволяет задать консервативное значение по умолчанию и сделать исключения для пакетов, где нужны более быстрые обновления. Полный справочник по конфигурации см. в docs/configuration.md.

Сканирование артефактов

Период ожидания учитывает только временную метку публикации версии — он никогда не проверяет сами байты. Сканирование артефактов закрывает этот пробел: когда оно включено, каждый артефакт помещается в хранилище и сканируется одной или несколькими внешними службами (trivy, ClamAV, Wiz или любой другой, поддерживающей небольшой контракт HTTP/JSON), прежде чем он будет зафиксирован в кэше и отдан клиентам.

scanning:
  enabled: true
  signing_key: ${PROXY_SCANNING_SIGNING_KEY}
  scanners:
    - name: clamav
      url: http://clamav-adapter:8080/scan
      mode: block             # a block verdict deletes the artifact and returns 403
    - name: trivy
      url: http://trivy-adapter:8081/scan
      mode: monitor            # findings are logged, never gate caching
      ecosystems: [npm, pypi]

Прокси никогда не загружает байты артефактов в сканер. Каждый сканер получает уведомление с метаданными пакета и кратковременной подписанной ссылкой; сканер сам забирает байты из собственного хранилища прокси. Сканеры работают параллельно, и первый сканер в режиме block, сообщивший вердикт «не разрешено», немедленно побеждает, отменяя остальные. Полный справочник по конфигурации и HTTP-контракт сканера см. в docs/configuration.md.

Поддерживаемые реестры

РеестрЯзык/ПлатформаCooldownЗавершено
npmJavaScriptДа✓
CargoRustДа✓
RubyGemsRubyДа✓
Go proxyGo✓
HexElixirДа*✓
pub.devDartДа✓
PyPIPythonДа✓
MavenJava✓
Gradle Build CacheJava/Kotlin✓
NuGet.NETДа✓
ComposerPHPДа✓
ConanC/C++✓
CondaPython/RДа✓
CRANR✓
JuliaJulia✓
SwiftSwift✓
ContainerDocker/OCI✓
HomebrewmacOS/Linux✓
DebianDebian/Ubuntu✓
RPMRHEL/Fedora✓
AlpineAlpine Linux✓
ArchArch Linux✗
ChefChef✗
GenericAny✓
HelmKubernetes✓
VagrantVagrant✗

Cooldown требует наличия временных меток публикации в метаданных. Реестры без «Да» в столбце cooldown либо не предоставляют временные метки, либо ещё не подключены.

* Cooldown для Hex требует отключения проверки подписи реестра (HEX_NO_VERIFY_REPO_ORIGIN=1), поскольку прокси перекодирует protobuf-полезную нагрузку.

Установка

brew install git-pkgs/git-pkgs/proxy

Или скачайте бинарный файл со страницы релизов.

Helm

Установите чарт из GHCR, указав публичный URL, который клиенты менеджеров пакетов будут использовать для доступа к прокси:

helm install proxy oci://ghcr.io/git-pkgs/charts/proxy \
  --set config.data.base_url=https://proxy.example.com

Стандартный chart разворачивает одну реплику с постоянным томом на 10 GiB, используя SQLite и файловое хранилище артефактов в /data. См. deploy/charts/proxy/values.yaml для параметров конфигурации ingress, внешней базы данных и объектного хранилища.

Быстрый старт

# Build from source
go build -o proxy ./cmd/proxy

# Run with defaults (listens on :8080)
./proxy

# Run with custom settings
./proxy -listen :3000 -base-url https://proxy.example.com

Прокси теперь запущен. Настройте ваши менеджеры пакетов для его использования.

OpenAPI (Swagger)

В этом репозитории используется swaggo для генерации спецификации OpenAPI из аннотированных обработчиков.

Сгенерируйте спецификацию:

go install github.com/swaggo/swag/cmd/swag@latest
go generate ./internal/server

Сгенерированные файлы записываются в docs/swagger/.

Когда прокси запущен, получите актуальную спецификацию по адресу:

  • http://localhost:8080/openapi.json

Или замените http://localhost:8080 на ваш настроенный базовый URL. Эта ссылка также отображается на панели управления.

Настройка менеджеров пакетов

npm

Создайте или отредактируйте ~/.npmrc:

registry=http://localhost:8080/npm/

Или задайте для каждого проекта в .npmrc:

registry=http://localhost:8080/npm/

Или используйте переменную окружения:

npm_config_registry=http://localhost:8080/npm/ npm install

npm audit, pnpm audit, yarn npm audit и npm audit signatures работают через прокси: конечные точки аудита и ключей подписи передаются в настроенный вышестоящий реестр с применением аутентификации вышестоящего реестра. Таким образом, рекомендации поступают из базы данных вышестоящего реестра, а не из собственных данных прокси об уязвимостях, и версии, задержанные cooldown, не исключаются из отчёта.

Cargo

Создайте или отредактируйте ~/.cargo/config.toml:

[source.crates-io]
replace-with = "proxy"

[source.proxy]
registry = "sparse+http://localhost:8080/cargo/"

Или задайте для каждого проекта в .cargo/config.toml в корне вашего проекта.

RubyGems / Bundler

Задайте источник gem в вашем Gemfile:

source "http://localhost:8080/gem"

Или настройте глобально:

gem sources --add http://localhost:8080/gem/
bundle config mirror.https://rubygems.org http://localhost:8080/gem

Go-модули

Задайте переменную окружения GOPROXY:

export GOPROXY=http://localhost:8080/go,direct

Или в профиле вашей оболочки для постоянного применения.

Homebrew

Направьте JSON API и домен артефактов Homebrew на прокси:

export HOMEBREW_API_DOMAIN=http://localhost:8080/homebrew
export HOMEBREW_ARTIFACT_DOMAIN=http://localhost:8080

Домен артефактов проксирует манифесты и blob-объекты bottle по пути /v2/homebrew/core/. Маршрутизация GHCR ограничена этим репозиторием. Исходные архивы, загрузки приложений cask, артефакты пользовательских tap-репозиториев и устаревшие flat-file зеркала bottle используют обычные резервные URL Homebrew. Оставьте резервный режим включённым, не задавая переменную HOMEBREW_ARTIFACT_DOMAIN_NO_FALLBACK.

Включите cache_metadata или задайте PROXY_CACHE_METADATA=true, чтобы сохранять ответы JSON API Homebrew для офлайн-резерва. Blob-объекты bottle и их OCI-манифесты кэшируются и без этой настройки.

Категории