Salta al contenuto principale

04 - Backstage.io: Platform Portal per Developer Self-Service e Service Catalog

Backstage: Il Developer Portal Open Source di Spotify Backstage e una piattaforma open source creata da Spotify e donata alla Cloud Native Computing...

Cosa ne pensi di questo articolo?

04 - Backstage.io: Platform Portal per Developer Self-Service e Service Catalog
Platform EngineeringFoto:SiddePexels

In Breve

Backstage: Il Developer Portal Open Source di Spotify Backstage e una piattaforma open source creata da Spotify e donata alla Cloud Native Computing...

Backstage: Il Developer Portal Open Source di Spotify

Backstage e una piattaforma open source creata da Spotify e donata alla Cloud Native Computing Foundation (CNCF) nel 2020. Rappresenta oggi lo standard de facto per la costruzione di developer portal e la base su cui molte organizzazioni costruiscono la propria Internal Developer Platform (IDP).

Backstage risolve un problema che ogni organizzazione in crescita affronta: la frammentazione degli strumenti e delle informazioni. Invece di navigare tra decine di dashboard, wiki, repository e tool, gli sviluppatori trovano tutto in un unico portale: il catalogo dei servizi, la documentazione, i template per nuovi progetti, lo stato dei deployment e le metriche di performance.

In questo articolo esploreremo l'architettura di Backstage, i suoi componenti core, come configurarlo e personalizzarlo, e come costruire plugin custom per integrarlo con il vostro ecosistema.

Cosa Imparerai

  • Architettura di Backstage: frontend, backend, database e plugin system
  • Software Catalog: come modellare e gestire tutti i servizi dell'organizzazione
  • Software Templates: scaffolding di nuovi servizi tramite il portale
  • TechDocs: documentation as code integrata nel portale
  • Plugin development: creare plugin custom per integrare i vostri tool
  • Deployment: Kubernetes, Docker Compose e configurazione in produzione

Architettura di Backstage

Backstage ha un'architettura modulare basata su tre componenti principali:

  • Frontend (App): single-page application React che fornisce l'interfaccia utente. E altamente personalizzabile attraverso temi, layout e plugin frontend
  • Backend: server Node.js/Express che gestisce le API, l'autenticazione, il database e l'orchestrazione dei plugin backend
  • Plugins: moduli indipendenti che aggiungono funzionalità. Ogni plugin ha un componente frontend e/o backend. L'ecosistema conta centinaia di plugin per integrare tool come GitHub, Kubernetes, PagerDuty, Datadog e molti altri

Questa architettura a plugin e la vera forza di Backstage: permette di iniziare con le funzionalità core e aggiungere integrazioni progressivamente, senza mai dover riscrivere la piattaforma.


# 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
      

Software Catalog: Il Cuore di Backstage

Il Software Catalog e il componente centrale di Backstage. E un registro centralizzato di tutti i componenti software dell'organizzazione: servizi, librerie, API, risorse infrastrutturali, documentazione e team. Ogni entità nel catalogo e descritta da un file YAML chiamato catalog-info.yaml che risiede nella root del repository del componente.

Il catalogo supporta diversi tipi di entità:

  • Component: un servizio, una libreria o un'applicazione
  • API: un'interfaccia esposta da un componente (REST, gRPC, GraphQL, eventi)
  • System: un raggruppamento logico di componenti che formano un sistema
  • Resource: una risorsa infrastrutturale (database, bucket S3, cluster Kafka)
  • Group: un team o un'unita organizzativa
  • User: un utente individuale dell'organizzazione

# 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
      

Software Templates: Scaffolding dal Portale

I Software Templates sono il motore di scaffolding di Backstage. Permettono agli sviluppatori di creare nuovi servizi, librerie o componenti infrastrutturali direttamente dal developer portal, seguendo i Golden Paths dell'organizzazione.

Il flusso tipico e:

  • Lo sviluppatore seleziona un template dal catalogo (es. "REST API Microservice")
  • Compila un form con le informazioni richieste (nome, team owner, opzioni tecniche)
  • Backstage esegue una serie di step automatizzati: scaffolding del codice, creazione repository GitHub, setup CI/CD, registrazione nel catalogo
  • In pochi minuti, lo sviluppatore ha un servizio funzionante con tutte le best practice integrate

Impatto dei Software Templates

Le organizzazioni che adottano Backstage Software Templates riportano una riduzione del time-to-first-deploy del 75%. Un nuovo microservizio che prima richiedeva 2-3 giorni di setup ora e operativo in 15-30 minuti, completo di CI/CD, monitoring e documentazione.

TechDocs: Documentazione nel Portale

TechDocs e il sistema di documentazione integrato in Backstage che implementa il paradigma docs-as-code. La documentazione vive nel repository del servizio come file Markdown, viene compilata automaticamente e resa accessibile dal developer portal.

I vantaggi di TechDocs sono:

  • Co-location: la documentazione vive accanto al codice, quindi viene aggiornata insieme ad esso
  • Discoverability: tutta la documentazione e ricercabile da un unico punto nel portale
  • Standardizzazione: formato uniforme per tutta la documentazione dell'organizzazione
  • Automazione: la compilazione e la pubblicazione sono automatiche tramite 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
      

Plugin Development

La vera potenza di Backstage risiede nel suo ecosistema di plugin. Oltre ai centinaia di plugin della community, ogni organizzazione può creare plugin custom per integrare i propri tool interni, dashboard e workflow.

Un plugin Backstage tipicamente comprende:

  • Frontend plugin: componenti React che aggiungono pagine, card o tab nell'interfaccia
  • Backend plugin: API e logica server-side che il frontend consuma
  • Common package: tipi TypeScript, interfacce e utilities condivise tra frontend e backend

I plugin più diffusi nell'ecosistema includono: Kubernetes (visualizzazione pods e deployment), GitHub Actions (stato dei workflow), PagerDuty (on-call e incidenti), Grafana (dashboard embedded), SonarQube (code quality), e Cost Insights (analisi costi cloud).

Deployment di Backstage

Backstage può essere deployato in diversi modi, a seconda delle esigenze dell'organizzazione:

  • Kubernetes: il metodo consigliato per produzione, con Helm chart o manifest custom
  • Docker Compose: ideale per sviluppo locale e piccoli team
  • Roadie: versione SaaS managed di Backstage, per chi non vuole gestire l'infrastruttura

# 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
      

Consiglio Pratico

Inizia con una installazione Backstage minimale: Software Catalog + TechDocs + 2-3 plugin essenziali (GitHub, Kubernetes, un tool di monitoring). Aggiungi plugin progressivamente in base al feedback degli sviluppatori. Un portale troppo complesso al lancio rischia di confondere piuttosto che aiutare.

Domande frequenti

Qual è l'architettura modulare di Backstage?

L'architettura modulare di Backstage è basata su tre componenti principali, ovvero il Software Catalog, i Software Templates e TechDocs.

Qual è il ruolo del Software Catalog in Backstage?

Il Software Catalog è il componente centrale di Backstage e rappresenta un registro centralizzato di tutti i componenti software dell'organizzazione.

Come funzionano i Software Templates in Backstage?

I Software Templates sono il motore di scaffolding di Backstage e permettono agli sviluppatori di creare nuovi servizi, librerie o componenti infrastrutturali direttamente dal developer portal.

Qual è la caratteristica principale dei plugin in Backstage?

I plugin in Backstage sono personalizzabili e possono essere creati per integrare i propri tool interni, dashboard e workflow.

Fonti e approfondimenti

Commenti

Caricamento commenti...

Accedi per commentare

Discuti questo articolo nella community

Unisciti al gruppo Telegram per discutere con altri sviluppatori, fare domande e condividere le tue esperienze.

Ti è piaciuto questo articolo?

Esplora altri contenuti sul blog o scopri i miei progetti