Backstage 技术 FAQ 全解析:技术栈选型、插件架构、镜像构建与安全治理
Backstage 技术 FAQ 全解析技术栈选型、插件架构、镜像构建与安全治理【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage导读本文基于 Backstage 官方技术 FAQ 文档 docs/faq/technical.md系统梳理开发者在技术选型与架构认知阶段最常遇到的核心问题技术栈为何选 TypeScript React Node.js、插件机制如何运作、为什么插件不能通过配置动态安装、没有官方 Docker 镜像时如何用yarn build-image自建镜像、插件能否用 JavaScript 编写、安全性如何保障等。读完本文你将获得一套与仓库源码一一对应的、可直接落地实践的技术决策依据。一、Backstage 的技术栈TypeScript、React 与 Node.js核心技术选型Backstage 是一个大规模 TypeScript 框架其技术栈分为前后端两部分前端基于 React 与 Material UI 构建后端基于 Node.js 与 Express 框架。从当前仓库的包结构可以直观印证这一选型前端核心位于 packages/core-components、packages/frontend-plugin-api 等目录以tsx/ts为主内部大量使用 Material UI 组件后端核心位于 packages/backend-defaults、packages/backend-plugin-api 等目录以ts为主底层依赖 Express 提供 HTTP 服务。为什么选用 Material UIFAQ 给出的答案很直白Backstage 内部一直就在使用 Material UI。更深层的原因是Google Material Design 是一套完整、成熟的设计体系且生态中已有大量成熟的组件库与辅助库在能力、可定制性和易用性之间取得了良好平衡Backstage 的核心目标之一是让插件开发者以尽量少的阻碍投入生产Material UI 既让插件作者使用熟悉的通用技术又提供了庞大的现成组件库。从仓库看packages/ui 与 packages/core-components 中包含了大量基于 Material UI 封装的可复用组件而 packages/theme 负责主题定制这正是插件作者直接用成熟组件快速开发这一理念的落地。二、Backstage 中的三类用户角色与端到端使用流程FAQ 定义了 Backstage 的三种主要用户画像理解它们有助于明确各自的职责边界角色职责整合者Integrator托管 Backstage 应用配置应用内可用的插件贡献者Contributor通过编写插件为应用增加功能软件工程师Software Engineer使用应用的功能与插件交互端到端的幸福路径happy path是整合者搭建并配置应用 → 贡献者编写插件扩展功能 → 软件工程师使用插件完成日常工作。这一角色划分贯穿整个仓库backstage/create-app脚手架面向整合者packages/create-app/templates/default-app 是整合者的起点模板plugins 目录则是开源插件的集合由贡献者维护。三、插件机制Backstage 的功能单元什么是插件插件Plugin是 Backstage 提供功能的方式。它们用于将不同系统集成到 Backstage 前端中让开发者无论访问何种工具或服务都能获得一致的 UX。每个插件都被视为一个自包含的 Web 应用可以包含几乎任何类型的内容所有插件共用一套框架 API 和可复用的 UI 组件插件既可以从后端获取数据也可以通过代理Proxy暴露的 API 获取数据。源码级印证插件即独立包从 docs/plugins/structure-of-a-plugin.md 可以看到一个插件的标准目录结构包含package.json、src/plugin.ts、src/routes.ts等看起来就像一个迷你项目这正是为了支持插件作为独立 npm 包发布统一框架 API插件的定义入口是createPlugin与createRoutableExtension它们来自backstage/core-plugin-api对应仓库 packages/core-plugin-api前端新系统的插件定义则位于 packages/frontend-plugin-api数据获取链路FAQ 提到的代理对应配置中的proxy段。以应用模板 packages/create-app/templates/default-app/app-config.yaml.hbs 为例proxy.endpoints用于为前端添加代理端点典型用途是处理内部服务的 HTTPS 与 CORS后端则由backstage/plugin-proxy-backend提供实现。为什么不能用配置动态安装插件FAQ 明确指出这是 Backstage核心架构与开发流程的一部分原因有二插件的集成方式自由度极高插件在提供什么内容和如何集成进应用方面拥有很大自由若允许通过配置像集成代码那样集成插件会引入大量复杂度依赖共享与加载优化把所有插件及其依赖打包进同一个应用 bundle插件之间可以尽可能共享依赖从而显著优化应用加载时间——快是用户体验和开发者体验的重要组成部分。从仓库模板 packages/create-app/templates/default-app/packages/app/src/App.tsx 可以看出前端应用通过createApp({ features: [...] })以代码方式声明式地注册插件而后端模板 packages/create-app/templates/default-app/packages/backend/src/index.ts 通过createBackend()与backend.add(import(...))逐一注册后端插件。这正是用代码集成插件这一架构决策的直接体现。四、镜像构建与部署为什么没有官方 Docker 镜像原因Backstage 不是开箱即用的打包服务FAQ 解释Backstage 并不是一个可以开箱即用的打包服务要上手必须使用backstage/create-app包来创建并定制你自己的 Backstage 应用。正因如此上游不发布官方 Docker 镜像或 Helm chart。使用yarn build-image自建镜像在自己的应用中构建 Docker 镜像可以使用应用模板内置的yarn build-image命令。该命令默认会把前端与后端打包进同一个镜像供你用任意熟悉的工具部署。从仓库模板可以还原完整的构建链路根级脚本packages/create-app/templates/default-app/package.json.hbsbuild:backend: yarn workspace backend build, build-image: yarn workspace backend build-imagebackend 包脚本packages/create-app/templates/default-app/packages/backend/package.json.hbsbuild-image: docker build ../.. -f Dockerfile --tag backstageDockerfile 的构建前提packages/create-app/templates/default-app/packages/backend/Dockerfile构建镜像前需在仓库根目录依次执行yarn install --immutable yarn tsc yarn build:backend且宿主机构建步骤yarn install、yarn build:backend必须与FROM基础镜像使用相同的 Node 版本版本不匹配会破坏原生模块。Dockerfile 关键细节模板中的 Dockerfile 本身即可作为自建镜像的参考实现基础镜像为node:24-trixie-slim安装libsqlite3-dev以支持 sqlite3若镜像中不用 sqlite3 可跳过并应将better-sqlite3移入devDependencies切换到最小权限的node用户运行后端WORKDIR /app先复制skeleton.tar.gzmonorepo 中每个包的 package.json 骨架 yarn.lock 根 package.json以执行yarn workspaces focus --all --production避免不必要的 Docker 缓存失效再复制bundle.tar.gz与app-config*.yaml启动命令为CMD [node, packages/backend, --config, app-config.yaml, --config, app-config.production.yaml]注意启用 BuildKitDOCKER_BUILDKIT1确保应用目录以node用户创建否则tar解包会因权限问题失败。Kubernetes 部署示例FAQ 提到仓库的 contrib 目录提供了部署到 Kubernetes 的示例。当前仓库中对应路径为 contrib/kubernetes/basic_kubernetes_example_with_helm其中包含app.yaml、backend.yaml以及一个完整的 Helm chartbackstage/Chart.yaml可作为整合者部署自有镜像的起点。FAQ 同时说明未来可能会提供示例镜像用于快速体验 Backstage 的小部分功能但这类镜像不会比 demo 站点提供更多功能。五、插件开发语言必须用 TypeScript 吗FAQ 的回答是不需要你可以按偏好使用 JavaScript。Backstage 核心 API 保持 TypeScript 编写但不会强制插件也使用 TypeScript。这与仓库的实践一致核心包如 packages/core-plugin-api均以 TypeScript 编写并提供类型定义而插件层则允许使用 JS。如果你在编写插件前想确认某个插件是否已存在可以浏览 Plugin Directory插件目录搜索若找不到可在社区插件仓库的 issue 中搜索是否已有同类工作如果没有可以新建一个插件建议 issue 描述你的插件功能以避免重复造轮子。六、插件生态的维护与托管模式开源插件放在哪FAQ 明确贡献者可以把开源插件添加到本 monorepo 的 plugins 目录对应仓库 plugins 目录当前已有 api-docs、catalog、scaffolder、search、techdocs、kubernetes 等大量插件。整合者随后配置哪些开源插件在其应用实例中可用开源插件以 npm 包形式从开源仓库发布并被下载。闭源插件怎么办FAQ 同样支持闭源场景贡献者可以在他们自己的 Backstage 仓库的 plugins 目录中开发闭源插件整合者也可以在本地从 monorepo 配置闭源插件。即鼓励开源模型但允许内部实验与闭源。对其他代码托管平台的支持FAQ 提到 Backstage 选择 GitHub 是因为团队最熟悉该工具因此 GitHub 集成会较早开发但这并不排除对 GitLab、Bitbucket 等替代方案的集成——随着时间推移社区很可能会贡献这些工具的插件。同时Backstage 的实现可以托管在任何你认为合适的位置。七、维护、安全与数据治理谁在维护 BackstageSpotify 维护开源核心但项目不同部分由不同公司与贡献者共同维护同时期待一个庞大、多样化的开源插件生态由原作者/贡献者或社区维护。关于部署则由系统整合者通常是组织内的基础设施团队在自己的环境中维护 Backstage。仓库根目录的 OWNERS.md 体现了这种多角色治理结构。是否有商业/托管版本是的FAQ 指出存在多个商业合作伙伴提供托管版本、企业支持与咨询等服务。安全性如何保障FAQ 强调团队认真对待安全定期扫描仓库中的包与代码并将依赖包更新到最新版本。而组织内部的部署安全则取决于你所在组织的部署与安全设置。对于敏感安全问题建议通过 Spotify 的漏洞赏金计划报告而不是通过 GitHub。Backstage 会收集共享给 Spotify 的数据吗FAQ 明确回答不会。Backstage 不向使用该平台的任何第三方收集遥测数据。Spotify 与开源社区可以访问 GitHub Insights包含贡献者、提交、流量、依赖等信息但Backstage 是开源框架数据由你掌控——你可以控制谁有权访问你提供的数据以及数据与谁共享。能否用于构建开发者门户之外的东西FAQ 的回答是肯定的核心前端框架可用于构建任何大型 Web 应用前提是 (1) 多个团队分别构建应用的不同部分(2) 你希望整体体验保持一致。FAQ 同时提到项目的 Phase 2见 docs/overview/roadmap.md会加入开发者门户与管理软件生态系统所需的特性并保持 Backstage 的模块化。如何参与贡献FAQ 建议直接上手修复早期 bug 与 good first issues、编写开源插件、查看 CONTRIBUTING.md。仓库根目录还有 AGENTS.md、REVIEWING.md 等协作文档可供进一步了解。八、总结FAQ 背后的架构决策主线纵观全文Backstage 的技术 FAQ 实际上勾勒出了一条清晰的架构决策主线技术栈统一TypeScript 贯穿前后端React Material UI 保证插件 UI 的一致性与开发效率Node.js Express 提供轻量后端插件即代码插件是自包含的独立包通过代码而非配置集成以换取依赖共享与加载性能自托管部署不做官方镜像由整合者用yarn build-image构建前后端一体的镜像再借助 contrib 中的 Helm 示例部署到 Kubernetes开放且可控插件可开源可闭源数据归使用者所有安全由社区与整合者共同守护。如果你需要进一步了解 Backstage 的组成组件可继续阅读 docs/overview/what-is-backstage.md若关心产品层面的 FAQ如版本策略、Spotify 内部插件开源计划等可参考 docs/faq/product.md 与 docs/faq/index.md。【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考