# nbrew **Repository Path**: brenthub/nbrew ## Basic Information - **Project Name**: nbrew - **Description**: 企业内网软件分发平台。Go CLI + 守护进程 + 一行安装器 + 自建 tap/bottle 基础设施。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-03 - **Last Updated**: 2026-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # nbrew — 企业内网软件分发平台 [![Go Version](https://img.shields.io/badge/Go-1.24+-00ADD8?logo=go)](client/go.mod) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![CI](https://img.shields.io/badge/CI-passing-brightgreen)](.github/workflows/ci.yml) nbrew 是基于 [Homebrew](https://brew.sh) 的企业内网软件分发平台。它在 `brew install` 前后插入安全链(license 黑名单 → CVE 阈值 → GPG 签名 → SBOM SHA-256),将安装记录上报到中央资产平台,并提供离线审批流程,让企业安全合规团队能控制工作站上装什么。 ## 快速上手 ```bash # 工作站安装(需 sudo + curl + gpg) curl -fsSL https://releases.example.com/nbrew/install.sh | sudo bash -s -- \ --version v2.0.0 --prefix /tools/nbrew # 安装一个包 nbrew install node@18 # 查看已装列表 nbrew list # 搜索可用包 nbrew search python # 运行诊断 nbrew doctor ``` ## 架构 ``` ┌──────────────┐ brew install ┌──────────────────┐ │ workstation │ ─────────────────→ │ tap server │ │ nbrew CLI + │ git pull │ Gitea :13000 │ │ nbrewd 守护 │ ←──────────────── │ 4 个 repo: │ │ 进程 │ bottle fetch │ core/cask/... │ │ │ ─────────────────→ │ │ │ │ │ bottle registry│ │ │ ←──────────────── │ MinIO :9000 │ │ │ │ 2 个 bucket │ └──────────────┘ └──────────────────┘ ┌──────────────────┐ │ API │ ← 资产报告 / 心跳 │ nbrew-api │ → 策略下发 / CVE 同步 │ (外部服务) │ └──────────────────┘ ``` ## 仓库布局 ``` client/ ← 唯一 Go module(CLI + 守护进程) cmd/nbrew/ CLI 入口(cobra, 16 个子命令) cmd/nbrewd/ 守护进程入口(JSON-RPC 2.0 over Unix Socket) internal/ 13 个业务包(util/config/log/brew/security/...) Makefile build/test/lint/fmt/vet/install docs/ 设计文档 + release 文档 installer/ 一行安装器(9 阶段, GPG 验签) tap-server/ Gitea docker-compose(内部 Homebrew tap) bottle-registry/ MinIO docker-compose(预编译 bottle 仓库) .github/workflows/ CI: lint → test → integration → release ``` ## 快速命令 | 命令 | 用途 | |---|---| | `nbrew install ` | 安装(含安全链校验) | | `nbrew uninstall ` | 卸载 | | `nbrew search ` | 搜索 | | `nbrew list` | 已装列表 | | `nbrew info ` | 包详情 | | `nbrew update` | 刷新 tap | | `nbrew upgrade [formula]` | 升级(无参=全部) | | `nbrew doctor` | 诊断 | | `nbrew report` | 提交资产报告 | | `nbrew log` | 查看结构化日志 | | `nbrew version` | 版本信息 | | `nbrew config get/set ` | 读写配置 | ## 快速部署服务端 ```bash # 1. tap server(Gitea) cd tap-server cp .env.example .env # 修改 NBREW_GITEA_ADMIN_PASS docker compose up -d docker compose logs -f init # 等待 bootstrap 完成 # 2. bottle registry(MinIO) cd bottle-registry cp .env.example .env # 修改 MINIO_ROOT_PASSWORD docker compose up -d docker compose logs -f minio-init # 等待 bucket 创建 # 3. 验证 curl -fsS http://localhost:13000/api/healthz # Gitea curl -fsS http://localhost:9000/minio/health/live # MinIO ``` 部署文档详情见 [`docs/release/server-deployment.md`](docs/release/server-deployment.md)。 ## 命令行构建 ```bash cd client make build # → bin/nbrew + bin/nbrewd(CGO=0, 静态) make test # go test -short -race -cover ./... make vet # go vet ./... make fmt # gofmt -s ``` ## 文档 | 文档 | 说明 | |---|---| | [`docs/release/server-deployment.md`](docs/release/server-deployment.md) | 服务端部署(Gitea + MinIO + 备份) | | [`docs/release/client-usage.md`](docs/release/client-usage.md) | 客户端使用(安装/配置/15 个命令/守护进程/故障排查) | | [`docs/nbrew_架构设计文档_v2.0.md`](docs/nbrew_架构设计文档_v2.0.md) | 架构与子系统划分 | | [`docs/nbrew_LLM代码生成指南_v2.0.md`](docs/nbrew_LLM代码生成指南_v2.0.md) | 开发约束(退出码/日志/安全链/覆盖率) | | [`docs/nbrew_企业内网软件分发平台设计白皮书_v1.0.md`](docs/nbrew_企业内网软件分发平台设计白皮书_v1.0.md) | 设计白皮书 | | [`CHANGELOG.md`](CHANGELOG.md) | 版本历史 | ## 构建 - Go 1.24+ (CI 用 1.22 有版本错位,见 [AGENTS.md](AGENTS.md) §0) - 白名单三方库: `cobra`(CLI)、`zerolog`(日志)、`resty`(HTTP)、`jsonrpc2`(IPC)、`testify`(测试)、`pelletier/go-toml/v2`(配置解析)。**不引入新三方库** - 退出码: 0=ok / 1=通用 / 2=用法 / 3=未找到 / 4=brew / 5=安全 / 6=网络 / 7=守护进程 / 64+=自定义 - 核心包测试覆盖率 ≥70% - 所有 brew 子进程通过 `Setpgid` 隔离进程组,context 取消时不漏孤儿