Torna agli aggiornamenti
New releaseAug 31, 2026

proxy v0.7.0

Un proxy di caching leggero per i registry di pacchetti.

Condividi

git-pkgs proxy

Un proxy con cache per i registri di pacchetti. Velocizza il download dei pacchetti memorizzando localmente gli artefatti, riducendo l'utilizzo della larghezza di banda e migliorando l'affidabilità.

Cooldown delle versioni

La maggior parte degli attacchi alla supply chain si basa sulla velocità: una versione malevola viene pubblicata e consumata dalle pipeline automatizzate in pochi minuti, prima che qualcuno se ne accorga. La funzionalità di cooldown aggiunge un periodo di quarantena alle versioni appena pubblicate. Quando è abilitata, il proxy rimuove le versioni dalle risposte dei metadati finché non hanno superato una soglia configurabile.

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

Un cooldown di 3 giorni significa che quando lodash pubblica la versione 4.18.0, le tue build continuano a usare 4.17.21 finché non sono trascorsi 3 giorni. Se la nuova release si rivela compromessa, non sei mai stato esposto.

Ordine di risoluzione: override del pacchetto, poi override dell'ecosistema, poi default globale. Questo ti permette di impostare un default conservativo e ritagliare eccezioni per i pacchetti in cui hai bisogno di aggiornamenti più rapidi. Vedi docs/configuration.md per il riferimento completo alla configurazione.

Scansione degli artefatti

Il cooldown guarda solo il timestamp di pubblicazione di una versione — non ispeziona mai i byte effettivi. La scansione degli artefatti colma questa lacuna: quando è abilitata, ogni artefatto viene messo in staging nello storage e scansionato da uno o più servizi esterni (trivy, ClamAV, Wiz o qualsiasi altro che parli un piccolo contratto HTTP/JSON) prima di essere committato nella cache e servito ai client.

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]

Il proxy non carica mai i byte degli artefatti su uno scanner. Ogni scanner viene notificato con i metadati del pacchetto più un URL firmato a breve scadenza; lo scanner scarica i byte direttamente dallo storage del proxy. Gli scanner vengono eseguiti in parallelo, e il primo scanner in modalità block che riporta un verdetto di non consentito vince immediatamente, annullando gli altri. Vedi docs/configuration.md per il riferimento completo della configurazione e il contratto HTTP dello scanner.

Registry supportati

RegistryLinguaggio/PiattaformaCooldownCompletato
npmJavaScriptSì✓
CargoRustSì✓
RubyGemsRubySì✓
Go proxyGo✓
HexElixirSì*✓
pub.devDartSì✓
PyPIPythonSì✓
MavenJava✓
Gradle Build CacheJava/Kotlin✓
NuGet.NETSì✓
ComposerPHPSì✓
ConanC/C++✓
CondaPython/RSì✓
CRANR✓
JuliaJulia✓
SwiftSwift✓
ContainerDocker/OCI✓
HomebrewmacOS/Linux✓
DebianDebian/Ubuntu✓
RPMRHEL/Fedora✓
AlpineAlpine Linux✓
ArchArch Linux✗
ChefChef✗
GenericAny✓
HelmKubernetes✓
VagrantVagrant✗

Il cooldown richiede timestamp di pubblicazione nei metadati. I registry senza un "Sì" nella colonna cooldown o non espongono i timestamp o non sono ancora stati configurati.

* Il cooldown di Hex richiede la disabilitazione della verifica della firma del registry (HEX_NO_VERIFY_REPO_ORIGIN=1) poiché il proxy ricodifica il payload protobuf.

Installazione

brew install git-pkgs/git-pkgs/proxy

Oppure scarica un binario dalla pagina delle release.

Helm

Installa il chart da GHCR, impostando l'URL pubblico che i client dei gestori di pacchetti utilizzeranno per raggiungere il proxy:

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

Il chart predefinito distribuisce una replica supportata da un volume persistente da 10 GiB, utilizzando SQLite e archiviazione di artefatti su filesystem sotto /data. Vedi deploy/charts/proxy/values.yaml per le opzioni di configurazione di ingress, database esterno e object-storage.

Avvio Rapido

# 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

Il proxy è ora in esecuzione. Configura i tuoi gestori di pacchetti per utilizzarlo.

OpenAPI (Swagger)

Questo repository utilizza swaggo per generare una specifica OpenAPI dagli handler annotati.

Genera la specifica:

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

I file generati vengono scritti in docs/swagger/.

Quando il proxy è in esecuzione, recupera la specifica live da:

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

Oppure sostituisci http://localhost:8080 con l'URL di base configurato. Questo link è mostrato anche nella dashboard.

Configurazione dei Package Manager

npm

Crea o modifica ~/.npmrc:

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

Oppure imposta per progetto in .npmrc:

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

Oppure utilizza una variabile d'ambiente:

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

npm audit, pnpm audit, yarn npm audit e npm audit signatures funzionano attraverso il proxy: gli endpoint di audit e delle chiavi di firma vengono inoltrati al registry upstream configurato, con l'autenticazione upstream applicata. Gli advisory provengono quindi dal database dell'upstream, non dai dati di vulnerabilità propri del proxy, e le versioni trattenute dal cooldown non sono escluse dal report.

Cargo

Crea o modifica ~/.cargo/config.toml:

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

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

Oppure imposta per progetto in .cargo/config.toml nella radice del tuo progetto.

RubyGems / Bundler

Imposta la sorgente della gem nel tuo Gemfile:

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

Oppure configurare globalmente:

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

Moduli Go

Imposta la variabile d'ambiente GOPROXY:

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

Oppure nel profilo della tua shell per la persistenza.

Homebrew

Punta l'API JSON e il dominio degli artefatti di Homebrew al proxy:

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

Il dominio degli artefatti fa da proxy per manifest e blob delle bottle sotto /v2/homebrew/core/. L'instradamento GHCR è limitato a quel repository. Gli archivi sorgente, i download delle applicazioni cask, gli artefatti dei tap personalizzati e i mirror legacy delle bottle in formato flat-file utilizzano gli URL di fallback normali di Homebrew. Mantieni abilitato il fallback lasciando HOMEBREW_ARTIFACT_DOMAIN_NO_FALLBACK non impostato.

Categorie