Planning to attend AWS re:Invent in Vegas? Come say hi!See more
Beyond Portals: Designing a Robust Development Platform with Backstage
hands-on tutorial

Beyond Portals: Designing a Robust Development Platform with Backstage

Updated July 23, 2026

Introduction

Backstage has emerged as a powerful open-source platform for building developer portals. However, its potential extends far beyond just serving as a portal. By integrating Backstage with various tools and services, you can transform it into a comprehensive development platform that manages deployments, environments, and runtime operations. This tutorial will guide you through extending Backstage to create a cohesive execution layer that streamlines development workflows.

Prerequisites

Before diving into the tutorial, ensure you have the following:

  • A working Backstage instance
  • Basic knowledge of Kubernetes, Docker, and CI/CD concepts
  • Access to a Kubernetes cluster
  • Familiarity with Terraform and Docker Compose

Step 1: Setting Up Backstage

If you haven't already set up Backstage, start by creating a new Backstage app:

npx @backstage/create-app

Follow the prompts to set up your Backstage application. Once done, navigate to the app directory and start the server:

cd my-backstage-app
yarn dev

Your Backstage instance should now be running at http://localhost:3000.

Step 2: Integrating Kubernetes

To manage deployments and environments, integrate Kubernetes with Backstage. Start by adding the Kubernetes plugin:

yarn add @backstage/plugin-kubernetes

Next, configure the Kubernetes plugin in your Backstage app. Edit app-config.yaml to include Kubernetes cluster details:

kubernetes:
  serviceLocatorMethod:
    type: 'multiTenant'
  clusterLocatorMethods:
    - type: 'config'
      clusters:
        - url: 'https://<your-cluster-url>'
          name: 'my-cluster'
          authProvider: 'serviceAccount'

Ensure that your Backstage instance has the necessary permissions to access the Kubernetes API.

Step 3: Adding CI/CD Capabilities

To streamline deployments, integrate a CI/CD tool like Jenkins or GitHub Actions. For this tutorial, we'll use GitHub Actions.

First, create a GitHub Actions workflow file in your repository:

name: CI/CD

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - run: yarn install
    - run: yarn build

  deploy:
    runs-on: ubuntu-latest
    needs: build

    steps:
    - name: Deploy to Kubernetes
      uses: actions/deploy-to-kubernetes@v1
      with:
        kubeconfig: ${{ secrets.KUBECONFIG }}
        manifests: ./k8s/

Ensure your Kubernetes credentials are stored securely in GitHub Secrets.

Step 4: Creating a Runtime Operations Dashboard

Backstage can be extended with custom plugins to create a runtime operations dashboard. Start by generating a new plugin:

yarn backstage-cli create-plugin

Follow the prompts to create a plugin named runtime-ops. Implement the plugin to interact with your Kubernetes cluster, displaying real-time metrics and logs.

Example code for fetching pod logs:

import { KubernetesClient } from '@backstage/plugin-kubernetes';

async function fetchPodLogs(namespace: string, podName: string): Promise<string> {
  const client = new KubernetesClient();
  const logs = await client.getPodLogs(namespace, podName);
  return logs;
}

Integrate this functionality into your plugin's UI to display logs and metrics.

Step 5: Automating Infrastructure with Terraform

To manage infrastructure as code, use Terraform. Start by defining your infrastructure in a main.tf file:

provider "kubernetes" {
  config_path = "~/.kube/config"
}

resource "kubernetes_namespace" "example" {
  metadata {
    name = "example-namespace"
  }
}

resource "kubernetes_deployment" "example" {
  metadata {
    name = "example-deployment"
    namespace = kubernetes_namespace.example.metadata[0].name
  }

  spec {
    replicas = 3

    template {
      metadata {
        labels = {
          app = "example"
        }
      }

      spec {
        container {
          image = "nginx:1.14.2"
          name  = "example"
        }
      }
    }
  }
}

Run terraform init and terraform apply to provision your infrastructure.

Operational Checklist

  • Ensure Backstage is running and accessible
  • Kubernetes plugin configured and tested
  • CI/CD pipeline set up and verified
  • Runtime operations dashboard implemented
  • Infrastructure defined and managed with Terraform

By following these steps, you can extend Backstage beyond a developer portal to a robust development platform that enhances your team's productivity and operational efficiency.