Backstage: Spotify의 오픈 소스 개발자 포털
무대 뒤에서 Spotify가 만들고 기부한 오픈 소스 플랫폼 클라우드 네이티브 컴퓨팅 재단(CNCF) 2020년. 오늘날의 표준을 나타냅니다. 사실상 개발자 포털 구축과 많은 조직의 기반이 되는 기반입니다. 자체 내부 개발자 플랫폼(IDP)입니다.
Backstage는 성장하는 모든 조직이 직면하고 있는 문제인 단편화를 해결합니다. 도구와 정보를 제공합니다. 수십 개의 대시보드, 위키, 저장소를 탐색하는 대신 개발자는 서비스 카탈로그, 설명서, 도구 등 모든 것을 단일 포털에서 찾을 수 있습니다. 새 프로젝트, 배포 상태 및 성능 지표를 위한 템플릿입니다.
이 기사에서는 Backstage의 아키텍처, 핵심 구성 요소, 구성 방법을 살펴보겠습니다. 이를 사용자 정의하고 사용자 정의 플러그인을 구축하여 생태계와 통합하는 방법을 알아보세요.
무엇을 배울 것인가
- 백스테이지 아키텍처: 프런트엔드, 백엔드, 데이터베이스 및 플러그인 시스템
- 소프트웨어 카탈로그: 조직의 모든 서비스를 모델링하고 관리하는 방법
- 소프트웨어 템플릿: 포털을 통해 새로운 서비스 스캐폴딩
- TechDocs: 포털에 통합된 코드로서의 문서화
- 플러그인 개발: 도구를 통합하기 위한 맞춤형 플러그인 생성
- 배포: Kubernetes, Docker Compose 및 프로덕션 구성
백스테이지 아키텍처
Backstage에는 세 가지 주요 구성 요소를 기반으로 하는 모듈식 아키텍처가 있습니다.
- 프런트엔드(앱): 사용자 인터페이스를 제공하는 단일 페이지 React 애플리케이션입니다. 테마, 레이아웃 및 프런트엔드 플러그인을 통해 고도로 사용자 정의 가능
- 백엔드: API, 인증, 데이터베이스, 백엔드 플러그인 오케스트레이션을 처리하는 Node.js/Express 서버
- 플러그인: 기능을 추가하는 독립 모듈입니다. 각 플러그인에는 프런트엔드 및/또는 백엔드 구성요소가 있습니다. 생태계에는 GitHub, Kubernetes, PagerDuty, Datadog 등과 같은 도구를 통합하는 수백 개의 플러그인이 있습니다.
이 플러그인 아키텍처는 Backstage의 진정한 강점입니다. 이를 통해 기능을 시작할 수 있습니다. 플랫폼을 다시 작성할 필요 없이 점진적으로 통합을 코어화하고 추가할 수 있습니다.
# Backstage: configurazione app-config.yaml
app:
title: "Company Developer Portal"
baseUrl: https://backstage.company.io
organization:
name: "Company Inc."
backend:
baseUrl: https://backstage.company.io
listen:
port: 7007
database:
client: pg
connection:
host: ${POSTGRES_HOST}
port: ${POSTGRES_PORT}
user: ${POSTGRES_USER}
password: ${POSTGRES_PASSWORD}
auth:
environment: production
providers:
github:
production:
clientId: ${AUTH_GITHUB_CLIENT_ID}
clientSecret: ${AUTH_GITHUB_CLIENT_SECRET}
integrations:
github:
- host: github.com
token: ${GITHUB_TOKEN}
catalog:
import:
entityFilename: catalog-info.yaml
pullRequestBranchName: backstage-integration
rules:
- allow: [Component, System, API, Resource, Location, Template, Group, User]
locations:
- type: url
target: https://github.com/company/backstage-catalog/blob/main/all-components.yaml
- type: url
target: https://github.com/company/software-templates/blob/main/all-templates.yaml
소프트웨어 카탈로그: Backstage의 핵심
Il 소프트웨어 카탈로그 Backstage의 핵심 구성 요소입니다. 그리고 중앙화된 레지스트리
조직의 모든 소프트웨어 구성요소(서비스, 라이브러리, API, 인프라 리소스,
문서 및 팀. 카탈로그의 각 엔터티는 다음이라는 YAML 파일로 설명됩니다.
catalog-info.yaml 이는 구성 요소 저장소의 루트에 있습니다.
카탈로그는 여러 엔터티 유형을 지원합니다.
- 요소: 서비스, 라이브러리 또는 애플리케이션
- 아피스: 구성 요소(REST, gRPC, GraphQL, 이벤트)에 의해 노출되는 인터페이스
- 체계: 시스템을 구성하는 구성 요소의 논리적 그룹
- 자원: 인프라 리소스(데이터베이스, S3 버킷, Kafka 클러스터)
- 그룹: 팀 또는 조직 단위
- 사용자: 조직의 개별 사용자
# catalog-info.yaml: definizione di un servizio nel catalogo
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: checkout-service
description: "Servizio per la gestione del checkout e pagamenti"
annotations:
github.com/project-slug: company/checkout-service
backstage.io/techdocs-ref: dir:.
pagerduty.com/service-id: PXXXXXX
grafana/dashboard-selector: "checkout"
sonarqube.org/project-key: checkout-service
tags:
- typescript
- nestjs
- payments
links:
- url: https://checkout.company.io/api/docs
title: API Documentation
icon: docs
- url: https://grafana.company.io/d/checkout
title: Grafana Dashboard
icon: dashboard
spec:
type: service
lifecycle: production
owner: team-checkout
system: e-commerce
providesApis:
- checkout-api
consumesApis:
- payment-gateway-api
- inventory-api
dependsOn:
- resource:checkout-database
- resource:checkout-redis
---
apiVersion: backstage.io/v1alpha1
kind: API
metadata:
name: checkout-api
description: "REST API per operazioni di checkout"
spec:
type: openapi
lifecycle: production
owner: team-checkout
system: e-commerce
definition:
$text: ./openapi.yaml
소프트웨어 템플릿: 포털의 스캐폴딩
I 소프트웨어 템플릿 그것은 Backstage의 비계 엔진입니다. 그들은 허용합니다 개발자는 새로운 서비스, 라이브러리 또는 인프라 구성 요소를 직접 만들 수 있습니다. 조직의 Golden Path를 따르는 개발자 포털.
일반적인 흐름은 다음과 같습니다.
- 개발자는 카탈로그에서 템플릿을 선택합니다(예: "REST API 마이크로서비스")
- 요청된 정보(이름, 팀 소유자, 기술 옵션)로 양식을 작성하세요.
- Backstage에서는 코드 스캐폴딩, GitHub 저장소 생성, CI/CD 설정, 카탈로그 등록 등 일련의 자동화된 단계를 수행합니다.
- 몇 분 안에 개발자는 모든 모범 사례가 통합된 작업 서비스를 갖게 됩니다.
소프트웨어 템플릿의 영향
Backstage 소프트웨어 템플릿을 채택한 조직은 최초 배포 시간 75%. 이전에 필요했던 새로운 마이크로서비스 지금은 2~3일 설정이 완료되고 15~30분 만에 실행되며 CI/CD, 모니터링 및 문서화가 완료됩니다.
TechDocs: 포털의 문서
TechDocs 그리고 그것이 구현하는 Backstage 통합 문서 시스템 패러다임 코드형 문서. 문서는 서비스 저장소에 있습니다. Markdown 파일로 자동으로 컴파일되어 개발자 포털에서 액세스할 수 있습니다.
TechDocs의 장점은 다음과 같습니다.
- 공동 배치: 문서는 코드와 함께 있으므로 코드와 함께 업데이트됩니다.
- 발견 가능성: 모든 문서는 포털의 단일 지점에서 검색 가능
- 표준화: 모든 조직 문서에 대한 통일된 형식
- 오토메이션: CI/CD를 통해 편집과 퍼블리싱이 자동으로 이루어집니다.
# mkdocs.yml: configurazione TechDocs per un servizio
site_name: Checkout Service
site_description: "Documentazione tecnica del servizio checkout"
nav:
- Home: index.md
- Architecture:
- Overview: architecture/overview.md
- Database Schema: architecture/database.md
- API Design: architecture/api-design.md
- Development:
- Getting Started: development/getting-started.md
- Local Setup: development/local-setup.md
- Testing: development/testing.md
- Operations:
- Deployment: operations/deployment.md
- Monitoring: operations/monitoring.md
- Runbook: operations/runbook.md
- ADR:
- 001 - Database Choice: adr/001-database-choice.md
- 002 - Cache Strategy: adr/002-cache-strategy.md
plugins:
- techdocs-core
markdown_extensions:
- admonition
- codehilite
- pymdownx.superfences
- pymdownx.tabbed
플러그인 개발
백스테이지의 진정한 힘은 바로 플러그인 생태계. 수백명 외에도 커뮤니티 플러그인 중 각 조직은 사용자 정의 플러그인을 생성하여 자체 도구를 통합할 수 있습니다. 내부, 대시보드 및 워크플로우.
Backstage 플러그인에는 일반적으로 다음이 포함됩니다.
- 프런트엔드 플러그인: 인터페이스에 페이지, 카드 또는 탭을 추가하는 React 구성요소
- 백엔드 플러그인: 프런트엔드가 사용하는 API 및 서버 측 로직
- 공통 패키지: 프론트엔드와 백엔드 간에 공유되는 TypeScript 유형, 인터페이스 및 유틸리티
생태계에서 가장 인기 있는 플러그인은 다음과 같습니다: Kubernetes(포드 시각화 및 배포), GitHub Actions(워크플로 상태), PagerDuty(통화 중 및 인시던트), Grafana(내장형 대시보드), SonarQube(코드 품질) 및 Cost Insights(클라우드 비용 분석).
백스테이지 배포
Backstage는 조직의 필요에 따라 여러 가지 방법으로 배포할 수 있습니다.
- 쿠버네티스: Helm 차트 또는 사용자 정의 매니페스트를 사용하여 권장되는 제작 방법
- 도커 작성: 로컬 개발 및 소규모 팀에 적합
- 로드리: 인프라 관리를 원하지 않는 사용자를 위한 Backstage의 SaaS 관리 버전
# Kubernetes deployment: Helm values per Backstage
backstage:
image:
registry: ghcr.io
repository: company/backstage
tag: latest
replicas: 2
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 1Gi
extraEnvVars:
- name: POSTGRES_HOST
valueFrom:
secretKeyRef:
name: backstage-db-credentials
key: host
- name: GITHUB_TOKEN
valueFrom:
secretKeyRef:
name: backstage-github-token
key: token
ingress:
enabled: true
host: backstage.company.io
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
tls:
- secretName: backstage-tls
hosts:
- backstage.company.io
postgresql:
enabled: true
auth:
database: backstage
username: backstage
primary:
persistence:
size: 10Gi
실용적인 조언
최소한의 Backstage 설치로 시작: 소프트웨어 카탈로그 + TechDocs + 2-3 필수 플러그인 (GitHub, Kubernetes, 모니터링 도구) 피드백을 기반으로 점진적으로 플러그인을 추가하세요. 개발자의. 출시 시 포털이 너무 복잡하면 도움이 되기는커녕 혼란스러울 위험이 있습니다.







