Skip to main content

Backstage (RHDH)

Developer portal with software catalog and Kubernetes visibility.

CategoryManagement
Deploy./uis deploy backstage
Undeploy./uis undeploy backstage
Depends onPostgreSQL
Required byNone
Helm chartrhdh-chart/backstage
Default namespacebackstage

What It Does

Backstage (via Red Hat Developer Hub) provides a centralized developer portal for the UIS platform. It gives developers a single place to discover all services, see how they relate to each other, and check their live status.

Key capabilities:

  • Software Catalog — browse all UIS services, systems, and their relationships
  • Kubernetes Plugin — live pod status and deployment health for each service
  • Grafana Plugin — links services to their monitoring dashboards
  • Service Relationships — visualize dependencies between components and resources

Deploy

# Prerequisites
./uis deploy postgresql

# Generate catalog (if not already done)
./uis catalog generate

# Deploy Backstage
./uis deploy backstage

The setup playbook automatically:

  1. Creates the backstage namespace
  2. Creates the database in PostgreSQL
  3. Generates the catalog and creates a ConfigMap
  4. Deploys via Helm
  5. Sets up the IngressRoute

Verify

# Quick check
./uis verify backstage

# Manual check
kubectl get pods -n backstage

# Test the UI
curl -s -o /dev/null -w "%{http_code}" http://backstage.localhost
# Expected: 200

Access the portal at http://backstage.localhost.

Configuration

Key Files

FilePurpose
manifests/650-backstage-config.yamlHelm values (image, database, plugins, resources)
manifests/651-backstage-ingressroute.yamlTraefik routing for backstage.localhost
manifests/652-backstage-rbac.yamlServiceAccount + ClusterRoleBinding for K8s plugin
manifests/653-backstage-catalog.yamlCatalog ConfigMap (generated)
ansible/playbooks/650-setup-backstage.ymlSetup playbook
ansible/playbooks/650-remove-backstage.ymlRemoval playbook
ansible/playbooks/650-test-backstage.ymlVerification playbook

Catalog

The catalog is generated from UIS service definitions:

# Generate catalog files
./uis catalog generate

# Files are written to generated/backstage/catalog/

The setup playbook creates a ConfigMap from these files and mounts it into the Backstage pod.

Resource Limits

Backstage is configured with laptop-friendly resource limits (overriding RHDH defaults):

RequestLimit
CPU250m1000m
Memory256Mi1Gi

If Backstage runs out of memory, increase the limits in 650-backstage-config.yaml.

Undeploy

./uis undeploy backstage

The PostgreSQL database is preserved for redeployment. To remove it manually:

kubectl exec -n default postgresql-0 -- psql -U postgres -c "DROP DATABASE backstage;"

Troubleshooting

Pod won't start:

kubectl describe pod -n backstage -l app.kubernetes.io/name=backstage
kubectl logs -n backstage -l app.kubernetes.io/name=backstage --tail=100

Catalog is empty:

# Regenerate and update ConfigMap
./uis catalog generate
kubectl create configmap backstage-catalog --from-file=generated/backstage/catalog/ -n backstage --dry-run=client -o yaml | kubectl apply -f -
# Restart Backstage to reload
kubectl rollout restart deployment backstage -n backstage

Database connection fails:

# Check secrets exist
kubectl get secret urbalurba-secrets -n backstage
# Check PostgreSQL
kubectl get pods -n default -l app.kubernetes.io/name=postgresql

Learn More