初探 Backstage:快速上手指南

news2024/11/17 21:55:13

坦白说,虽然我之前阅读过相关文档,但实际上从未亲自尝试运行 Backstage。我一直有种感觉,Backstage 不过是一个开发者门户而非开发者平台。上周在 分享我对平台工程的理解 后,朋友圈中有人提议我写一篇关于 Backstage 入门的文章。这激起了我的好奇心,我决定深入探究一下 Backstage 究竟是什么。

Backstage 简介

Backstage 是一个用于构建开发人员门户的开放平台,统一了所有基础设施工具、服务和文档,以创建端到端的简化开发环境,由 Spotify 开源并捐赠给 CNCF。Backstage 提供了开箱即用的几个核心功能:

软件目录

软件目录(Software Catalog)是一个集中式系统,用于跟踪生态系统中所有软件(服务、网站、库、数据管道等)的所有权和元数据。开发人员提供软件的实体信息,Backstage 根据实体的信息与已有实体建立关联,并生成最终版本的软件实体保存在目录中。

从 Backstage 仓库的软件目录示例中可以找到 多种类型的实体定义。

软件模板

软件模板 (Software Template)是一个可以帮助开发在 Backstage 中创建组件的工具。默认情况下,它能够加载代码骨架、带有变量中的模板,然后将模板发布到某些位置,例如 GitHub 或 GitLab。

技术文档

技术文档(TechDocs) 是 Spotify 自行开发的直接内置于 Backstage 中的类文档代码解决方案。开发人员在与代码一起存在的 Markdown 文件中编写文档 - 只需很少的配置即可在 Backstage 中获得一个漂亮的文档站点。

插件支持

插件支持(Plugins)Backstage 本身是一个由一组插件组成的单页面应用程序,通过插件平台开发人员可以将几乎任何类型的基础设施或软件开发工具作为 Backstage 中的功能公开。

我觉得插件是 Backstage 的最大亮点,通过 插件生态系统 极大增强的可定制性,目前 Backstage 有 5 个核心插件以及近 200 个第三方插件。

要运行 Backstage 可以直接在本地运行,也可以进行容器化部署。

本地运行

为了在本地运行 Backstage,需要 NodeJS 18、yarn 1.22 和 npx 环境。以下是启动 Backstage 的步骤:

创建 Backstage App

执行下面的命令,并根据提示输入应用名创建 Backstage 应用。也可以使用 我创建的。

npx @backstage/create-app@latest

默认情况下,本地运行使用 better-sqlite3 来作为软件目录的存储。启动之前需要执行下面的命令

npm rebuild better-sqlite3

启动 Backstage

之后就可以执行 yarn dev 启动 Backstage,在浏览器中打开 http://localhost:3000 就能访问 Backstage 了。

当然 Backstage 也支持数据库进行持久化,比如 PostgreSQL。可以在 app-config.yaml 中,将数据库配置为下面:

backend:
  database:
    # client: better-sqlite3
    # connection: ':memory:'  
    client: pg
    connection:
      host: ${POSTGRES_SERVICE_HOST}
      port: ${POSTGRES_SERVICE_PORT}
      user: ${POSTGRES_USER}
      password: ${POSTGRES_PASSWORD}

修改配置后,添加环境变量并重新执行命令。

export POSTGRES_SERVICE_HOST=127.0.0.1 
export POSTGRES_SERVICE_PORT=5432 
export POSTGRES_USER= backstage 
export POSTGRES_PASSWORD=backstage
yarn dev

添加软件实体

我在已有的一个 Java 项目中,添加了 catalog-info.yaml 并添加了软件实体信息。

在软件目录的页面上依次点击 CREATEREGISTER EXISTING COMPONENT,在表单中填入上面的 catalog-info.yaml 的地址 https://github.com/addozhang/tekton-demo/blob/main/catalog-info.yaml,然后点击 ANALYZEIMPORT

此时就可以看到导入的实体信息以及根据信息创建的组件关系。

除了展示软件的信息,我们希望对项目进行构建。我提前为其添加了一个 GitHub 工作流,接下来看看如何在 Backstage 上进行构建。

配置 CI/CD

此时如果打开 CI/CD 卡片,可以弹窗要求对 Backstage 进行授权允许其访问 GitHub 仓库。由于配置认证提供这,会看到如下错误。

在 GitHub 开发者设置 中填入信息创建一个应用:

  • 应用程序名称:Backstage(或者其他名字)
  • 主页网址:http://localhost:3000
  • 授权回调 URL:http://localhost:7007/api/auth/github/handler/frame

创建成功后,可以获取 CLIENT_IDCLIENT_SECRET

修改 Backstage 的配置文件 app-config.yaml,添加配置:

auth:
  environment: development
  providers:
    github:
      development:
        clientId: ${AUTH_GITHUB_CLIENT_ID}
        clientSecret: ${AUTH_GITHUB_CLIENT_SECRET}

其中

export POSTGRES_SERVICE_HOST=127.0.0.1 
export POSTGRES_SERVICE_PORT=5432 
export POSTGRES_USER= backstage 
export POSTGRES_PASSWORD=backstage
export AUTH_GITHUB_CLIENT_ID=e1c1fc80ec2014c91543
export AUTH_GITHUB_CLIENT_SECRET=0641e5e5af60c485a03f19f8bf63218d06ab7876
yarn dev

Kubernetes 上运行

首先要有个 K8s 集群。在 Kubernetes 上我们这次使用 PostgreSQL 作为持久化存储。

kubectl create namespace backstage
部署 PostgreSQL

创建 Secret 用于配置 PostgreSQL 的认证信息。

kubectl apply -n backstage -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: postgres-secrets
type: Opaque
data:
  POSTGRES_USER: YmFja3N0YWdl
  POSTGRES_PASSWORD: YmFja3N0YWdl
EOF

使用本地磁盘创建 PVC 和 PVC。

kubectl apply -n backstage -f - <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-storage
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 2G
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: '/mnt/data'
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-storage-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2G
EOF

部署 PostgreSQL。

kubectl apply -n backstage -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backstage
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backstage
  template:
    metadata:
      labels:
        app: backstage
    spec:
      containers:
        - name: backstage
          image: addozhang/backstage
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 7007
          envFrom:
            - secretRef:
                name: postgres-secrets
            - secretRef:
                name: github-oauth-secrets          
---
apiVersion: v1
kind: Service
metadata:
  name: backstage
spec:
  selector:
    app: backstage
  ports:
    - name: http
      port: 80
      targetPort: http
EOF

配置 GitHub OAuth 认证信息

kubectl apply -n backstage -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: github-oauth-secrets
type: Opaque
data:
  AUTH_GITHUB_CLIENT_ID: <CLIENT_ID base64>
  AUTH_GITHUB_CLIENT_SECRET: <CLIENT_SECRET base64>
EOF

部署 Backstage

kubectl apply -n backstage -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backstage
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backstage
  template:
    metadata:
      labels:
        app: backstage
    spec:
      volumes:
        - name: config-volume
          configMap:
            name: bs-app-config
            items:
              - key: "app-config.production.yaml"
                path: "app-config.production.yaml"
      containers:
        - name: backstage
          image: addozhang/backstage:latest
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 7007
          envFrom:
            - secretRef:
                name: github-oauth-secrets
            - secretRef:
                name: postgres-secrets
---
apiVersion: v1
kind: Service
metadata:
  name: backstage
spec:
  selector:
    app: backstage
  ports:
    - name: http
      port: 80
      targetPort: http
EOF

访问 Backstage 页面 http://localhost:7077

kubectl port-forward --namespace=backstage svc/backstage 7007:80

总结

通过这篇文章,我们了解了 Backstage 的基本概念和如何在不同环境中运行它。

我认为,Backstage 更适合被定义为一个开发者门户而不是一个全面的开发者平台。它本质上是一个灵活的框架,而非一个即开即用的全套解决方案。为了充分发挥其潜力,平台团队需要深入了解开发人员的需求,并通过引入或开发专门的插件来定制 Backstage,从而实现真正的自服务能力。

此外,Backstage 并不意味着要取代 DevOps。事实上,DevOps 更多是一种文化和实践理念,而非具体的工具。Backstage 的框架加插件的组合方式,实际上是为了解决 DevOps 实践中遇到的具体挑战,尤其是在其落地实施的最后阶段。

总之,Backstage 为开发者提供了一个强大而灵活的工具集,通过集成多样的功能和服务,帮助团队更好地实现 DevOps 理念,提升开发效率和项目管理的效能。

关注"云原生指北"微信公众号 (转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1417973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[BUUCTF 2018]Online Tool(特详解)

这段代码块检查请求中是否设置了HTTP_X_FORWARDED_FOR头部。如果设置了&#xff0c;它将REMOTE_ADDR设置为HTTP_X_FORWARDED_FOR的值。这通常用于处理Web服务器位于代理后面的情况。 如果URL中未设置host参数&#xff0c;它使用highlight_file(__FILE__);来显示PHP文件的源代码…

OpenCV实战:控制手势实现无触摸拖拽功能

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用OpenCV来控制手势&#xff0c;瞬间提升操作体验&#xff01;跨越界限&#xff0c;OpenCV手势控制拖拽功能现身。 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验&#xff0c;主要步骤如下…

Django模型(三)

一、1对1关系映射 关系型数据库的强大之处在于各表之间的关联关系。 Django 提供了定义三种最常见的数据库关联关系的方法&#xff1a;多对一&#xff0c;多对多&#xff0c;一对一 一对一关联使用 OneToOneField来定义一对一关系 就像使用其他类型的 Field 一样&#xff1a;…

共享wifi项目怎么分辨是正规还是割韭菜?!

早在前几年数字化经营火热的时候微火就在尝试一种共享方式可以让用户在公共场所可以快捷的免费体验WiFi从而提升实体商户数字化服务&#xff0c;所以就研发出了共享wifi贴项目&#xff0c;而用户则需要扫码即可连接&#xff0c;无需传统的咨询人员输入密码。这种模式在一定程度…

Idea编写mapper.xml文件提示表名和字段

一、连接database 二、setting- > language -> sql Dialects中 的选项设为 mysql就可以了 三、测试

后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinstall来统一包管理工具。 1.1 环境准备 1…

百度百家号旋转验证码识别代码分享

最近研究了一下图像识别&#xff0c;一直找到很好的应用场景&#xff0c;今天我就发现可以用百度的旋转验证码来做一个实验。没想到效果还挺好&#xff0c;下面就是实际的识别效果。 1、效果演示 2、如何识别 2.1准备数据集 首先需要使用爬虫&#xff0c;对验证码图片进行采…

ES实战回顾

1、你用的集群节点情况&#xff1f; 一个ES集群&#xff0c;18个节点&#xff0c;其中3个主节点&#xff0c;15个数据节点&#xff0c;500G左右的索引数据量&#xff0c;没有单独的协调节点&#xff0c;它的每个节点都可以充当协调功能&#xff1b; 2、你们常用的索引有哪些&a…

SQL注入的剩余类型

除了联合查询注入&#xff0c;报错注入&#xff0c;盲注注入 sql注入还有以下几类&#x1f9b9;&#x1f9b9;&#x1f9b9;&#x1f9b9;&#x1f9b9; 开始填坑 1.UA注入 原理&#xff1a;有些网站会把用户的UA信息写入数据库&#xff0c;用来收集和统计用户…

回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测

回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测 目录 回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSSVM【24年…

【JaveWeb教程】(35)SpringBootWeb案例之《智能学习辅助系统》登录功能的详细实现步骤与代码示例(8)

目录 案例-登录和认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试 案例-登录和认证 在前面的课程中&#xff0c;我们已经实现了部门管理、员工管理的基本功能&#xff0c;但是大家会发现&#xff0c;我们并没有登录&#xff0c;就直接访问到了Tlias智能…

Python tkinter (6) —— Listbox控件

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 Python tkinter (5) 选项按钮与复选框 目录…

LeetCode(2)

目录 概念解释 栈 队列 树 树的概念 结点的分类 有序树 无序树 森林 二叉树 满二叉树 完全二叉树 二叉排序树 平衡二叉树 1.用栈实现队列 解法&#xff1a;双栈 2.字符串解码 解法&#xff1a;栈 3.二叉树的中序遍历 解法一&#xff1a;递归 解法二&#xff…

【干货】【常用电子元器件介绍】【电容】(一)--电容器的种类、命名方法、识别

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。   顾名思义,电容器就是“储存电荷的容器”,故电容器具有储存一定电荷的能力。就像 一般容器可以装水(或漏水),电容器可以充电(Charge)或放电(Discharge)。…

麒麟系统安装minio_centos8.0安装最新minio_离线安装minio并设置权限_创建桶---minio工作笔记001

https://www.minio.org.cn/?id=18&id=3&id=0&id=11&id=9&spinz=qianfeng&adinfo678=baidu&spinz=qianfeng&adinfo678=baidu%3E 首先去到官网去下载minio,然后 可以看到已经显示的官网,然后再去,右边点击下载 进入下载页面一般都是amd64的版本…

世界坐标系转换为平面地图坐标

将世界坐标系转换为平面地图坐标的方法通常涉及地图投影。地图投影是一种将地球&#xff08;一个三维球体&#xff09;上的点转换为平面&#xff08;二维&#xff09;地图上的点的方法。 这里介绍几种常见的地图投影方法&#xff1a; 墨卡托投影&#xff08;Mercator Projectio…

Phoncent博客GPT写作工具

对于许多人来说&#xff0c;写作并不是一件轻松的事情。有时候&#xff0c;我们可能会遇到写作灵感枯竭、写作思路混乱、语言表达困难等问题。为了解决这些问题&#xff0c;Phoncent博客推出了一款创新的工具——GPT写作工具&#xff0c;它利用了GPT技术&#xff0c;为用户提供…

Open CASCADE学习|读取STEP文件并显示

STEP文件是基于ISO 10303标准创建的三维模型数据交换文件&#xff0c;也称为产品模型数据交换标准&#xff08;Standard Exchange of Product data model&#xff09;。这种文件格式旨在提供一个不依赖具体系统的中性机制&#xff0c;实现产品数据的交换和共享。 STEP文件是一…

烟台莱州市事业单位报名流程及照片审核处理方法图文详解

烟台莱州市的事业单位招聘考试一直是众多求职者关注的焦点&#xff0c;今年也不例外。随着招聘季的到来&#xff0c;烟台莱州市的事业单位报名工作已经正式启动。对于有意向加入莱州市事业单位的朋友们来说&#xff0c;这是一个不容错过的机会。小编已经为大家精心准备了详细的…

写静态页面——魅族导航_前端页面练习

0、效果&#xff1a; 1、html代码&#xff1a;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…