fish-not-phish/siene

GitHub: fish-not-phish/siene

Siene 是一个轻量级可自托管的容器镜像仓库 UI,为中小团队提供项目管理、RBAC 访问控制、漏洞扫描、镜像签名与复制等原生 registry 所缺乏的企业级功能。

Stars: 0 | Forks: 0

Siene  **Siene** 一个面向中小型工程团队的可自托管 container registry UI。Siene 构建于 [Docker Distribution v3](https://github.com/distribution/distribution) 之上,并添加了原生 registry 所缺乏的项目管理、安全扫描和访问控制功能——同时避免了 Harbor 的运维复杂性。 ![](https://raw.githubusercontent.com/fish-not-phish/siene/main/frontend/public/screenshots/admin-dashboard.png) ![](https://static.pigsec.cn/wp-content/uploads/repos/cas/bf/bfab5621171e56722f00dc3a404edd3d3313d0e4a4af06f145421d6fbbc578ae.png) ## 功能 - **项目** - 命名空间隔离,支持按项目划分的存储配额以及公开/私有可见性 - **RBAC** - 每个项目包含四种角色:访客、开发者、维护者、管理员 - **Robot accounts** - 用于 CI/CD pipelines 的受限 service accounts - **个人访问令牌** - 用于 API 和 `docker login` 访问的 tokens - **多架构镜像** - 支持 manifest 列表(OCI index);每个平台子镜像均独立存储、扫描和显示;index tags 会显示一个包含各架构扫描状态的卡片 - **漏洞扫描** - push 时自动执行 Trivy 扫描;基于严重程度防止拉取;CVE 允许列表;为所有平台提供定时重新扫描 - **密钥和错误配置扫描** - push 时为每个平台自动执行;可配置的防拉取阈值 - **SBOM** - push 时自动生成 Syft SPDX;提供可浏览的包列表及许可证明细 - **镜像签名** - 支持 Cosign v2 和 Notation v1 验证,并可选择强制拉取 - **复制** - 支持配置针对 11 种远程 registry 提供商(包括 Docker Hub、GHCR、ECR、GCR、ACR、Harbor 和 JFrog)的 push/pull 规则 - **审计日志** - 记录每一次 push、pull、删除和管理员操作;支持过滤并可配置保留期 - **垃圾回收** - 定时或手动执行;移除孤立的 blobs 并强制执行 tag 保留规则 - **OIDC SSO** - 已通过 Keycloak、Authelia 和 Authentik 测试 - **深色和浅色主题** ## 要求 - Docker Engine 24+ - Docker Compose v2.24+ ### 系统规格 最低和推荐规格取决于是否启用了安全扫描。扫描是主要的资源消耗大户:Trivy 和 Syft 会在分析期间将每个 image layer 解压到内存中,因此峰值 RAM 会随着您所 push 的最大镜像的**未压缩**大小而变化——通常是您在磁盘上看到的压缩大小的 2 到 4 倍。 **未开启扫描(仅限 registry + UI)** | | 最低配置 | 推荐配置 | |---|---|---| | CPU | 2 核 | 4 核 | | RAM | 2 GB | 4 GB | | 磁盘 | 镜像存储 + 10 GB 额外开销 | 镜像存储 + 20 GB 额外开销 | **开启扫描** | 最大镜像(压缩后) | 扫描峰值 RAM | 推荐主机 RAM | |---|---|---| | 最高 200 MB(Alpine、slim 镜像) | ~1 GB | 4 GB | | 最高 500 MB(Debian/Ubuntu 应用) | ~2 GB | 6 GB | | 最高 1 GB(JVM、Node、Python 应用) | ~4 GB | 8 GB | | 最高 2 GB(数据科学、ML 镜像) | ~6 GB | 12 GB | | 最高 4 GB(PyTorch、CUDA、Spark) | ~10–12 GB | 16–24 GB | 扫描峰值 RAM 是指 Trivy 子进程的 RSS。同一时间仅运行一个扫描(`--concurrency 1`)。如果扫描超出可用内存,内核将对 worker container 执行 OOM-kill;Docker 会自动重启它(`restart: always`)。未确认的任务将在 1 小时的可见性超时后从 Redis 队列中重新分发并再次运行——但如果镜像对于可用 RAM 来说实在太大,它将在每次尝试时都被 OOM-kill。请为您的最大镜像设置足够大的 `mem_limit`,或者对于镜像超出您可用 RAM 的项目禁用扫描。 ## 部署 在仓库根目录下运行设置脚本: ``` ./setup.sh ``` 该脚本会询问部署模式、您的域名或 IP 以及您的时区,随后生成密钥并写入 `docker/.env`。 | 模式 | Compose 文件 | 适用场景 | |---|---|---| | Basic | `docker-compose.yml` | 局域网、评估或由外部处理 TLS | | Traefik | `docker-compose.traefik.yml` | 结合 Traefik 和 Cloudflare DNS 的生产环境 | | Nginx | `docker-compose.nginx.yml` | 结合您自己的 TLS 证书的生产环境 | ### 存储后端 | 后端 | 说明 | |---|---| | 文件系统 | 默认选项。镜像存储在命名的 Docker volume 中。无外部依赖。 | | S3 / 兼容 S3 的服务 | 支持 AWS S3、MinIO、Cloudflare R2 以及任何兼容 S3 的服务。 | ### 推送镜像 ``` docker login siene.example.com docker tag myimage:latest siene.example.com/myproject/myimage:latest docker push siene.example.com/myproject/myimage:latest ``` ## 注意事项 ### 首位用户为超级用户 ### NEXT_PUBLIC_BASE_URL 在构建时被固化 如果 `REGISTRY_EXTERNAL_URL` 在镜像构建完成后发生更改,请重新构建前端: ``` docker compose build frontend && docker compose up -d frontend ``` ### Token 颁发者一致性 ### Registry 证书卷
标签:DevSecOps, Docker, LLM防护, PyVis, SBOM管理, 上游代理, 安全防御评估, 容器镜像仓库, 搜索引擎查询, 漏洞探索, 版权保护, 签名验证, 自动化攻击, 请求拦截