Zurück zu den Updates
New releaseAug 31, 2026

proxy v0.7.0

Ein leichtgewichtiger Caching-Proxy für Paketregistries.

Teilen

git-pkgs proxy

Ein Caching-Proxy für Paketregistrierungen. Beschleunigt Paketdownloads durch lokales Caching von Artefakten, reduziert die Bandbreitennutzung und verbessert die Zuverlässigkeit.

Versions-Cooldown

Die meisten Supply-Chain-Angriffe setzen auf Geschwindigkeit: Eine bösartige Version wird veröffentlicht und innerhalb von Minuten von automatisierten Pipelines konsumiert, bevor es jemand bemerkt. Die Cooldown-Funktion fügt neu veröffentlichten Versionen eine Quarantänezeit hinzu. Wenn sie aktiviert ist, entfernt der Proxy Versionen aus Metadaten-Antworten, bis sie ein konfigurierbares Alter überschritten haben.

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

Ein 3-Tage-Cooldown bedeutet, dass wenn lodash Version 4.18.0 veröffentlicht, deine Builds weiterhin 4.17.21 verwenden, bis 3 Tage vergangen sind. Wenn sich die neue Version als kompromittiert herausstellt, warst du nie exponiert.

Auflösungsreihenfolge: Paket-Override, dann Ökosystem-Override, dann globaler Standard. So kannst du einen konservativen Standard festlegen und Ausnahmen für Pakete schaffen, bei denen du schnellere Updates benötigst. Siehe docs/configuration.md für die vollständige Konfigurationsreferenz.

Artifact Scanning

Cooldown betrachtet nur den Veröffentlichungszeitstempel einer Version — es werden niemals die tatsächlichen Bytes inspiziert. Artifact Scanning schließt diese Lücke: Wenn aktiviert, wird jedes Artefakt in den Speicher überführt und von einem oder mehreren externen Diensten (trivy, ClamAV, Wiz oder allem anderen, das einen kleinen HTTP/JSON-Vertrag spricht) gescannt, bevor es in den Cache übernommen und an Clients ausgeliefert wird.

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]

Der Proxy lädt niemals Artefakt-Bytes zu einem Scanner hoch. Jeder Scanner wird mit Paket-Metadaten plus einer kurzlebigen signierten URL benachrichtigt; der Scanner lädt die Bytes selbst aus dem eigenen Speicher des Proxys. Scanner laufen gleichzeitig, und der erste block-Modus-Scanner, der ein Urteil „nicht erlaubt" meldet, gewinnt sofort und bricht die übrigen ab. Siehe docs/configuration.md für die vollständige Konfigurationsreferenz und den HTTP-Vertrag des Scanners.

Unterstützte Registries

RegistrySprache/PlattformCooldownAbgeschlossen
npmJavaScriptJa✓
CargoRustJa✓
RubyGemsRubyJa✓
Go proxyGo✓
HexElixirJa*✓
pub.devDartJa✓
PyPIPythonJa✓
MavenJava✓
Gradle Build CacheJava/Kotlin✓
NuGet.NETJa✓
ComposerPHPJa✓
ConanC/C++✓
CondaPython/RJa✓
CRANR✓
JuliaJulia✓
SwiftSwift✓
ContainerDocker/OCI✓
HomebrewmacOS/Linux✓
DebianDebian/Ubuntu✓
RPMRHEL/Fedora✓
AlpineAlpine Linux✓
ArchArch Linux✗
ChefChef✗
GenericAny✓
HelmKubernetes✓
VagrantVagrant✗

Cooldown erfordert Veröffentlichungszeitstempel in den Metadaten. Registries ohne ein „Ja" in der Cooldown-Spalte stellen entweder keine Zeitstempel bereit oder wurden noch nicht angebunden.

* Hex-Cooldown erfordert das Deaktivieren der Registry-Signaturverifikation (HEX_NO_VERIFY_REPO_ORIGIN=1), da der Proxy die Protobuf-Nutzlast neu kodiert.

Installation

brew install git-pkgs/git-pkgs/proxy

Oder lade ein Binary von der Releases-Seite herunter.

Helm

Installiere das Chart von GHCR und lege die öffentliche URL fest, die Paketmanager-Clients verwenden werden, um den Proxy zu erreichen:

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

Das Standard-Chart stellt ein Replikat bereit, das auf einem 10 GiB persistenten Volume basiert, SQLite und Dateisystem-Artefaktspeicherung unter /data verwendet. Siehe deploy/charts/proxy/values.yaml für Ingress-, externe Datenbank- und Objektspeicher-Konfigurationsoptionen.

Schnellstart

# 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

Der Proxy läuft jetzt. Konfigurieren Sie Ihre Paketmanager so, dass sie ihn verwenden.

OpenAPI (Swagger)

Dieses Repository verwendet swaggo, um eine OpenAPI-Spezifikation aus annotierten Handlern zu generieren.

Generieren Sie die Spezifikation:

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

Generierte Dateien werden in docs/swagger/ geschrieben.

Wenn der Proxy läuft, rufe die Live-Spezifikation ab von:

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

Oder ersetze http://localhost:8080 durch deine konfigurierte Basis-URL. Dieser Link wird auch im Dashboard angezeigt.

Paketmanager konfigurieren

npm

Erstelle oder bearbeite ~/.npmrc:

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

Oder pro Projekt in .npmrc festlegen:

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

Oder verwenden Sie eine Umgebungsvariable:

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

npm audit, pnpm audit, yarn npm audit und npm audit signatures funktionieren über den Proxy: Die Audit- und Signing-Key-Endpunkte werden an die konfigurierte Upstream-Registry weitergeleitet, wobei die Upstream-Authentifizierung angewendet wird. Advisories stammen daher aus der Datenbank des Upstreams, nicht aus den eigenen Schwachstellen- daten des Proxys, und Versionen, die durch cooldown zurückgehalten werden, sind nicht vom Bericht ausgeschlossen.

Cargo

Erstellen oder bearbeiten Sie ~/.cargo/config.toml:

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

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

Oder lege es pro Projekt in .cargo/config.toml im Projektstammverzeichnis fest.

RubyGems / Bundler

Lege die Gem-Quelle in deiner Gemfile fest:

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

Global konfigurieren:

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

Go-Module

Legen Sie die Umgebungsvariable GOPROXY fest:

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

Oder in deinem Shell-Profil für Persistenz.

Homebrew

Richte Homebrews JSON-API und Artefakt-Domain auf den Proxy aus:

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

Die Artefakt-Domain fungiert als Proxy für Manifeste und Bottle-Blobs unter /v2/homebrew/core/. Das GHCR-Routing ist auf dieses Repository beschränkt. Quellarchive, Cask-Anwendungsdownloads, benutzerdefinierte Tap-Artefakte und Legacy-Flat-File-Bottle-Mirrors verwenden Homebrews normale Fallback-URLs. Lassen Sie den Fallback aktiviert, indem Sie HOMEBREW_ARTIFACT_DOMAIN_NO_FALLBACK nicht setzen.

Kategorien