热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Backstage架构介绍

本文介绍如何基于Backstage搭建工程项目。一、BackstageBackstage是一个用于构建开发人员门户的开放平台。在集中式软件目录的支持下,Backstage可以恢复您

本文介绍如何基于Backstage搭建工程项目。


一、Backstage

Backstage是一个用于构建开发人员门户的开放平台。在集中式软件目录的支持下,Backstage 可以恢复您的微服务和基础架构的秩序,并使您的产品团队能够快速交付高质量的代码——而不会影响自主性。

Backstage 统一了您所有的基础架构工具、服务和文档,以创建一个端到端的简化开发环境。

Backstage架构由三部分构成:



  • 核心 - 由核心开发人员在开源项目中构建的基本功能。

  • 应用程序 - 该应用程序是部署和调整的 Backstage 应用程序的一个实例。该应用程序将核心功能与附加插件联系在一起。应用程序由应用程序开发人员构建和维护,通常是公司内的生产力团队。

  • 插件 - 使您的 Backstage 应用程序对您的公司有用的附加功能。插件可以是特定于公司的,也可以是开源的和可重用的。

该架构中有 3 个主要组件:



  1. 核心后台 UI

  2. UI 插件及其支持服务

    3.数据库(Knex)

架构图例子:


一、创建Backstage应用


1、创建应用的前预装的依赖



  • 安装window版本的python39

  • yarn配置连接python的应用路径

yarn config set python C:\Users\xuchunyang\AppData\Local\Programs\Python\Python39

2、创建backstage-app应用

(1)输入创建命令:

npx @backstage/create-app

(2)填写应用名称和选择数据库(SQLite、PostgreSQL)

(3)运行工程app

cd my-backstage-app
yarn dev

会自动打开 http://localhost:3000 查看工程


2、工程目录结构

app
├── app-config.yaml
├── catalog-info.yaml
├── lerna.json
├── package.json
└── packages
├── app
└── backend
└── plugins
└── plugin

(1)app-config.yaml-项目的配置文件,核心文件

主要是前端工程app、后端工程backend和插件plugin的配置文件,详细配置见文档:https://backstage.io/docs/conf/

可配置不同环境的yaml,例如:app-config.production.yaml,只配置生产信息覆盖启动:

yarn start --config ../../app-config.yaml --config ../../app-config.production.yaml

通过框架提供的api项目中获取配置的方法:

import { useApi, configApiRef } from '@backstage/core-plugin-api';
const configApi: any = useApi(configApiRef);

(2)catalog-info.yaml——当前工程的配置文件



  1. 工程默认实体类型:Component、Template、API、Group、User、Resource、System、Domain、Location

    对应类型配置规范参考:https://backstage.io/docs/features/software-catalog/descriptor-format

    2.可自定义创建增加实体类,自定义配置文件的字段,参考文档:https://backstage.io/docs/features/software-catalog/extending-the-model

(3)lerna.json——管理包工具配置文件

lerna:是一个管理工具,用于管理包含多个软件包(package)的 Javascript 项目

(4)package.json——工程配置文件

管理工程依赖包,可执行命令更新backstage相关依赖到最新版本:

yarn backstage-cli versions:bump

更新介绍详细见:https://backstage.io/docs/getting-started/keeping-backstage-updated#updating-backstage-versions-with-backstage-cli

(5)packages/app——前端工程react框架



  1. 以typescript+react的前端架子工程项目

  2. 组件库使用框架原生组件库@backstage/core-components,该组件库是在material-ui做封装,所以底层是material-ui组件库,项目中可以直接使用material-ui

  3. 项目样式使用material-ui的CSS-in-JS方案,详细介绍见:https://mui.com/zh/styles/basics/

  4. 可切换主体风格

(6)packages/backend——后端工程express框架

参考express API参考文档:https://www.expressjs.com.cn/4x/api.html

(7)plugins——backstage的插件



  1. 可接入官方提供的插件:https://backstage.io/plugins

  2. 接入自定义创建插件


二、插件

Backstage 是由一组插件组成的单页应用程序。

官方对插件的定义是:对插件生态系统的目标是插件的定义足够灵活,允许您将几乎任何类型的基础设施或软件开发工具作为 Backstage 中的插件公开。通过遵循强大的 设计指南,我们确保插件之间的整体用户体验保持一致。

(1)官方提供插件plugins,

引入方案参考每个插件的接入文档

(2)创建前端插件

根目录下执行命令:

yarn create-plugin

创建会提示输入插件名,输入名称后框架会自动生成插件,下载依赖包,自动引入到app工程内,执行命令:

cd plugins/my-plugin
yarn start or yarn dev

自动启动:http://localhost:3000/my-plugin 可在网页查看插件

(3)创建后端插件

根目录下执行命令:

yarn create-plugin --backend

创建会提示输入插件名,输入名称后框架会自动生成插件,下载依赖包,自动引入到backend工程内,执行命令:

cd plugins/carmen-backend
yarn start or yarn dev
curl localhost:7007/carmen/health

在backend的插件中可以定义接口和查询数据库等后端功能


三、API

1、backstage的插件力求自成一体,尽可能多的功能驻留在插件本身及其后端API中。然而,插件总是需要在其边界之外与其他插件和应用程序本身进行通信。

2、使用API

import React from 'react';
import { useApi, errorApiRef } from '@backstage/core-plugin-api';
export const MyCompOnent= () => {
const errorApi = useApi(errorApiRef);
// Signal to the app that something went wrong, and display the error to the user.
const handleError = error => {
errorApi.post(error);
};
// the rest of the component ...
};

3、官方提供了很多API能力,详细见文档https://backstage.io/docs/reference/


四、Auth

Backstage 中的身份验证可识别用户,并为插件提供一种方式来代表用户向第三方服务发出请求。Backstage 可以有零个(来宾访问)、一个或多个身份验证提供程序。默认 @backstage/create-app模板使用访客访问来轻松启动。

官方提供了几种登录方式:



  • Auth0

  • Azure

  • GitHub

  • GitLab

  • Google

  • Okta

  • OneLogin

例如接入Gitlab:



  1. gitlab配置



  • Name: 名称

  • Redirect URI: http://localhost:7007/api/auth/gitlab/handler/frame

  • Scopes: read_user

app-config.yaml文件配置

auth:
environment: development
providers:
gitlab:
development:
clientId: ${AUTH_GITLAB_CLIENT_ID}
clientSecret: ${AUTH_GITLAB_CLIENT_SECRET}
## uncomment if using self-hosted GitLab
# audience: https://gitlab.company.com

src/app.tsx文件引入

import { githubAuthApiRef } from '@backstage/core-plugin-api';
import { SignInProviderConfig, SignInPage } from '@backstage/core-components';
const githubProvider: SignInProviderCOnfig= {
id: 'github-auth-provider',
title: 'GitHub',
message: 'Sign in using GitHub',
apiRef: githubAuthApiRef,
};
const app = createApp({
apis,
components: {
SignInPage: props => (
{...props}
auto
provider={githubProvider}
/>
),
},
bindRoutes({ bind }) {

五、接口文档

参考页面显示样式:



  • http://backstage.test.swifer.co/catalog/default/api/backstage-app-apis/definition

  • https://demo.backstage.io/api-docs?filters[kind]=api&filters[user]=all

参考接口文档定义:



  • https://gitlab.swifer.co/fbu-public/devops/backstage-config/-/edit/master/apis/fbu-public/devops/backstage-app-apis.yaml


六、技术文档

使用TechDocs插件,可以与代码一起存在的 Markdown 文件中编写的文档。

接入文档:https://backstage.io/docs/features/techdocs/getting-started

工程的Dockerfile增加命令:

RUN apt-get update && apt-get install -y python3 python3-pip

RUN pip3 install mkdocs-techdocs-core==0.2.1

本地运行文档可以装python3和mkdocs-techdocs-core:

pip3 install mkdocs-techdocs-core==0.2.1

官方示例:https://demo.backstage.io/docs/default/component/backstage


七、搜索能力

Backstage Search 可让您在 Backstage 生态系统中找到您正在寻找的正确信息。

支持:



  • Lunr ✅

  • ElasticSearch ✅

  • Postgres ✅

支持工程实体搜索和技术文档关键字搜索(目前支持英文搜索)

接入文档:

https://backstage.io/docs/features/search/how-to-guides

packages/backend/src/plugins/search.ts增加文档引入:

import { DefaultTechDocsCollator } from '@backstage/plugin-techdocs-backend';
indexBuilder.addCollator({
defaultRefreshIntervalSeconds: 600,
collator: DefaultTechDocsCollator.fromConfig(config, {
discovery,
logger,
tokenManager,
}),
});

packages/app/src/components/search/SearchPage.tsx增加搜索类型:


values={['techdocs', 'software-catalog']}
name="type"
defaultValue="software-catalog"
/>
...


八、发布

1、packages/backend/Dockerfile

增加配置:

# This dockerfile builds an image for the backend package.
# It should be executed with the root of the repo as docker context.
#
# Before building this image, be sure to have run the following commands in the repo root:
#
# yarn install
# yarn tsc
# yarn build
#
# Once the commands have been run, you can build the image using `yarn build-image`
FROM docker.repo.swifer.co/sp_library/node:14-buster-python-b02
RUN yarn config set python /usr/bin/python3
# && npm config set registry https://repo.swifer.co/artifactory/api/npm/npm-repo
WORKDIR /app
COPY .npmrc .npmrc
# Copy repo skeleton first, to avoid unnecessary docker cache invalidation.
# The skeleton contains the package.json of each package in the monorepo,
# and along with yarn.lock and the root package.json, that's enough to run yarn install.
COPY yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
RUN yarn install --frozen-lockfile --production --verbose --network-timeout 300000 && rm -rf "$(yarn cache dir)"
# RUN yarn install --production --network-timeout 300000 && rm -rf "$(yarn cache dir)"
# Then copy the rest of the backend bundle, along with any other files we might want.
COPY packages/backend/dist/bundle.tar.gz app-config.yaml app-config.production.yaml ./
RUN tar xzf bundle.tar.gz && rm bundle.tar.gz
CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"]

2、使用命令打包:

yarn tsc
yarn build

使用jenkins打包,使用kubernetes发到docker容器中启动项目


相关文档:

官方网站:https://backstage.io/

官方示例网站:https://demo.backstage.io/

官方组件文档:https://backstage.io/storybook/

react:https://react.docschina.org/

material-ui文档:https://mui.com/zh/getting-started/usage/

Knex:https://knexjs.org/

sqlite3:https://www.sqlite.org/index.html

PostgreSQL:https://www.postgresql.org/

lerna:https://www.lernajs.cn/

express:https://www.expressjs.com.cn/4x/api.html

jenkins:https://www.jenkins.io/

docker:https://www.docker.com/

kubernetes:https://kubernetes.io/

Docker和K8S:https://zhuanlan.zhihu.com/p/53260098、

https://www.cnblogs.com/caojiaxin/p/14065610.html



推荐阅读
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • Yarn已过时!Kubeflow实现机器学习调度平台才是未来
    来源:AI前线本文约6700字,建议阅读10分钟。本文分析了建设分布式训练平台的过程中的痛点所在,为你介绍Kubeflow与其核心组件及其 ... [详细]
author-avatar
乐檬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有