getnora-io/nora
GitHub: getnora-io/nora
一个支持Docker、Maven、npm、PyPI、Cargo、Go等多种格式的轻量级私有制品仓库,单二进制文件运行、零依赖、内存占用低。
Stars: 36 | Forks: 3
# NORA
**随您成长的制品仓库。** 从 `docker run` 开始,扩展到企业级。
```
docker run -d -p 4000:4000 -v nora-data:/data ghcr.io/getnora-io/nora:latest
```
打开 [http://localhost:4000/ui/](http://localhost:4000/ui/) — 您的仓库已就绪。
nora
http://localhost:4000/maven2/
```
### npm
```
npm config set registry http://localhost:4000/npm/
npm publish
```
### Go 模块
```
GOPROXY=http://localhost:4000/go go get golang.org/x/text@latest
```
## 功能特性
- **Web UI** — 带有搜索、浏览、国际化的仪表板(支持 EN/RU)
- **代理与缓存** — 透明代理上游仓库并支持本地缓存
- **镜像 CLI** — 用于气隙环境的离线同步功能(`nora mirror`)
- **备份与恢复** — `nora backup` / `nora restore`
- **迁移** — `nora migrate --from local --to s3`
- **S3 存储** — MinIO、AWS S3、任意 S3 兼容后端
- **Prometheus 指标** — `/metrics` 端点
- **健康检查** — `/health`、`/ready` 用于 Kubernetes 探针
- **Swagger UI** — `/api-docs` 用于 API 探索
- **速率限制** — 可配置的按端点速率限制
- **FSTEC 构建** — 每次发布均包含 Astra Linux SE 和 RED OS 镜像
## 认证
NORA 支持 Basic Auth(htpasswd)和可撤销的 API 令牌,并提供 RBAC。
```
# 创建 htpasswd 文件
htpasswd -cbB users.htpasswd admin yourpassword
# 启用认证启动
docker run -d -p 4000:4000 \
-v nora-data:/data \
-v ./users.htpasswd:/data/users.htpasswd \
-e NORA_AUTH_ENABLED=true \
ghcr.io/getnora-io/nora:latest
```
| 角色 | 拉取/读取 | 推送/写入 | 删除/管理 |
|------|-----------|------------|--------------|
| `read` | 是 | 否 | 否 |
| `write` | 是 | 是 | 否 |
| `admin` | 是 | 是 | 是 |
请参阅[认证指南](https://getnora.dev/configuration/authentication/)了解令牌管理、Docker 登录和 CI/CD 集成。
## 配置
### 环境变量
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `NORA_HOST` | 127.0.0.1 | 绑定地址 |
| `NORA_PORT` | 4000 | 端口 |
| `NORA_STORAGE_MODE` | local | `local` 或 `s3` |
| `NORA_AUTH_ENABLED` | false | 启用认证 |
| `NORA_DOCKER_UPSTREAMS` | `https://registry-1.docker.io` | Docker 上游(`url|user:pass,...`) |
| `NORA_LOG_LEVEL` | info | 日志级别:trace、debug、info、warn、error |
| `NORA_LOG_FORMAT` | text | 日志格式:`text`(人类可读)或 `json`(结构化) |
| `NORA_PUBLIC_URL` | — | 用于重写制品链接的公共 URL |
请参阅[完整配置参考](https://getnora.dev/configuration/settings/)了解所有选项。
### config.toml
```
[server]
host = "0.0.0.0"
port = 4000
[storage]
mode = "local"
path = "data/storage"
[auth]
enabled = false
htpasswd_file = "users.htpasswd"
[docker]
proxy_timeout = 60
[[docker.upstreams]]
url = "https://registry-1.docker.io"
[go]
proxy = "https://proxy.golang.org"
```
## CLI 命令
```
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
nora mirror # Sync packages for offline use
```
## 端点
| URL | 描述 |
|-----|-------------|
| `/ui/` | Web UI |
| `/api-docs` | Swagger UI |
| `/health` | 健康检查 |
| `/ready` | 就绪探针 |
| `/metrics` | Prometheus 指标 |
| `/v2/` | Docker 仓库 |
| `/maven2/` | Maven |
| `/npm/` | npm |
| `/cargo/` | Cargo |
| `/simple/` | PyPI |
| `/go/` | Go 模块 |
## TLS / HTTPS
NORA 提供纯 HTTP 服务。请使用反向代理来处理 TLS:
```
registry.example.com {
reverse_proxy localhost:4000
}
```
请参阅 [TLS / HTTPS 指南](https://getnora.dev/configuration/tls/)了解 Nginx、Traefik 和自定义 CA 的配置。
## 性能
| 指标 | NORA | Nexus | JFrog |
|--------|------|-------|-------|
| 启动时间 | < 3s | 30-60s | 30-60s |
| 内存占用 | < 100 MB | 2-4 GB | 2-4 GB |
| 镜像大小 | 32 MB | 600+ MB | 1+ GB |
[查看 NORA 与其他仓库的对比](https://getnora.dev)
## 路线图
- **镜像 CLI** — 用于气隙环境的离线同步
- **OIDC / 工作负载身份** — GitHub Actions、GitLab CI 的无密钥认证
- **在线垃圾回收** — 无需仓库停机的非阻塞清理
- **保留策略** — 声明式规则:保留最近 N 个标签、删除超过 X 天的镜像
- **镜像签名** — cosign 验证和策略执行
请参阅 [CHANGELOG.md](CHANGELOG.md) 了解发布历史。
## 安全与信任
[](https://scorecard.dev/viewer/?uri=github.com/getnora-io/nora)
[](https://www.bestpractices.dev/projects/12207)
[](https://github.com/getnora-io/nora/actions/workflows/ci.yml)
[](https://github.com/getnora-io/nora/actions)
- **签名发布** — 每次发布均使用 [cosign](
标签:ArgoCD, artifact registry, Cargo 仓库, Docker Registry, Go Modules, Helm Chart, LangChain, Maven 仓库, NIDS, npm 私有仓库, OCI 镜像, PyPI 私有仓库, SOC Prime, 制品仓库, 包管理, 单二进制, 可视化界面, 容器化, 容器镜像仓库, 开发工具, 私有仓库, 请求拦截, 轻量级, 通知系统, 镜像缓存, 零依赖