millsks/django-python-generate-sbom
GitHub: millsks/django-python-generate-sbom
面向 Python 项目的自托管 Django 服务,解析依赖清单生成标准化 SBOM 并提供漏洞、许可证、依赖图与版本时效性分析报告。
Stars: 0 | Forks: 0
# django-python-generate-sbom
一个自托管的开源 Django Web 服务,它接收 Python 依赖清单并生成生产级的软件物料清单 (SBOM),支持标准格式(CycloneDX、SPDX),并提供四份分析报告:漏洞发现、许可证义务、依赖图和版本时效性——可通过 Web UI 和 REST API 获取。
[](https://github.com/millsks/django-python-generate-sbom/actions/workflows/ci.yml)
[](https://codecov.io/gh/millsks/django-python-generate-sbom)
[](https://sonarcloud.io/summary/new_code?id=millsks_django-python-generate-sbom)
[](https://github.com/millsks/django-python-generate-sbom/releases)
[](https://www.python.org/)
[](LICENSE)
[](https://millsks.github.io/django-python-generate-sbom/)
[](https://github.com/pre-commit/pre-commit)
[](https://github.com/astral-sh/ruff)
[](https://mypy-lang.org/)
[](https://conventionalcommits.org)
## 概述
将该服务指向一个 Python 依赖清单,它会解析完整的依赖树,生成已签署的 SBOM,并为其丰富四项分析,你可以通过 UI 浏览、导出为 Excel 或通过 REST API 获取。一切皆为多租户模式,并以你的组织为范围。
**功能:**
- **多格式 SBOM** — 支持从 `requirements.txt`(及其带前缀的变体)、`pyproject.toml`、`pixi.toml` / `pixi.lock` 和 conda `environment.yml` 生成 CycloneDX 和 SPDX,并解析传递依赖。
- **漏洞报告** — 包含已知安全通告(CVE/GHSA)及其严重性和 CVSS。
- **许可证合规** — 按法律风险等级分组的各包许可证。
- **依赖图** — 可视化展示直接与传递依赖关系。
- **版本时效性** — 已安装版本与最新版本对比、LTS 跟踪,并标记 conda-forge 最新版本(通过 prefix.dev)与 PyPI 不一致的情况。
- **应用内 SBOM 查看器** 和每份报告的 **Excel 导出**。
- **账户与组织** — 注册、组织切换、成员管理和 API 密钥;支持会话和 API 密钥认证。
- **异步流水线** — 包含 Celery 工作流、实时进度、MinIO 构件存储以及计划内保留/清理任务。
- **Web UI**(React 19 + MUI)和 **REST API**,从同一源提供服务。
## 文档
完整文档由 MkDocs Material 发布在
** **:
- **[用户指南](https://millsks.github.io/django-python-generate-sbom/user-guide/)**
— 账户、上传清单以及阅读每份报告。
- **[操作指南](https://millsks.github.io/django-python-generate-sbom/how-to/)**
— 面向任务的实践方案。
- **[开发者文档](https://millsks.github.io/django-python-generate-sbom/developer/)**
— 架构、本地设置、SBOM 流水线和测试。
- **[API 参考](https://millsks.github.io/django-python-generate-sbom/api/)**
— REST 端点。
## 截图
_Web UI 的截图将随 UI/视觉设计工作一同发布。_
## 架构
一个模块化的 Django 单体应用 (`backend/`),配备了 Celery 异步流水线,并由 React SPA (`frontend/`) 作为前端。**Pixi 是整个项目的统一工具链**:一个单一的根目录 `pixi.toml` 即可安装 Python 环境和 Node 运行时,并编排所有任务。
```
django-python-generate-sbom/ ← project root (pixi umbrella)
pixi.toml # Python env + Node runtime + all tasks
backend/ # Django + Celery
frontend/ # React + Vite SPA
Dockerfile # umbrella image (Python + Node); SPA baked in
docker-compose.yml # full local stack (web, workers, postgres, redis, minio)
```
## 快速开始
需要 [pixi](https://pixi.sh)。Node.js 和 Python 由 pixi 安装——无需单独设置工具链。
```
pixi install # installs Python + Node environments
pixi run bootstrap # installs the pre-commit git hooks
pixi run ci # full validation gate (build · type-check · lint · coverage · docs)
```
Docker 栈是运行整个应用程序最简单的方式——SPA 被构建到镜像中并由 Django 提供服务,因此无需启动单独的前端服务器:
```
cp .env.example .env # then edit SECRET_KEY (and any passwords) in .env
docker compose up --build # web, both Celery workers, beat, postgres, redis, minio
```
等待 `web` 服务状态正常后,打开:
| URL | 描述 |
|---|---|
| | Web UI (React SPA) |
| | Django 管理站点 |
| | 健康检查 (JSON) |
| | MinIO 控制台(使用 `.env` 中的 `MINIO_ROOT_USER` / `MINIO_ROOT_PASSWORD` 登录) |
然后 **注册** 于 `/register`(这将创建你的账户和个人组织),**登录** 于 `/login`,并 **上传** 清单于 `/upload`。所有 SBOM 数据都限定于你当前的活动组织。请参阅
[用户指南](https://millsks.github.io/django-python-generate-sbom/user-guide/)
获取完整操作流程。
要通过 `/admin/` 进入 Django 管理后台,请在正在运行的 `web` 容器中创建一个超级用户:
```
docker compose exec web pixi run python backend/manage.py createsuperuser
```
## 开发
所有任务均通过 `pixi run ` 从项目根目录运行:
| 任务 | 用途 |
|---|---|
| `fmt` · `lint` · `check` | 格式化、Lint 和类型检查后端 (ruff, mypy) |
| `test` · `test-integration` | 后端单元 / 集成测试 |
| `cov` | 包含 90% 覆盖率门槛的完整测试套件 |
| `fe-lint` · `fe-typecheck` · `fe-test` · `fe-build` | 前端 lint / 类型 / 测试 / 构建 |
| `docs-serve` · `docs-build` | 预览 / 构建文档站点 |
| `build` | 构建后端包发行版 |
| `ci` | 完整验证序列(合并门槛) |
在认为任何更改完成之前,`pixi run ci` 必须退出代码 0。请参阅
[开发者文档](https://millsks.github.io/django-python-generate-sbom/developer/)
和 [CONTRIBUTING.md](CONTRIBUTING.md) 了解完整工作流。
## 许可证
基于 [Apache License 2.0](LICENSE) 授权。
标签:CycloneDX, Django, Python, SBOM生成, SPDX, WebSocket, 依赖分析, 搜索引擎查询, 无后门, 测试用例, 网络测绘, 请求拦截, 逆向工具