Zurück zur Startseite

NORA Artefaktregister auf Rust ohne DB

NORA — leichtgewichtiges Artefaktregister auf Rust unterstützt 7 Formate ohne externe DBs. Größe 34 MB, RAM 12 MB, Upstream-Proxy und RBAC. Geeignet für CI/CD in isolierten Umgebungen.

NORA Artefaktregister auf Rust in 3 Sekunden erstellen
Advertisement 728x90

NORA: Minimalistisches Rust-Artifact-Registry ohne externe Abhängigkeiten

Ein Entwickler hat NORA entwickelt – eine einzelne Rust-Binärdatei zum Speichern von Artifacts in Docker v2/OCI, Maven, npm, PyPI, Cargo, Go und rohen Formaten. Mit nur 34 MB Größe, 12 MB RAM im Leerlauf und komplett ohne Datenbanken oder externe Dienste. Metadaten werden in JSON-Dateien auf der Festplatte gespeichert, Konsistenz durch atomare Umbenennungen gewährleistet. Out-of-the-Box-Unterstützung für S3-Backend, Prometheus-Metriken, Health-Checks und Swagger-Dokumentation.

Warum Nexus, Artifactory und Harbor abschaffen

Nexus OSS benötigt 4 GB RAM für seinen Java-Prozess, und Migrationen zwischen Versionen (Core/Community/Pro) sind ein Albtraum wegen des Wechsels von OrientDB zu PostgreSQL. Artifactory OSS beschränkt sich auf Maven/Gradle/Ivy; Docker- und npm-Unterstützung ist kostenpflichtig. Harbor fokussiert sich auf Container und vernachlässigt Maven, npm und PyPI. GitLab Registry hat Haken: OCI-Artifacts, buildx-Cache und Multi-Arch-Images erfordern Workarounds.

Zeit für Hacks überstieg den Aufwand für eine eigene Lösung.

Google AdInline article slot

No-DB, No-Web-Admin-Architektur

Alles liegt im Dateisystem: Artifacts und JSON-Metadaten nebeneinander. Der Katalog wird durch Durchsuchen der Verzeichnisse aufgebaut. Keine Migrationen, kein Clustering oder externe Dienste – startet in 3 Sekunden.

nora (34 MB, Rust, 450+ Tests)
├── /v2/       — Docker Registry v2 + OCI (Images, Helm-Charts)
├── /maven/    — Maven (JAR, WAR, POM)
├── /npm/      — npm (Node.js-Pakete)
├── /pypi/     — PyPI (Python-Pakete)
├── /cargo/    — Cargo (Rust-Crates, Sparse Index RFC 2789)
├── /go/       — Go Modules
├── /raw/      — Raw (beliebig)
├── /metrics   — Prometheus
├── /health    — K8s Liveness-Probe
├── /ready     — K8s Readiness-Probe
├── /api-docs  — Swagger
└── /data/     — Speicher (FS oder S3)

Konfiguration über config.toml oder Umgebungsvariablen. Read-only Web-UI zum Durchsuchen, Suchen und Anzeigen von Statistiken. Änderungen laufen über Git mit CI/CD-Audit.

Unterstützte Formate

  • Docker v2 + OCI: /v2/ — Images, Helm-Charts, volle Spezifikationskonformität.
  • Maven: /maven/ — JAR, WAR, POM mit Proxy zu Central.
  • npm: /npm/ — Node.js-Pakete, Sparse Index.
  • PyPI: /pypi/ — Python-Pakete.
  • Cargo: /cargo/ — Rust-Crates gemäß RFC 2789.
  • Go: /go/ — Modules mit Proxy zu proxy.golang.org.
  • Raw: /raw/ — Beliebige Dateien.

Authentifizierung und Sicherheit

  • htpasswd-Dateien für Basic Auth.
  • API-Token mit RBAC (Lesen/Schreiben/Admin), Token-Widerruf.
  • Anonymer Lesezugriff, TLS über Reverse Proxy (nginx/Traefik).

Extras:

Google AdInline article slot
  • Strukturierte JSON-Logs (Methode, Pfad, Status, Benutzer).
  • Rate Limiting pro Endpoint.
  • Audit-Log in JSONL.
  • GC: nora gc --dry-run für Docker-Blobs.
  • Backup/Wiederherstellung: nora backup -o file.tar.gz.

Leistungsvergleich

| Metrik | NORA | Nexus OSS | Artifactory |

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

| Binärgröße | 34 MB | 600+ MB | 1+ GB |

Google AdInline article slot

| Cold Start | ~3 Sek | 30-60 Sek| 30-60 Sek |

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

| Externe Dienste | 0 | H2/PG | PG/Tomcat |

| Formate | 7 | 20+ | 30+ |

Unter Last (2 Kerne, 4 GB RAM): Pull eines 268 MB Images in 6 Sek, Push in 19 Sek, RAM-Peak bei 250 MB.

Deployment und Nutzung

Schnellstart:

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

Upstream-Proxy: Automatische Zwischenspeicherung von Docker Hub, npmjs, PyPI, Maven Central.

Air-Gapped-Netzwerke und Mirroring

Für isolierte Umgebungen: nora mirror --format docker --packages "nginx:latest" --output bundle auf einem externen Knoten, Bundle übertragen, dann nora restore --input bundle intern. SHA256-Integritätsprüfungen.

Wichtige Erkenntnisse

  • Einzelne Binärdatei, keine DB: 34 MB, 12 MB RAM, Dateisystem-Speicher.
  • 7 Formate: Docker/OCI, Maven, npm, PyPI, Cargo, Go, Raw.
  • Upstream-Proxy + Cache, RBAC-Token, Audit-Logs.
  • Roadmap: Online-GC, Multi-Node, NuGet/RubyGems, OIDC.

— Editorial Team

Advertisement 728x90

Weiterlesen