Red Hat Developer Hub 的管理指南
摘要
前言 复制链接链接已复制到粘贴板!
Red Hat Developer Hub 是一个企业级、开放的开发人员平台,可用于构建开发人员门户。此平台包含一个受支持且建议的框架,有助于降低开发人员的欺诈和令人满意的提高。
要访问 Red Hat Developer Hub,您必须在 Red Hat OpenShift Container Platform 中添加自定义应用程序配置文件。在 OpenShift Container Platform 中,您可以使用以下内容作为基础模板,创建一个名为 app-config-rhdh 的 ConfigMap:
kind: ConfigMap
apiVersion: v1
metadata:
name: app-config-rhdh
data:
app-config-rhdh.yaml: |
app:
title: Red Hat Developer Hub
您可以使用以下方法之一将自定义应用程序配置文件添加到 OpenShift Container Platform 中:
- Red Hat Developer Hub Operator
- Red Hat Developer Hub Helm chart
您可以使用 Red Hat Developer Hub Helm Chart 将自定义应用程序配置文件添加到 OpenShift Container Platform 实例中。
先决条件
- 您已创建了 Red Hat OpenShift Container Platform 帐户。
流程
- 在 OpenShift Container Platform Web 控制台中选择 ConfigMaps 选项卡。
- 点 Create ConfigMap。
- 在 Create ConfigMap 页面中,选择 Configure via 中的 YAML view 选项,并根据需要更改该文件。
- 点 Create。
- 进入 Helm 选项卡查看 Helm 发行版本列表。
- 点击您要使用的 Helm 发行版本上的 overflow 菜单,然后选择 Upgrade。
使用 Form view 或 YAML 视图来 编辑 Helm 配置。
使用 Form view
- 展开 Root Schema → Backstage chart 模式 → Backstage parameters → Extra app 配置文件到内联命令参数。
- 点 Add Extra app 配置文件到 inline 到 command 参数 链接。
在以下字段中输入值:
-
configMapRef:
app-config-rhdh -
文件名:
app-config-rhdh.yaml
-
configMapRef:
- 单击 Upgrade。
使用 YAML 视图
设置
upstream.backstage.extraAppConfig.configMapRef和upstream.backstage.extraAppConfig.filename参数的值,如下所示:# ... other Red Hat Developer Hub Helm Chart configurations upstream: backstage: extraAppConfig: - configMapRef: app-config-rhdh filename: app-config-rhdh.yaml # ... other Red Hat Developer Hub Helm Chart configurations- 单击 Upgrade。
自定义应用程序配置文件是一个 ConfigMap 对象,可用于更改 Red Hat Developer Hub 实例的配置。如果要在 Red Hat OpenShift Container Platform 上部署 Developer Hub 实例,您可以使用 Red Hat Developer Hub Operator 将自定义应用程序配置文件添加到 OpenShift Container Platform 实例中,方法是创建 ConfigMap 对象并在 Developer Hub 自定义资源(CR)中引用它。
自定义应用配置文件包含名为 BACKEND_SECRET 的敏感环境变量。此变量包含一个强制后端身份验证密钥,Developer Hub 用来引用 OpenShift Container Platform secret 中定义的环境变量。您必须创建一个名为 'secrets-rhdh' 的 secret,并在 Developer Hub CR 中引用它。
您需要从外部和未经授权的访问保护 Red Hat Developer Hub 安装。像管理任何其他 secret 一样管理后端身份验证密钥。满足强密码要求,不要将其公开在任何配置文件中,而是仅将其作为环境变量注入配置文件中。
先决条件
- 您有一个活跃的 Red Hat OpenShift Container Platform 帐户。
- 您的管理员已在 OpenShift Container Platform 中安装了 Red Hat Developer Hub Operator。如需更多信息,请参阅安装 Red Hat Developer Hub Operator。
- 您已在 OpenShift Container Platform 中创建 Red Hat Developer Hub CR。
流程
- 从 OpenShift Container Platform Web 控制台中的 Developer 视角,选择 Topology 视图,然后点击 Developer Hub pod 上的 Open URL 图标来识别 Developer Hub 外部 URL: < RHDH_URL>。
- 从 OpenShift Container Platform Web 控制台中的 Developer 视角,选择 ConfigMaps 视图。
- 点 Create ConfigMap。
选择 Configure via 中的 YAML view 选项,并使用以下示例创建
ConfigMap对象,如app-config-rhdh.yaml:kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: "app-config-rhdh.yaml": | app: title: Red Hat Developer Hub baseUrl: <RHDH_URL>1 backend: auth: externalAccess: - type: legacy options: subject: legacy-default-config secret: "${BACKEND_SECRET}"2 baseUrl: <RHDH_URL>3 cors: origin: <RHDH_URL>4 - 点 Create。
- 选择 Secrets 视图。
- 点 Create Key/value Secret。
-
创建名为
secrets-rhdh的机密。 添加名为
BACKEND_SECRET的键,以及一个 base64 编码字符串作为值。为每个 Red Hat Developer Hub 实例使用唯一值。例如,您可以使用以下命令从终端生成密钥:node -p 'require("crypto").randomBytes(24).toString("base64")'- 点 Create。
- 选择 Topology 视图。
点要使用的 Red Hat Developer Hub 实例的溢出菜单,然后选择 Edit Backstage 以加载 Red Hat Developer Hub 实例的 YAML 视图。
在 CR 中,输入自定义应用程序配置配置映射的名称作为
spec.application.appConfig.configMaps字段的值,并输入您的 secret 名称作为spec.application.extraEnvs.secrets字段的值。例如:apiVersion: rhdh.redhat.com/v1alpha1 kind: Backstage metadata: name: developer-hub spec: application: appConfig: mountPath: /opt/app-root/src configMaps: - name: app-config-rhdh extraEnvs: secrets: - name: secrets-rhdh extraFiles: mountPath: /opt/app-root/src replicas: 1 route: enabled: true database: enableLocalDb: true- 点击 Save。
- 返回到 Topology 视图并等待 Red Hat Developer Hub pod 启动。
- 点 Open URL 图标使用 Red Hat Developer Hub 平台配置更改。
其他资源
- 如需有关 Developer Hub 中的角色和职责的更多信息,请参阅 Red Hat Developer Hub 中的基于角色的访问控制(RBAC)。
第 2 章 配置外部 PostgreSQL 数据库 复制链接链接已复制到粘贴板!
作为管理员,您可以在 Red Hat Developer Hub 中配置和使用外部 PostgreSQL 数据库。您可以使用 PostgreSQL 证书文件使用 Operator 或 Helm Chart 配置外部 PostgreSQL 实例。
Developer Hub 支持外部 PostgreSQL 数据库的配置。您可以执行维护活动,如备份数据或为外部 PostgreSQL 数据库配置高可用性(HA)。
默认情况下,Red Hat Developer Hub operator 或 Helm Chart 会创建一个本地 PostgreSQL 数据库。但是,此配置不适用于生产环境。对于生产环境部署,禁用创建本地数据库,并将 Developer Hub 配置为改为连接到外部 PostgreSQL 实例。
2.1. 使用 Operator 配置外部 PostgreSQL 实例 复制链接链接已复制到粘贴板!
您可以使用 Red Hat Developer Hub Operator 配置外部 PostgreSQL 实例。默认情况下,Operator 会在部署 RHDH 实例的同一命名空间中创建和管理一个 PostgreSQL 本地实例。但是,您可以更改此默认设置来配置外部 PostgreSQL 数据库服务器,例如 Amazon Web Services (AWS)相关数据库服务(RDS)或 Azure 数据库。
先决条件
- 您使用受支持的 PostgreSQL 版本。如需更多信息,请参阅 产品生命周期页面。
您有以下详情:
-
db-host:注意 PostgreSQL 实例域名系统(DNS)或 IP 地址 -
db-port:注意 PostgreSQL 实例端口号,如5432 -
用户名:注意要连接到 PostgreSQL 实例的用户名 -
密码:注意连接到 PostgreSQL 实例的密码
-
- 已安装 Red Hat Developer Hub Operator。
- 可选: 您有一个 CA 证书、传输层安全(TLS)私钥和 TLS 证书,以便您可以使用 TLS 协议保护数据库连接。如需更多信息,请参阅 PostgreSQL 供应商文档。
默认情况下,Developer Hub 为每个插件使用一个数据库,并在未找到时自动创建它。除了 PSQL Database 特权外,您可能需要 Create Database 特权来配置外部 PostgreSQL 实例。
流程
可选:创建一个证书 secret 来使用 TLS 连接配置 PostgreSQL 实例:
cat <<EOF | oc -n <your-namespace> create -f - apiVersion: v1 kind: Secret metadata: name: <crt-secret>1 type: Opaque stringData: postgres-ca.pem: |- -----BEGIN CERTIFICATE----- <ca-certificate-key>2 postgres-key.key: |- -----BEGIN CERTIFICATE----- <tls-private-key>3 postgres-crt.pem: |- -----BEGIN CERTIFICATE----- <tls-certificate-key>4 # ... EOF创建凭证 secret 以与 PostgreSQL 实例连接:
cat <<EOF | oc -n <your-namespace> create -f - apiVersion: v1 kind: Secret metadata: name: <cred-secret>1 type: Opaque stringData:2 POSTGRES_PASSWORD: <password> POSTGRES_PORT: "<db-port>" POSTGRES_USER: <username> POSTGRES_HOST: <db-host> PGSSLMODE: <ssl-mode> # for TLS connection3 NODE_EXTRA_CA_CERTS: <abs-path-to-pem-file> # for TLS connection, e.g. /opt/app-root/src/postgres-crt.pem4 EOF- 1
- 提供凭证 secret 的名称。
- 2
- 提供用于连接 PostgreSQL 实例的凭证数据。
- 3
- 可选:根据所需的 安全套接字层(SSL)模式提供值。
- 4
- 可选: 只有在需要 PostgreSQL 实例的 TLS 连接时才提供值。
创建
Backstage自定义资源(CR):cat <<EOF | oc -n <your-namespace> create -f - apiVersion: rhdh.redhat.com/v1alpha1 kind: Backstage metadata: name: <backstage-instance-name> spec: database: enableLocalDb: false1 application: extraFiles: mountPath: <path> # e g /opt/app-root/src secrets: - name: <crt-secret>2 key: postgres-crt.pem, postgres-ca.pem, postgres-key.key # key name as in <crt-secret> Secret extraEnvs: secrets: - name: <cred-secret>3 # ...注意BackstageCR 中列出的环境变量与 Operator 默认配置一起工作。如果更改了 Operator 默认配置,您必须相应地重新配置BackstageCR。-
将
BackstageCR 应用到已部署 RHDH 实例的命名空间。
2.2. 使用 Helm Chart 配置外部 PostgreSQL 实例 复制链接链接已复制到粘贴板!
您可以使用 Helm Chart 配置外部 PostgreSQL 实例。默认情况下,Helm Chart 会在部署 RHDH 实例的同一命名空间中创建和管理 PostgreSQL 本地实例。但是,您可以更改此默认设置来配置外部 PostgreSQL 数据库服务器,例如 Amazon Web Services (AWS)相关数据库服务(RDS)或 Azure 数据库。
先决条件
- 您使用受支持的 PostgreSQL 版本。如需更多信息,请参阅 产品生命周期页面。
您有以下详情:
-
db-host:注意 PostgreSQL 实例域名系统(DNS)或 IP 地址 -
db-port:注意 PostgreSQL 实例端口号,如5432 -
用户名:注意要连接到 PostgreSQL 实例的用户名 -
密码:注意连接到 PostgreSQL 实例的密码
-
- 已使用 Helm Chart 安装 RHDH 应用程序。
- 可选: 您有一个 CA 证书、传输层安全(TLS)私钥和 TLS 证书,以便您可以使用 TLS 协议保护数据库连接。如需更多信息,请参阅 PostgreSQL 供应商文档。
默认情况下,Developer Hub 为每个插件使用一个数据库,并在未找到时自动创建它。除了 PSQL Database 特权外,您可能需要 Create Database 特权来配置外部 PostgreSQL 实例。
流程
可选:创建一个证书 secret 来使用 TLS 连接配置 PostgreSQL 实例:
cat <<EOF | oc -n <your-namespace> create -f - apiVersion: v1 kind: Secret metadata: name: <crt-secret>1 type: Opaque stringData: postgres-ca.pem: |- -----BEGIN CERTIFICATE----- <ca-certificate-key>2 postgres-key.key: |- -----BEGIN CERTIFICATE----- <tls-private-key>3 postgres-crt.pem: |- -----BEGIN CERTIFICATE----- <tls-certificate-key>4 # ... EOF创建凭证 secret 以与 PostgreSQL 实例连接:
cat <<EOF | oc -n <your-namespace> create -f - apiVersion: v1 kind: Secret metadata: name: <cred-secret>1 type: Opaque stringData:2 POSTGRES_PASSWORD: <password> POSTGRES_PORT: "<db-port>" POSTGRES_USER: <username> POSTGRES_HOST: <db-host> PGSSLMODE: <ssl-mode> # for TLS connection3 NODE_EXTRA_CA_CERTS: <abs-path-to-pem-file> # for TLS connection, e.g. /opt/app-root/src/postgres-crt.pem4 EOF- 1
- 提供凭证 secret 的名称。
- 2
- 提供用于连接 PostgreSQL 实例的凭证数据。
- 3
- 可选:根据所需的 安全套接字层(SSL)模式提供值。
- 4
- 可选: 只有在需要 PostgreSQL 实例的 TLS 连接时才提供值。
在名为
values.yaml的 Helm 配置文件中配置 PostgreSQL 实例:# ... upstream: postgresql: enabled: false # disable PostgreSQL instance creation1 auth: existingSecret: <cred-secret> # inject credentials secret to Backstage2 backstage: appConfig: backend: database: connection: # configure Backstage DB connection parameters host: ${POSTGRES_HOST} port: ${POSTGRES_PORT} user: ${POSTGRES_USER} password: ${POSTGRES_PASSWORD} ssl: rejectUnauthorized: true, ca: $file: /opt/app-root/src/postgres-ca.pem key: $file: /opt/app-root/src/postgres-key.key cert: $file: /opt/app-root/src/postgres-crt.pem extraEnvVarsSecrets: - <cred-secret> # inject credentials secret to Backstage3 extraEnvVars: - name: BACKEND_SECRET valueFrom: secretKeyRef: key: backend-secret name: '{{ include "janus-idp.backend-secret-name" $ }}' extraVolumeMounts: - mountPath: /opt/app-root/src/dynamic-plugins-root name: dynamic-plugins-root - mountPath: /opt/app-root/src/postgres-crt.pem name: postgres-crt # inject TLS certificate to Backstage cont.4 subPath: postgres-crt.pem - mountPath: /opt/app-root/src/postgres-ca.pem name: postgres-ca # inject CA certificate to Backstage cont.5 subPath: postgres-ca.pem - mountPath: /opt/app-root/src/postgres-key.key name: postgres-key # inject TLS private key to Backstage cont.6 subPath: postgres-key.key extraVolumes: - ephemeral: volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi name: dynamic-plugins-root - configMap: defaultMode: 420 name: dynamic-plugins optional: true name: dynamic-plugins - name: dynamic-plugins-npmrc secret: defaultMode: 420 optional: true secretName: dynamic-plugins-npmrc - name: postgres-crt secret: secretName: <crt-secret>7 # ...在名为
values.yaml的 Helm 配置文件中应用配置更改:helm upgrade -n <your-namespace> <your-deploy-name> openshift-helm-charts/redhat-developer-hub -f values.yaml --version 1.3.5
2.3. 使用 Operator 将本地数据库迁移到外部数据库服务器 复制链接链接已复制到粘贴板!
默认情况下,Red Hat Developer Hub 在 PostgreSQL 数据库中托管每个插件的数据。当您获取数据库列表时,您可能会看到基于 Developer Hub 中配置的插件数量的多个数据库。您可以将托管在本地 PostgreSQL 服务器上的 RHDH 实例迁移到外部 PostgreSQL 服务,如 AWS RDS、Azure 数据库或 Crunchy 数据库。要从每个 RHDH 实例迁移数据,您可以使用 PostgreSQL 工具,如 pg_dump 和 psql 或 pgAdmin。
以下流程使用数据库复制脚本进行快速迁移。
先决条件
流程
在终端中运行以下命令,为本地 PostgreSQL 数据库 pod 配置端口转发:
oc port-forward -n <your-namespace> <pgsql-pod-name> <forward-to-port>:<forward-from-port>其中:
-
&
lt;pgsql-pod-name> 变量表示 PostgreSQL pod 的名称,格式为backstage-psql-<deployment-name>-<_index>。 -
&
lt;forward-to-port> 变量表示您选择的端口将 PostgreSQL 数据转发到。 &
lt;forward-from-port> 变量表示本地 PostgreSQL 实例端口,如5432。示例:配置端口转发
oc port-forward -n developer-hub backstage-psql-developer-hub-0 15432:5432
-
&
复制以下
db_copy.sh脚本,并根据您的配置编辑详情:#!/bin/bash to_host=<db-service-host>1 to_port=54322 to_user=postgres3 from_host=127.0.0.14 from_port=154325 from_user=postgres6 allDB=("backstage_plugin_app" "backstage_plugin_auth" "backstage_plugin_catalog" "backstage_plugin_permission" "backstage_plugin_scaffolder" "backstage_plugin_search")7 for db in ${!allDB[@]}; do db=${allDB[$db]} echo Copying database: $db PGPASSWORD=$TO_PSW psql -h $to_host -p $to_port -U $to_user -c "create database $db;" pg_dump -h $from_host -p $from_port -U $from_user -d $db | PGPASSWORD=$TO_PSW psql -h $to_host -p $to_port -U $to_user -d $db done- 1
- 目标主机名,例如 <
db-instance-name>.rds.amazonaws.com。 - 2
- 目的地端口,如
5432。 - 3
- 目标服务器用户名,例如
postgres。 - 4
- 源主机名,如
127.0.0.1。 - 5
- 源端口号,如 <
forward-to-port>变量。 - 6
- 源服务器用户名,如
postgres。 - 7
- 要使用双引号导入的数据库名称,例如:"backstage_plugin_
app" "backstage_plugin_auth" "backstage_plugin_catalog" "backstage_plugin_permission" "backstage_plugin_permission" "backstage_plugin_scaffolder" "backstage_plugin_search")。
创建用于复制数据的目的地数据库:
/bin/bash TO_PSW=<destination-db-password> /path/to/db_copy.sh1 - 1
- &
lt;destination-db-password> 变量表示要连接到目标数据库的密码。
注意当数据复制完成后,您可以停止端口转发。有关处理大型数据库和使用压缩工具的更多信息,请参阅 PostgreSQL 网站上的 Handling Large Databases 部分。
-
重新配置
Backstage自定义资源(CR)。如需更多信息,请参阅使用 Operator 配置外部 PostgreSQL 实例。 在重新配置后,检查
BackstageCR 的末尾是否存在以下代码:# ... spec: database: enableLocalDb: false application: # ... extraFiles: secrets: - name: <crt-secret> key: postgres-crt.pem # key name as in <crt-secret> Secret extraEnvs: secrets: - name: <cred-secret> # ...注意重新配置
BackstageCR 会删除对应的StatefulSet和Pod对象,但不删除PersistenceVolumeClaim对象。使用以下命令删除本地PersistenceVolumeClaim对象:oc -n developer-hub delete pvc <local-psql-pvc-name>其中,<
;local-psql-pvc-name> 变量采用data-<psql-pod-name>格式。- 应用配置更改。
验证
运行以下命令,验证您的 RHDH 实例是否使用迁移的数据运行,且不包含本地 PostgreSQL 数据库:
oc get pods -n <your-namespace>检查以下详情的输出:
-
backstage-developer-hub-xxxpod 处于 running 状态。 backstage-psql-developer-hub-0pod 不可用。您还可以使用 OpenShift Container Platform Web 控制台中的 Topology 视图来验证这些详情。
-
第 3 章 在 Kubernetes 中使用 TLS 连接配置 RHDH 实例 复制链接链接已复制到粘贴板!
您可以在 Kubernetes 集群中配置带有传输层安全(TLS)连接的 RHDH 实例,如 Azure Red Hat OpenShift (ARO)集群、支持的云供应商中的任何集群,或者具有正确配置自己的集群。传输层安全性(TLS)可确保与其他实体(如第三方应用程序或外部数据库)的 RHDH 实例的安全连接。但是,您必须使用公共证书颁发机构(CA)签名证书来配置 Kubernetes 集群。
先决条件
- 您已使用公共 CA 签名证书设置了 Azure Red Hat OpenShift (ARO)集群。有关获取 CA 证书的更多信息,请参阅您的厂商文档。
您已创建了命名空间并设置对资源具有正确读取权限的服务帐户。
示例:用于基于角色的访问控制的 Kubernetes 清单
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: backstage-read-only rules: - apiGroups: - '*' resources: - pods - configmaps - services - deployments - replicasets - horizontalpodautoscalers - ingresses - statefulsets - limitranges - resourcequotas - daemonsets verbs: - get - list - watch #...- 您已获取与服务帐户关联的 secret 和服务 CA 证书。
您已创建了一些资源并为其添加注解,以便 Kubernetes 插件可以发现这些资源。您可以应用这些 Kubernetes 注解:
-
backstage.io/kubernetes-idto label components -
backstage.io/kubernetes-namespace以标记命名空间
-
流程
在
dynamic-plugins-rhdh.yaml文件中启用 Kubernetes 插件:kind: ConfigMap apiVersion: v1 metadata: name: dynamic-plugins-rhdh data: dynamic-plugins.yaml: | includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes-backend-dynamic disabled: false1 - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes disabled: false2 # ...注意backstage-plugin-kubernetes插件 当前还只是一个技术预览。作为替代方案,您可以使用./dynamic-plugins/dist/backstage-plugin-topology-dynamic插件,该插件正式发布(GA)。设置 kubernetes 集群详情并在
app-config-rhdh.yaml文件中配置目录同步选项:kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: "app-config-rhdh.yaml": | # ... catalog: rules: - allow: [Component, System, API, Resource, Location] providers: kubernetes: openshift: cluster: openshift processor: namespaceOverride: default defaultOwner: guests schedule: frequency: seconds: 30 timeout: seconds: 5 kubernetes: serviceLocatorMethod: type: 'multiTenant' clusterLocatorMethods: - type: 'config' clusters: - url: <target-cluster-api-server-url>1 name: openshift authProvider: 'serviceAccount' skipTLSVerify: false2 skipMetricsLookup: true dashboardUrl: <target-cluster-console-url>3 dashboardApp: openshift serviceAccountToken: ${K8S_SERVICE_ACCOUNT_TOKEN}4 caData: ${K8S_CONFIG_CA_DATA}5 # ...- 保存配置更改。
验证
运行 RHDH 应用程序来导入您的目录:
kubectl -n rhdh-operator get pods -w- 验证 pod 日志是否没有显示您的配置错误。
- 进入 Catalog 并检查 Developer Hub 实例中的组件页面,以验证集群连接以及您的创建的资源是否存在。
如果您遇到连接错误,如证书问题或权限,请在组件页面中选中消息框或查看 pod 的日志。
第 4 章 在企业代理后面运行 RHDH 应用程序 复制链接链接已复制到粘贴板!
您可以在启动应用程序前设置以下任意环境变量,在企业代理后面运行 RHDH 应用程序:
-
http_PROXY:注意用于 HTTP 请求的代理。 -
https_PROXY:注意用于 HTTPS 请求的代理。
另外,您可以设置 NO_PROXY 环境变量,将某些域排除在代理中。变量值是一个以逗号分隔的主机名列表,不需要代理才会达到,即使指定了代理也是如此。
4.1. 在 Helm 部署中配置代理信息 复制链接链接已复制到粘贴板!
对于基于 Helm 的部署,开发人员或具有在集群中创建资源的集群管理员都可以在 values.yaml Helm 配置文件中配置代理变量。
先决条件
- 已安装 Red Hat Developer Hub 应用程序。
流程
在 Helm 配置文件中设置代理信息:
upstream: backstage: extraEnvVars: - name: HTTP_PROXY value: '<http_proxy_url>' - name: HTTPS_PROXY value: '<https_proxy_url>' - name: NO_PROXY value: '<no_proxy_settings>'其中,
<http_proxy_url>- 表示必须替换为 HTTP 代理 URL 的变量。
<https_proxy_url>- 表示必须替换为 HTTPS 代理 URL 的变量。
<no_proxy_settings>表示必须使用逗号分隔的 URL 替换变量,该变量要从代理中排除,如
foo.com,baz.com。示例:使用 Helm Chart 设置代理变量
upstream: backstage: extraEnvVars: - name: HTTP_PROXY value: 'http://10.10.10.105:3128' - name: HTTPS_PROXY value: 'http://10.10.10.106:3128' - name: NO_PROXY value: 'localhost,example.org'
- 保存配置更改。
4.2. 在 Operator 部署中配置代理信息 复制链接链接已复制到粘贴板!
对于基于 Operator 的部署,用于代理配置的方法取决于您的角色:
- 作为有权访问 Operator 命名空间的集群管理员,您可以在 Operator 的默认 ConfigMap 文件中配置代理变量。此配置会将代理设置应用到 Operator 的所有用户。
- 作为开发人员,您可以在自定义资源(CR)文件中配置代理变量。此配置会将代理设置应用到从 CR 创建的 RHDH 应用程序。
先决条件
- 已安装 Red Hat Developer Hub 应用程序。
流程
根据您的角色执行以下步骤之一:
作为管理员,在 Operator 的默认 ConfigMap 文件中设置代理信息:
-
在 default 命名空间
rhdh-operator中搜索名为backstage-default-config的 ConfigMap 文件并打开它。 -
查找
deployment.yaml密钥。 在
Deploymentspec 中设置HTTP_PROXY、HTTPS_PROXY和NO_PROXY环境变量的值,如下例所示:示例:在 ConfigMap 文件中设置代理变量
# Other fields omitted deployment.yaml: |- apiVersion: apps/v1 kind: Deployment spec: template: spec: # Other fields omitted initContainers: - name: install-dynamic-plugins # command omitted env: - name: NPM_CONFIG_USERCONFIG value: /opt/app-root/src/.npmrc.dynamic-plugins - name: HTTP_PROXY value: 'http://10.10.10.105:3128' - name: HTTPS_PROXY value: 'http://10.10.10.106:3128' - name: NO_PROXY value: 'localhost,example.org' # Other fields omitted containers: - name: backstage-backend # Other fields omitted env: - name: APP_CONFIG_backend_listen_port value: "7007" - name: HTTP_PROXY value: 'http://10.10.10.105:3128' - name: HTTPS_PROXY value: 'http://10.10.10.106:3128' - name: NO_PROXY value: 'localhost,example.org'
-
在 default 命名空间
作为开发人员,在自定义资源(CR)文件中设置代理信息,如下例所示:
示例:在 CR 文件中设置代理变量
spec: # Other fields omitted application: extraEnvs: envs: - name: HTTP_PROXY value: 'http://10.10.10.105:3128' - name: HTTPS_PROXY value: 'http://10.10.10.106:3128' - name: NO_PROXY value: 'localhost,example.org'
- 保存配置更改。
您可以将 Red Hat Developer Hub 应用程序与 Amazon Web Services (AWS)集成,这有助于简化 AWS 生态系统中的工作流。将 Developer Hub 资源与 AWS 集成,可以访问完整的工具、服务和解决方案套件。
与 AWS 集成需要使用以下方法之一在 Elastic Kubernetes Service (EKS)中部署 Developer Hub:
- Helm chart
- Red Hat Developer Hub Operator
第 6 章 管理模板 复制链接链接已复制到粘贴板!
模板由 YAML 文件中定义的不同 UI 字段组成。模板包括 操作,它们是按顺序执行的步骤,并可有条件地执行。
您可以使用模板轻松创建 Red Hat Developer Hub 组件,然后将这些组件发布到不同的位置,如 Red Hat Developer Hub 软件目录或 GitHub 或 GitLab 中的存储库。
6.1. 使用 Template Editor 创建模板 复制链接链接已复制到粘贴板!
您可以使用 Template Editor 创建模板。
流程
使用以下选项之一访问 Template Editor:
-
为您的 Red Hat Developer Hub 实例打开 URL
https://<rhdh_url>/create/edit。 - 在 Red Hat Developer Hub 控制台的导航菜单中点 Create…,然后点 overflow 菜单按钮并选择 Template editor。
-
为您的 Red Hat Developer Hub 实例打开 URL
- 单击 Edit Template Form。
- 可选:修改模板参数的 YAML 定义。有关这些参数的详情请参考 第 6.2 节 “将模板创建为 YAML 文件”。
- 在 Name * 字段中输入模板的唯一名称。
- 在 Owner 下拉菜单中选择模板的所有者。
- 点击 Next。
在 Repository Location 视图中,输入您要发布模板的托管区的以下信息:
从下拉菜单中选择 可用的主机。
注意可用的主机通过
allowedHosts字段在 YAML 参数中定义:YAML 示例
# ... ui:options: allowedHosts: - github.com # ...- 在 Owner * 字段中,输入托管存储库所属机构、用户或项目。
- 在 Repository * 字段中,输入托管存储库的名称。
- 点 Review。
- 查看准确性的信息,然后点 Create。
验证
- 单击导航面板中的 Catalog 选项卡。
- 在 Kind 下拉菜单中,选择 Template。
- 确认模板显示在现有模板列表中。
6.2. 将模板创建为 YAML 文件 复制链接链接已复制到粘贴板!
您可以通过将 Template 对象定义为 YAML 文件来创建模板。
Template 对象描述了模板及其元数据。它还包含所需的输入变量,以及构建服务所执行的操作列表。
模板 对象示例
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: template-name
title: Example template
description: An example template for v1beta3 scaffolder.
spec:
owner: backstage/techdocs-core
type: service
parameters:
- title: Fill in some steps
required:
- name
properties:
name:
title: Name
type: string
description: Unique name of the component
owner:
title: Owner
type: string
description: Owner of the component
- title: Choose a location
required:
- repoUrl
properties:
repoUrl:
title: Repository Location
type: string
steps:
- id: fetch-base
name: Fetch Base
action: fetch:template
# ...
output:
links:
- title: Repository
url: ${{ steps['publish'].output.remoteUrl }}
- title: Open in catalog
icon: catalog
entityRef: ${{ steps['register'].output.entityRef }}
# ...
- 1
- 为模板指定一个名称。
- 2
- 指定模板的标题。这是在 Create… 视图中模板标题中可见的标题。
- 3
- 指定模板的描述。这是在 Create… 视图中模板标题上可见的描述。
- 4
- 指定模板的所有权。
owner字段提供有关负责维护或监督系统或机构中模板的信息。在提供的示例中,owner字段设为backstage/wagon-core。这意味着此模板属于backstage命名空间中的HEKETI-core项目。 - 5
- 指定组件类型。此必填字段接受任何字符串值,但您的组织应针对这些必填字段建立正确的税务。Red Hat Developer Hub 实例可能会读取此字段,并的行为因其值而异。例如,
Web 站点类型组件可能会在特定于网站的Red Hat Developer Hub 界面中显示工具。以下值对于此字段是通用的:
service- 后端服务,通常公开 API。
网站- 网站。
library- 软件库,如 npm 模块或 Java 库。
- 6
- 使用
parameters部分为用户输入指定参数,当用户使用 Red Hat Developer Hub 控制台中的模板创建组件时,以表单视图显示的参数。每个parameters子部分由标题和属性定义,创建一个新的表单页面,其中包含该定义。 - 7
- 使用
steps部分指定后端中执行的步骤。这些步骤必须使用唯一步骤 ID、名称和一个操作来定义。您可以通过访问 URLhttps://<rhdh_url>/create/actions 来查看 Red Hat Developer Hub 实例中可用的操作。 - 8
- 使用
output部分指定使用模板时创建的输出数据的结构。输出部分(特别是links子部分)提供了重要的引用和 URL,供用户访问并从模板创建的组件进行交互。 - 9
- 提供与生成的组件关联的存储库的引用或 URL。
- 10
- 提供引用或 URL,允许用户在列出各种组件的目录或目录中打开生成的组件。
6.3. 将现有模板导入到 Red Hat Developer Hub 复制链接链接已复制到粘贴板!
您可以使用 Catalog Processor 在 Red Hat Developer Hub 实例中添加现有模板。
先决条件
- 您已创建了一个目录或仓库,其中包含至少一个模板 YAML 文件。
- 如果要使用存储在 GitHub 或 GitLab 等存储库中的模板,您必须为您的供应商配置 Red Hat Developer Hub 集成。
流程
在
app-config.yaml配置文件中,修改catalog.rules部分使其包含模板的规则,并将catalog.locations部分配置为指向要添加的模板,如下例所示:# ... catalog: rules: - allow: [Template]1 locations: - type: url2 target: https://<repository_url>/example-template.yaml3 # ...
验证
- 单击导航面板中的 Catalog 选项卡。
- 在 Kind 下拉菜单中,选择 Template。
- 确认模板显示在现有模板列表中。
第 7 章 在 Red Hat Developer Hub 中配置 TechDocs 插件 复制链接链接已复制到粘贴板!
Red Hat Developer Hub TechDocs 插件可帮助您的组织在中央位置创建、查找和使用文档,并以标准化的方式使用。例如:
- 文档类代码方法
- 在 Markdown 文件中编写存储在项目存储库中的技术文档以及您的代码。
- 文档站点生成
- 使用 MkDocs 为您的在 Developer Hub 中呈现的文档创建一个功能全面、基于 Markdown 的静态 HTML 站点。
- 文档站点元数据和集成
- 请参阅有关文档站点的额外元数据以及静态文档,如最后一次更新的日期、站点所有者、顶级贡献者、打开 GitHub 问题、Slack 支持频道和 Stack Overflow Enterprise 标签。
- 内置导航和搜索
- 从文档中更快、更轻松地查找您想要的信息。
- 附加组件
- 使用附加组件自定义 TechDocs 体验,以解决高顺序的文档需求。
TechDocs 插件是预安装并在 Developer Hub 实例上启用的。您可以通过配置 Red Hat Developer Hub Helm chart 或 Red Hat Developer Hub Operator 配置映射来禁用或启用 TechDocs 插件并更改其他参数。
Red Hat Developer Hub 包括一个内置的 TechDocs 构建器,它从您的代码库中生成静态 HTML 文档。但是,本地构建器的默认基本设置不适用于生产环境。
您可以将 CI/CD 管道与具有专用作业的存储库搭配使用,为 TechDocs 生成文档。生成的静态文件存储在 OpenShift Data Foundation 中,或存储在您选择的云存储解决方案中,并发布到静态 HTML 文档站点。
将 OpenShift Data Foundation 配置为存储 TechDocs 生成的文件后,您可以配置 TechDocs 插件,以使用 OpenShift Data Foundation 进行云存储。
7.1. 为 TechDocs 文件配置存储 复制链接链接已复制到粘贴板!
TechDocs 发布程序将生成的文件存储在本地存储或云存储中,如 OpenShift Data Foundation、Google GCS、AWS S3 或 Azure Blob Storage。
7.1.1. 使用 OpenShift Data Foundation 进行文件存储 复制链接链接已复制到粘贴板!
您可以配置 OpenShift Data Foundation 以存储 TechDocs 生成的文件,而不依赖于其他云存储解决方案。
OpenShift Data Foundation 提供了一个 ObjectBucketClaim 自定义资源(CR),您可以使用它来请求 S3 兼容存储桶后端。您必须安装 OpenShift Data Foundation Operator 来使用此功能。
先决条件
- OpenShift Container Platform 管理员已在 Red Hat OpenShift Container Platform 中安装了 OpenShift Data Foundation Operator。如需更多信息,请参阅 OpenShift Container Platform - 安装 Red Hat OpenShift Data Foundation Operator。
-
OpenShift Container Platform 管理员已创建了 OpenShift Data Foundation 集群并配置了
StorageSystem模式。如需更多信息,请参阅 OpenShift Container Platform - 创建 OpenShift Data Foundation 集群。
流程
创建一个
ObjectBucketClaimCR,其中存储了生成的 TechDocs 文件。例如:apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: <rhdh_bucket_claim_name> spec: generateBucketName: <rhdh_bucket_claim_name> storageClassName: openshift-storage.noobaa.io注意创建 Developer Hub
ObjectBucketClaimCR 会自动创建 Developer HubObjectBucketClaim配置映射和 secret。配置映射和 secret 的名称与ObjetBucketClaimCR 的名称相同。
创建 ObjectBucketClaim CR 后,您可以使用配置映射和 secret 中存储的信息,使 Developer Hub 容器可以作为环境变量访问这些信息。根据用来安装 Developer Hub 的方法,您可以将访问信息添加到 Red Hat Developer Hub Helm Chart 或 Operator 配置中。
7.1.2. 使用 Helm Chart 使对象存储可供容器访问 复制链接链接已复制到粘贴板!
创建 ObjectBucketClaim 自定义资源(CR)会自动生成 Developer Hub ObjectBucketClaim 配置映射和 secret。配置映射和 secret 包含 ObjectBucket 访问信息。在 Helm Chart 配置中添加访问信息可使 Developer Hub 容器访问它,方法是将以下环境变量添加到容器中:
-
BUCKET_NAME -
BUCKET_HOST -
BUCKET_PORT -
BUCKET_REGION -
BUCKET_SUBREGION -
AWS_ACCESS_KEY_ID -
AWS_SECRET_ACCESS_KEY
然后,在 TechDocs 插件配置中使用这些变量。
先决条件
- 已使用 Helm Chart 在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
-
您已创建了
ObjectBucketClaimCR 来存储 TechDocs 生成的文件。如需更多信息,请参阅使用 OpenShift Data Foundation 进行文件存储
流程
在 Helm Chart 值中的
upstream.backstage键中,输入 Developer HubObjectBucketClaimsecret 的名称,作为extraEnvVarsSecrets字段的值和extraEnvVarsCM字段。例如:upstream: backstage: extraEnvVarsSecrets: - <rhdh_bucket_claim_name> extraEnvVarsCM: - <rhdh_bucket_claim_name>
7.1.2.1. Helm Chart 的 TechDocs 插件配置示例 复制链接链接已复制到粘贴板!
以下示例显示了 TechDocs 插件的 Developer Hub Helm Chart 配置:
global:
dynamic:
includes:
- 'dynamic-plugins.default.yaml'
plugins:
- disabled: false
package: ./dynamic-plugins/dist/backstage-plugin-techdocs-backend-dynamic
pluginConfig:
techdocs:
builder: external
generator:
runIn: local
publisher:
awsS3:
bucketName: '${BUCKET_NAME}'
credentials:
accessKeyId: '${AWS_ACCESS_KEY_ID}'
secretAccessKey: '${AWS_SECRET_ACCESS_KEY}'
endpoint: 'https://${BUCKET_HOST}'
region: '${BUCKET_REGION}'
s3ForcePathStyle: true
type: awsS3
7.1.3. 使用 Operator 使容器可以访问对象存储 复制链接链接已复制到粘贴板!
创建 ObjectBucketClaim 自定义资源(CR)会自动生成 Developer Hub ObjectBucketClaim 配置映射和 secret。配置映射和 secret 包含 ObjectBucket 访问信息。在 Operator 配置中添加访问信息可使 Developer Hub 容器访问它,方法是将以下环境变量添加到容器中:
-
BUCKET_NAME -
BUCKET_HOST -
BUCKET_PORT -
BUCKET_REGION -
BUCKET_SUBREGION -
AWS_ACCESS_KEY_ID -
AWS_SECRET_ACCESS_KEY
然后,在 TechDocs 插件配置中使用这些变量。
先决条件
- 已使用 Operator 在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
-
您已创建了
ObjectBucketClaimCR 来存储 TechDocs 生成的文件。
流程
在 Developer Hub
BackstageCR 中,输入 Developer HubObjectBucketClaim配置映射的名称作为spec.application.extraEnvs.configMaps字段的值,并输入 Developer HubObjectBucketClaimsecret 名称作为spec.application.extraEnvs.secrets字段的值。例如:apiVersion: objectbucket.io/v1alpha1 kind: Backstage metadata: name: <name> spec: application: extraEnvs: configMaps: - name: <rhdh_bucket_claim_name> secrets: - name: <rhdh_bucket_claim_name>
7.1.3.1. Operator 的 TechDocs 插件配置示例 复制链接链接已复制到粘贴板!
以下示例显示了 TechDocs 插件的 Red Hat Developer Hub Operator 配置映射配置:
kind: ConfigMap
apiVersion: v1
metadata:
name: dynamic-plugins-rhdh
data:
dynamic-plugins.yaml: |
includes:
- dynamic-plugins.default.yaml
plugins:
- disabled: false
package: ./dynamic-plugins/dist/backstage-plugin-techdocs-backend-dynamic
pluginConfig:
techdocs:
builder: external
generator:
runIn: local
publisher:
awsS3:
bucketName: '${BUCKET_NAME}'
credentials:
accessKeyId: '${AWS_ACCESS_KEY_ID}'
secretAccessKey: '${AWS_SECRET_ACCESS_KEY}'
endpoint: 'https://${BUCKET_HOST}'
region: '${BUCKET_REGION}'
s3ForcePathStyle: true
type: awsS3
7.2. 配置 CI/CD 以生成和发布 TechDocs 站点 复制链接链接已复制到粘贴板!
xmlrpc 从云存储桶(如 OpenShift Data Foundation)读取静态生成的文档文件。文档站点在与包含文档文件的存储库关联的 CI/CD 工作流上生成。您可以使用 HEKETI -cli CLI 工具在 CI 上生成文档 并发布到云存储。
您可以使用以下示例为 TechDocs 出版物创建一个脚本:
# Prepare
REPOSITORY_URL='https://github.com/org/repo'
git clone $REPOSITORY_URL
cd repo
# Install @techdocs/cli, mkdocs and mkdocs plugins
npm install -g @techdocs/cli
pip install "mkdocs-techdocs-core==1.*"
# Generate
techdocs-cli generate --no-docker
# Publish
techdocs-cli publish --publisher-type awsS3 --storage-name <bucket/container> --entity <Namespace/Kind/Name>
当用户在包含文档文件的存储库中进行更改时,TechDocs 工作流会启动 CI。您只能将工作流配置为仅在 docs/ 目录或 mkdocs.yml 中的文件改变时启动。
7.2.1. 为 CI 准备存储库 复制链接链接已复制到粘贴板!
CI 的第一步是将文档源存储库克隆到工作目录中。
流程
要在工作目录中克隆您的文档源存储库,请输入以下命令:
git clone <https://path/to/docs-repository/>
7.2.2. 生成 TechDocs 网站 复制链接链接已复制到粘贴板!
流程
要将 CI/CD 配置为生成 HEKETI,请完成以下步骤:
使用以下命令安装
npx软件包以运行 HEKETI-cli:npm install -g npx使用以下命令安装
HEKETI-cli工具:npm install -g @techdocs/cli使用以下命令安装
mkdocs插件:pip install "mkdocs-techdocs-core==1.*"使用以下命令生成 HEKETI 站点:
npx @techdocs/cli generate --no-docker --source-dir <path_to_repo> --output-dir ./site其中 <
path_to_repo> 是用来克隆存储库的文件路径中的位置。
7.2.3. 发布 TechDocs 网站 复制链接链接已复制到粘贴板!
流程
要发布您的 HEKETI 网站,请完成以下步骤:
- 为您的云存储供应商设置必要的身份验证环境变量。
使用以下命令发布您的 HEKETI :
npx @techdocs/cli publish --publisher-type <awsS3|googleGcs> --storage-name <bucket/container> --entity <namespace/kind/name> --directory ./site在软件模板中添加
.github/workflows/wagon.yml文件。例如:name: Publish TechDocs Site on: push: branches: [main] # You can even set it to run only when TechDocs related files are updated. # paths: # - "docs/**" # - "mkdocs.yml" jobs: publish-techdocs-site: runs-on: ubuntu-latest # The following secrets are required in your CI environment for publishing files to AWS S3. # e.g. You can use GitHub Organization secrets to set them for all existing and new repositories. env: TECHDOCS_S3_BUCKET_NAME: ${{ secrets.TECHDOCS_S3_BUCKET_NAME }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: ${{ secrets.AWS_REGION }} ENTITY_NAMESPACE: 'default' ENTITY_KIND: 'Component' ENTITY_NAME: 'my-doc-entity' # In a Software template, Scaffolder will replace {{cookiecutter.component_id | jsonify}} # with the correct entity name. This is same as metadata.name in the entity's catalog-info.yaml # ENTITY_NAME: '{{ cookiecutter.component_id | jsonify }}' steps: - name: Checkout code uses: actions/checkout@v3 - uses: actions/setup-node@v3 - uses: actions/setup-python@v4 with: python-version: '3.9' - name: Install techdocs-cli run: sudo npm install -g @techdocs/cli - name: Install mkdocs and mkdocs plugins run: python -m pip install mkdocs-techdocs-core==1.* - name: Generate docs site run: techdocs-cli generate --no-docker --verbose - name: Publish docs site run: techdocs-cli publish --publisher-type awsS3 --storage-name $TECHDOCS_S3_BUCKET_NAME --entity $ENTITY_NAMESPACE/$ENTITY_KIND/$ENTITY_NAME
第 8 章 配置 Red Hat Developer Hub 部署 复制链接链接已复制到粘贴板!
Red Hat Developer Hub operator 会公开其自定义资源定义(CRD)的 rhdh.redhat.com/v1alpha2 API 版本。此 CRD 会公开一个通用的 spec.deployment.patch 字段,它可让您完全控制 Developer Hub Deployment 资源。此字段可以是标准 apps.Deployment Kubernetes 对象的一个片段。
流程
- 使用以下字段创建 Developer Hub 自定义资源定义:
Example
apiVersion: rhdh.redhat.com/v1alpha2
kind: Backstage
metadata:
name: developer-hub
spec:
deployment:
patch:
spec:
template:
labels为 Developer Hub pod 添加标签。
添加标签
my=true示例apiVersion: rhdh.redhat.com/v1alpha2 kind: Backstage metadata: name: developer-hub spec: deployment: patch: spec: template: metadata: labels: my: true卷添加名为
my-volume的额外卷,并将它挂载到 Developer Hub 应用程序容器中的/my/path下。附加卷示例
apiVersion: rhdh.redhat.com/v1alpha2 kind: Backstage metadata: name: developer-hub spec: deployment: patch: spec: template: spec: containers: - name: backstage-backend volumeMounts: - mountPath: /my/path name: my-volume volumes: - ephemeral: volumeClaimTemplate: spec: storageClassName: "special" name: my-volume将默认的
dynamic-plugins-root卷替换为名为dynamic-plugins-root的持久性卷声明(PVC)。请注意$patch: replace指令,否则将添加新卷。dynamic-plugins-root卷替换示例apiVersion: rhdh.redhat.com/v1alpha2 kind: Backstage metadata: name: developer-hub spec: deployment: patch: spec: template: spec: volumes: - $patch: replace name: dynamic-plugins-root persistentVolumeClaim: claimName: dynamic-plugins-rootCPU请求将 Developer Hub 应用程序容器的 CPU 请求设置为 250m。
CPU 请求示例
apiVersion: rhdh.redhat.com/v1alpha2 kind: Backstage metadata: name: developer-hub spec: deployment: patch: spec: template: spec: containers: - name: backstage-backend resources: requests: cpu: 250mmy-sidecar容器在 Developer Hub Pod 中添加新的
my-sidecarsidecar 容器。side car 容器示例
apiVersion: rhdh.redhat.com/v1alpha2 kind: Backstage metadata: name: developer-hub spec: deployment: patch: spec: template: spec: containers: - name: my-sidecar image: quay.io/my-org/my-sidecar:latest