DevITWay 6c18230072 fix: add ConnectInfo for rate limiter IP extraction
PeerIpKeyExtractor requires SocketAddr from ConnectInfo to
extract client IP. Without this, rate limiting fails with
"Unable To Extract Key!" error in Docker containers.
2026-01-26 07:25:58 +00:00

NORA

License: MIT Telegram

Your Cloud-Native Artifact Registry

Fast. Organized. Feel at Home.

10x faster than Nexus | < 100 MB RAM | 32 MB Docker image

Features

  • Multi-Protocol Support

    • Docker Registry v2
    • Maven repository (+ proxy to Maven Central)
    • npm registry (+ proxy to npmjs.org)
    • Cargo registry
    • PyPI index
  • Storage Backends

    • Local filesystem (zero-config default)
    • S3-compatible (MinIO, AWS S3)
  • Production Ready

    • Web UI with search and browse
    • Swagger UI API documentation
    • Prometheus metrics (/metrics)
    • Health checks (/health, /ready)
    • JSON structured logging
    • Graceful shutdown
  • Security

    • Basic Auth (htpasswd + bcrypt)
    • Revocable API tokens
    • ENV-based configuration (12-Factor)

Quick Start

docker run -d -p 4000:4000 -v nora-data:/data getnora/nora

From Source

cargo install nora-registry
nora

Open http://localhost:4000/ui/

Usage

Docker Images

# Tag and push
docker tag myapp:latest localhost:4000/myapp:latest
docker push localhost:4000/myapp:latest

# Pull
docker pull localhost:4000/myapp:latest

Maven

<!-- settings.xml -->
<server>
  <id>nora</id>
  <url>http://localhost:4000/maven2/</url>
</server>

npm

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

CLI Commands

nora              # Start server
nora serve        # Start server (explicit)
nora backup -o backup.tar.gz
nora restore -i backup.tar.gz
nora migrate --from local --to s3

Configuration

Environment Variables

Variable Default Description
NORA_HOST 127.0.0.1 Bind address
NORA_PORT 4000 Port
NORA_STORAGE_MODE local local or s3
NORA_STORAGE_PATH data/storage Local storage path
NORA_STORAGE_S3_URL - S3 endpoint URL
NORA_STORAGE_BUCKET registry S3 bucket name
NORA_AUTH_ENABLED false Enable authentication

config.toml

[server]
host = "0.0.0.0"
port = 4000

[storage]
mode = "local"
path = "data/storage"

[auth]
enabled = false
htpasswd_file = "users.htpasswd"

Endpoints

URL Description
/ui/ Web UI
/api-docs Swagger UI
/health Health check
/ready Readiness probe
/metrics Prometheus metrics
/v2/ Docker Registry
/maven2/ Maven
/npm/ npm
/cargo/ Cargo
/simple/ PyPI

Performance

Metric NORA Nexus JFrog
Startup < 3s 30-60s 30-60s
Memory < 100 MB 2-4 GB 2-4 GB
Image Size 32 MB 600+ MB 1+ GB

Author

Created and maintained by DevITWay

Contributing

NORA welcomes contributions! See CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE

Copyright (c) 2026 DevITWay


NORA - Organized like a chipmunk's stash | Built with Rust by DevITWay

Languages
Rust 95%
Shell 3.2%
TypeScript 1.6%
Dockerfile 0.2%