Zpět na domů

NORA registr artefaktů na Rustu bez DB

NORA — lehký registr artefaktů na Rustu podporuje 7 formátů bez externích DB. Velikost 34 MB, RAM 12 MB, proxy upstream a RBAC. Vhodný pro CI/CD v izolovaných prostředích.

Vytvořte registr artefaktů NORA na Rustu za 3 sekundy
Advertisement 728x90

NORA: minimalistický registr artefaktů v Rustu bez externích závislostí

Vývojář vytvořil NORA — jednotný binární soubor v Rustu pro ukládání artefaktů v formátech Docker v2/OCI, Maven, npm, PyPI, Cargo, Go a raw. Velikost 34 MB, spotřeba RAM 12 MB v idle režimu, bez databází nebo externích služeb. Metadata se ukládají v JSON souborech na disku, konzistence přes atomické přejmenování. Podpora S3 backendu, Prometheus metrik, health sond a Swagger dokumentace přímo v krabici.

Proč se vzdali Nexus, Artifactory a Harbor

Nexus OSS vyžaduje 4 GB RAM na Java proces, migrace mezi verzemi (Core/Community/Pro) jsou složité kvůli přechodu z OrientDB na PostgreSQL. Artifactory OSS je omezen na Maven/Gradle/Ivy, ostatní formáty (Docker, npm) — v placené verzi. Harbor se zaměřuje na kontejnery, ignoruje Maven/npm/PyPI. GitLab Registry funguje s omezeními: problémy s OCI artefakty, buildx cache a multiarchitekturou vyžadují obchvatné cesty.

Čas na provizorní řešení překročil úsilí na vytvoření vlastního řešení.

Google AdInline article slot

Architektura bez DB a webové administrace

Všechna data v souborovém systému: artefakty a metadata v JSON vedle sebe. Adresář se tvoří procházením složek. Žádné migrace, clustering nebo externí služby — start za 3 sekundy.

nora (34 MB, Rust, 450+ testů)
├── /v2/       — Docker Registry v2 + OCI (obrazy, Helm charts)
├── /maven/    — Maven (JAR, WAR, POM)
├── /npm/      — npm (Node.js balíčky)
├── /pypi/     — PyPI (Python balíčky)
├── /cargo/    — Cargo (Rust kráty, sparse index RFC 2789)
├── /go/       — Go Modules
├── /raw/      — Raw (cokoli)
├── /metrics   — Prometheus
├── /health    — K8s liveness probe
├── /ready     — K8s readiness probe
├── /api-docs  — Swagger
└── /data/     — úložiště (FS nebo S3)

Konfigurace přes config.toml nebo proměnné prostředí. Web UI read-only: prohlížení, vyhledávání, statistiky. Změny v git s auditováním přes CI/CD.

Podporované formáty

  • Docker v2 + OCI: /v2/ — obrazy, Helm charts, plná compliance se specifikací.
  • Maven: /maven/ — JAR, WAR, POM s proxy z Central.
  • npm: /npm/ — Node.js balíčky, sparse index.
  • PyPI: /pypi/ — Python balíčky.
  • Cargo: /cargo/ — Rust kráty podle RFC 2789.
  • Go: /go/ — moduly s proxy z proxy.golang.org.
  • Raw: /raw/ — libovolné soubory.

Autentizace a bezpečnost

  • htpasswd soubory pro základní autorizaci.
  • API tokeny s RBAC (read/write/admin), odvolání tokenů.
  • Anonymous read, TLS přes reverse proxy (nginx/Traefik).

Dále:

Google AdInline article slot
  • Strukturované JSON logy (metoda, cesta, status, uživatel).
  • Rate limiting podle endpointů.
  • Audit log v JSONL.
  • GC: nora gc --dry-run pro Docker bloby.
  • Záloha/obnova: nora backup -o file.tar.gz.

Srovnání výkonu

| Metrika | NORA | Nexus OSS | Artifactory |

|------------------|----------|-----------|-------------|

| Obraz | 34 MB | 600+ MB | 1+ GB |

Google AdInline article slot

| Studený start | ~3 s | 30-60 s | 30-60 s |

| RAM | 12 MB | 2-4 GB | 2-4 GB |

| Externí služby | 0 | H2/PG | PG/Tomcat |

| Formátů | 7 | 20+ | 30+ |

Pod zátěží (2 jádra, 4 GB RAM): pull 268 MB obrazu za 6 s, push za 19 s, RAM až 250 MB.

Nasazení a použití

Spuštění:

docker run -d \
  -p 8080:8080 \
  -v nora-data:/data \
  getnora/nora:0.5.0

Docker push:

docker login localhost:8080 -u admin
docker tag myapp:latest localhost:8080/myapp:latest
docker push localhost:8080/myapp:latest

npm:

npm config set registry http://localhost:8080/npm/
npm publish

Proxy upstream: automatické cache z Docker Hub, npmjs, PyPI, Maven Central.

Uzavřený okruh a zrcadlení

Pro izolované sítě: nora mirror --format docker --packages "nginx:latest" --output bundle na externím uzlu, přenos bundle, nora restore --input bundle uvnitř. Kontrola integrity přes SHA256.

Co je důležité

  • Jednotný binární soubor bez DB: 34 MB, 12 MB RAM, FS úložiště.
  • 7 formátů: Docker/OCI, Maven, npm, PyPI, Cargo, Go, raw.
  • Proxy upstream + cache, RBAC tokeny, audit logy.
  • Plán: online GC, multi-node, NuGet/RubyGems, OIDC.

— Editorial Team

Advertisement 728x90

Číst dál