Mise-en-place: tu primera IDP local
|
Objetivos del capítulo
|
Antes de empezar: mise-en-place
El :apéndice C es nuestro recetario del cocinero. Aquí asumimos que ya tienes Node 20+, pnpm 9+ y Docker 24+ funcionando. Si no, vuelve al :apéndice A y prepara el mise-en-place desde cero.
|
Verificación rápida
Abre una terminal y verifica:
Si todo responde, estás listo. Si no, vuelve al :apéndice A. |
Bootstrap: el asistente de cocina
Backstage trae un asistente de bootstrap llamado @backstage/create-app. Es el equivalente al instalador del restaurante: deja lista la cocina con la vajilla, los fogones y los cuchillos de serie. No necesitas entender cada rincón para empezar, pero conviene saber qué deja y por qué.
Lo que vamos a ejecutar:
# Versión objetivo del libro, fijada en research/corpus.yml (cl-bk-version-target).
BACKSTAGE_VERSION="1.31.0"
NODE_VERSION="20"
PNPM_VERSION="9"
# 1. Precondiciones: Node 20+, pnpm 9+, Docker 24+
echo "==> Verificando Node $(node --version)"
node --version | grep -qE "^v($NODE_VERSION|[2-9][0-9])\." || {
echo "Necesitas Node $NODE_VERSION o superior"; exit 1; }
echo "==> Verificando pnpm $(pnpm --version 2>/dev/null || echo 'no instalado')"
command -v pnpm >/dev/null || { echo "Instala pnpm: npm i -g pnpm"; exit 1; }
echo "==> Generando proyecto Backstage $BACKSTAGE_VERSION"
npx --yes @backstage/create-app@$BACKSTAGE_VERSION < Instalando dependencias"
pnpm install
echo "==> Iniciando en modo dev"
echo "Frontend: http://localhost:3000"
echo "Backend: http://localhost:7007"
# pnpm dev # descomenta para arrancar
|
Lo que crea el bootstrap
|
|
Acerca de la versión
Fijamos |
El monorepo: estructura
El template de Bootstrap genera un monorepo pnpm con esta forma:
-
packages/app/— el frontend React con Material UI. -
packages/backend/— el backend Node con Express. -
plugins/— donde crearás tus plugins propios. -
examples/— entidades de ejemplo que el template deja. -
packages/app-config/— opcional, para separar configs.
Arrancar la cocina
Una vez generado, entramos y arrancamos:
"scripts": {
"dev": "yarn start",
"build": "backstage-cli package build",
"test": "backstage-cli package test --watchAll=false",
"lint": "backstage-cli package lint",
"create-app": "./scripts/01-create-app.sh",
"tsc": "tsc"
},
El frontend abre en http://localhost:3000 y el backend en http://localhost:7007. En el navegador verás la sala del restaurante vacía: el shell, el menú lateral, sin componentes en el catálogo todavía.
No te asustes si durante el primer arranque el backend tarda unos segundos en responder: está aplicando migraciones de la base de datos en SQLite. Cuando la cocina termina de preparar la mise-en-place, sirve en el puerto 7007.
La primera entidad del catalog
Antes de seguir, vamos a poblar el catálogo con un único Component. Esto demuestra que el catálogo está vivo y que cualquier cosa que registremos en él aparecerá en la sala.
|
¿Qué es una entidad?
Una entidad es un objeto JSON/YAML que describe algo del mundo del developer: un |
La primera entidad es un Component que representa la web de Sazón Foods:
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: sazon-web
description: Frontend público de Sazón Foods (SaaS B2B)
tags:
- frontend
- customer-facing
- typescript
annotations:
github.com/project-slug: sazon-foods/sazon-web
backstage.io/techdocs-ref: dir:.
spec:
type: website
lifecycle: production
owner: team-cocina
system: sazon-restaurant
|
¿Qué acabas de hacer?
|
Para que la entidad entre en el catálogo, basta con referenciarla en app-config.yaml:
catalog:
locations:
- type: file
target: ../../examples/sazon-web/catalog-info.yaml
Tras reiniciar el backend, refresca la UI y verás sazon-web en el menú Catalog.
¿Por qué usamos el catálogo desde el primer momento?
Tres razones:
-
Es la superficie visible del producto: lo primero que ven los developers.
-
Da contexto al resto de plugins: notificaciones, scaffolder, techdocs se anclan a entidades.
-
Es el lugar donde aterrizan los datos: si algo no está en el catálogo, no existe.
-
Verifica Node 20+, pnpm 9+, Docker 24+.
-
Ejecuta
npx @backstage/create-app@<version> --path backstage-sazon. -
Entra al directorio y arranca con
pnpm install && pnpm dev. -
Carga el catalog con tu primer
Component. -
Verifica que la sala muestra
sazon-weby su System.
Resumen
-
El bootstrap te da un monorepo pnpm con tres paquetes base.
-
El primer arranque aplica migraciones y tarda unos segundos.
-
Una entidad
Componentse registra en el catalog mediante un archivo YAML. -
El catalog es la superficie visible de Backstage y la pieza central.
Glosario del capítulo
- bootstrap
-
Asistente que genera un monorepo Backstage listo para arrancar.
- monorepo
-
Repositorio único con varios paquetes coordinados por pnpm.
- entidad
-
Objeto JSON/YAML que describe un Component, API, Resource, System, etc.
- SQLite
-
DB embebida que usa Backstage en dev por defecto. Producción: Postgres.
Próximo capítulo
Catalog en serio: estructura, relaciones y discovery —de la primera entidad a un catálogo entero: cinco componentes, relaciones, e ingesta desde GitHub.