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:
Unresolved directive in chapters/cap-03-mise-en-place-primera-idp-local.adoc - include::../../chapters/chapter-03-bootstrap/scripts/01-create-app.sh[tag=bootstrap-script]
|
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:
Failed to generate image: Could not find the 'mmdc' executable in PATH; add it to the PATH or specify its location using the 'mmdc' document attribute flowchart TB Root[backstage-sazon/] --> PkgApp[packages/app/] Root --> PkgBackend[packages/backend/] Root --> Plugins[plugins/] Root --> PkgConfig[packages/app-config/] Root --> Tsconfig[tsconfig.json] Root --> Pkg[package.json] Root --> Catalog[examples/]
-
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:
Unresolved directive in chapters/cap-03-mise-en-place-primera-idp-local.adoc - include::../../chapters/chapter-03-bootstrap/package.json[tag=dev-script]
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:
Unresolved directive in chapters/cap-03-mise-en-place-primera-idp-local.adoc - include::../../chapters/chapter-03-bootstrap/entities/sazon-web/catalog-info.yaml[tag=first-entity]
|
¿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.