Volver a actualizaciones
Nuevo releaseAug 31, 2026

proxy v0.7.0

Un proxy ligero de caché para registros de paquetes.

Compartir

git-pkgs proxy

Un proxy con caché para registros de paquetes. Acelera las descargas de paquetes almacenando artefactos en caché localmente, lo que reduce el uso de ancho de banda y mejora la fiabilidad.

Enfriamiento de versiones

La mayoría de los ataques a la cadena de suministro dependen de la velocidad: una versión maliciosa se publica y es consumida por pipelines automatizados en cuestión de minutos, antes de que nadie lo note. La función de enfriamiento añade un periodo de cuarentena a las versiones recién publicadas. Cuando se activa, el proxy elimina las versiones de las respuestas de metadatos hasta que hayan superado un umbral configurable.

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 enfriamiento de 3 días significa que cuando lodash publica la versión 4.18.0, tus compilaciones siguen usando 4.17.21 hasta que hayan pasado 3 días. Si la nueva versión resulta estar comprometida, nunca estuviste expuesto.

Orden de resolución: anulación de paquete, luego anulación de ecosistema, luego valor predeterminado global. Esto te permite establecer un valor predeterminado conservador y crear excepciones para paquetes donde necesitas actualizaciones más rápidas. Consulta docs/configuration.md para la referencia completa de configuración.

Escaneo de artefactos

El enfriamiento solo examina la marca de tiempo de publicación de una versión — nunca inspecciona los bytes reales. El escaneo de artefactos cierra esa brecha: cuando está habilitado, cada artefacto se almacena en el almacenamiento y es escaneado por uno o más servicios externos (trivy, ClamAV, Wiz, o cualquier otra cosa que hable un pequeño contrato HTTP/JSON) antes de ser confirmado en la caché y servido a los clientes.

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]

El proxy nunca sube los bytes de los artefactos a un escáner. Cada escáner es notificado con metadatos del paquete más una URL firmada de corta duración; el escáner descarga los bytes por sí mismo desde el almacenamiento propio del proxy. Los escáneres se ejecutan de forma concurrente, y el primer escáner en modo block que reporte un veredicto de no permitido gana inmediatamente, cancelando el resto. Consulta docs/configuration.md para la referencia completa de configuración y el contrato HTTP del escáner.

Registros compatibles

RegistroLenguaje/PlataformaEnfriamientoCompletado
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✗

El enfriamiento requiere marcas de tiempo de publicación en los metadatos. Los registros sin un "Sí" en la columna de enfriamiento o bien no exponen marcas de tiempo o aún no han sido integrados.

* El enfriamiento de Hex requiere deshabilitar la verificación de firma del registro (HEX_NO_VERIFY_REPO_ORIGIN=1) ya que el proxy recodifica la carga útil del protobuf.

Instalación

brew install git-pkgs/git-pkgs/proxy

O descarga un binario desde la página de releases.

Helm

Instala el chart desde GHCR, configurando la URL pública que los clientes de gestores de paquetes usarán para acceder al proxy:

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

El chart predeterminado despliega una réplica respaldada por un volumen persistente de 10 GiB, usando SQLite y almacenamiento de artefactos en el sistema de archivos bajo /data. Consulte deploy/charts/proxy/values.yaml para las opciones de configuración de ingress, base de datos externa y almacenamiento de objetos.

Inicio rápido

# 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

El proxy ahora está en ejecución. Configure sus gestores de paquetes para usarlo.

OpenAPI (Swagger)

Este repositorio utiliza swaggo para generar una especificación OpenAPI a partir de los manejadores anotados.

Genere la especificación:

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

Los archivos generados se escriben en docs/swagger/.

Cuando el proxy está en ejecución, obtén la especificación en vivo desde:

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

O reemplaza http://localhost:8080 con tu URL base configurada. Este enlace también se muestra en el panel de control.

Configuración de gestores de paquetes

npm

Crea o edita ~/.npmrc:

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

O configurar por proyecto en .npmrc:

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

O utilice la variable de entorno:

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

npm audit, pnpm audit, yarn npm audit y npm audit signatures funcionan a través del proxy: los endpoints de auditoría y de claves de firma se pasan al registro upstream configurado, con la autenticación upstream aplicada. Los avisos por lo tanto provienen de la base de datos del upstream, no de los propios datos de vulnerabilidad del proxy, y las versiones retenidas por cooldown no se excluyen del informe.

Cargo

Cree o edite ~/.cargo/config.toml:

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

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

O configúralo por proyecto en .cargo/config.toml en la raíz de tu proyecto.

RubyGems / Bundler

Configura la fuente de gemas en tu Gemfile:

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

O configurar globalmente:

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

Módulos de Go

Establece la variable de entorno GOPROXY:

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

O en el perfil de tu shell para que sea persistente.

Homebrew

Apunta la API JSON y el dominio de artefactos de Homebrew al proxy:

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

Categorías