{"id":50178,"date":"2025-07-14T01:06:24","date_gmt":"2025-07-14T01:06:24","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=50178"},"modified":"2025-07-14T01:06:24","modified_gmt":"2025-07-14T01:06:24","slug":"backstage-the-ultimate-internal-developer-portal-comprehensive-tutorial","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/backstage-the-ultimate-internal-developer-portal-comprehensive-tutorial\/","title":{"rendered":"Backstage: The Ultimate Internal Developer Portal \u2013 Comprehensive Tutorial"},"content":{"rendered":"\n<p>Here is a <strong>detailed, professional-quality tutorial on Backstage<\/strong>. This guide is comprehensive but clear, designed for everyone from beginners to experienced platform engineers. It covers all the requested topics, includes practical examples, and is structured for real-world use.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Introduction<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What is Backstage?<\/strong><\/h3>\n\n\n\n<p><a href=\"https:\/\/backstage.io\/\" target=\"_blank\" rel=\"noopener\">Backstage<\/a> is an open-source developer portal framework, originally created by Spotify, that helps organizations build a unified portal for all their engineering tools, services, documentation, and data. Think of it as an internal \u201capp store\u201d for all things engineering, letting teams easily find, manage, and collaborate on software assets.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Why Do Organizations Use Backstage?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Centralizes scattered tools:<\/strong> Replaces dozens of links and UIs with a single entry point.<\/li>\n\n\n\n<li><strong>Boosts developer productivity:<\/strong> Developers spend less time hunting for docs, APIs, and tools.<\/li>\n\n\n\n<li><strong>Improves onboarding:<\/strong> New hires can quickly discover and understand internal tools and standards.<\/li>\n\n\n\n<li><strong>Enables platform thinking:<\/strong> Empowers teams to build a company-wide developer platform.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Features &amp; Benefits<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Benefit<\/th><\/tr><\/thead><tbody><tr><td><strong>Software Catalog<\/strong><\/td><td>Unified listing of all software, APIs, docs, and owners<\/td><\/tr><tr><td><strong>Plugins<\/strong><\/td><td>Extensible for any tool or data source<\/td><\/tr><tr><td><strong>TechDocs<\/strong><\/td><td>Built-in technical documentation engine<\/td><\/tr><tr><td><strong>Authentication<\/strong><\/td><td>Enterprise-ready access control<\/td><\/tr><tr><td><strong>Custom Branding<\/strong><\/td><td>Make the portal \u201cfeel\u201d like your own company<\/td><\/tr><tr><td><strong>Open-Source Ecosystem<\/strong><\/td><td>Large community, many plugins, actively developed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Core Concepts<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Software Catalog<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What:<\/strong> Centralized, searchable registry of all your software (microservices, libraries, websites, etc).<\/li>\n\n\n\n<li><strong>Why:<\/strong> Makes ownership, documentation, and standards discoverable.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Plugins<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What:<\/strong> Modular features that extend Backstage (e.g., CI\/CD, monitoring, docs, Kubernetes dashboards).<\/li>\n\n\n\n<li><strong>Why:<\/strong> Lets you tailor the portal to your organization\u2019s needs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Entities, Components, Systems<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Entity:<\/strong> Anything tracked in the catalog (e.g., service, website, API).<\/li>\n\n\n\n<li><strong>Component:<\/strong> A software part (microservice, library, data pipeline).<\/li>\n\n\n\n<li><strong>System:<\/strong> A group of related components that form a product or platform.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>TechDocs<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What:<\/strong> Built-in solution to generate and display technical docs (from Markdown) right in Backstage.<\/li>\n\n\n\n<li><strong>Why:<\/strong> Makes it easy for teams to maintain up-to-date docs, close to their code.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Architecture Overview<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How Backstage Works<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Front-End:<\/strong> React-based web UI, customizable with your branding and plugins.<\/li>\n\n\n\n<li><strong>Back-End:<\/strong> Node.js\/Express server handling APIs, integrations, catalog, and plugin logic.<\/li>\n\n\n\n<li><strong>Plugins:<\/strong> Both frontend and backend can be extended by adding plugins.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/backstage.io\/images\/architecture-overview.svg\" alt=\"Backstage Architecture Diagram\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Deployment Options<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Self-Hosted:<\/strong> Run on your own Kubernetes, VM, or cloud platform.<\/li>\n\n\n\n<li><strong>Managed (e.g., Roadie):<\/strong> Third-party vendors offer Backstage as a service.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Installation &amp; Setup<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Prerequisites<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\" rel=\"noopener\">Node.js<\/a> (v16+ recommended)<\/li>\n\n\n\n<li><a href=\"https:\/\/classic.yarnpkg.com\/en\/docs\/install\" target=\"_blank\" rel=\"noopener\">Yarn<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener\">Git<\/a><\/li>\n\n\n\n<li>Docker (optional, for some plugins)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step-by-Step Local Installation<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Install prerequisites:<\/strong> <code>node -v # Should show 16.x or higher yarn -v git --version<\/code><\/li>\n\n\n\n<li><strong>Create a new Backstage app:<\/strong><code>npx @backstage\/create-app@latest<\/code>\n<ul class=\"wp-block-list\">\n<li>Enter your app name (e.g., <code>company-portal<\/code>)<\/li>\n\n\n\n<li><code>cd company-portal<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Run Backstage locally:<\/strong><code>yarn install yarn dev<\/code>\n<ul class=\"wp-block-list\">\n<li>Open <a href=\"http:\/\/localhost:3000\/\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:3000<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Initial Configuration<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Edit <code>app-config.yaml<\/code> for organization name, authentication, and catalog settings.<\/li>\n\n\n\n<li>See <a href=\"https:\/\/backstage.io\/docs\/conf\/writing\/\" target=\"_blank\" rel=\"noopener\">Backstage Configuration Docs<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Authentication &amp; Authorization<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Enterprise Identity Integration<\/strong><\/h3>\n\n\n\n<p>Backstage supports multiple providers out of the box:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Google OAuth<\/li>\n\n\n\n<li>Okta<\/li>\n\n\n\n<li>LDAP\/SAML<\/li>\n\n\n\n<li>GitHub\/GitLab<\/li>\n<\/ul>\n\n\n\n<p><strong>Example: Google OAuth<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a Google Cloud Project, enable OAuth, and set up credentials.<\/li>\n\n\n\n<li>Add to <code>app-config.yaml<\/code>: <code>auth: providers: google: development: clientId: ${GOOGLE_CLIENT_ID} clientSecret: ${GOOGLE_CLIENT_SECRET}<\/code><\/li>\n\n\n\n<li>Restart the app, login screen should show Google.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Managing User Access<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use Backstage\u2019s built-in <a href=\"https:\/\/backstage.io\/docs\/auth\/authorization\/\" target=\"_blank\" rel=\"noopener\">RBAC<\/a>.<\/li>\n\n\n\n<li>You can restrict who can see which services, edit docs, run pipelines, etc.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>6. Configuring the Software Catalog<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Onboarding Services and Tools<\/strong><\/h3>\n\n\n\n<p>Backstage catalogs your assets via <a href=\"https:\/\/backstage.io\/docs\/features\/software-catalog\/descriptor-format\" target=\"_blank\" rel=\"noopener\">YAML entity definitions<\/a>.<\/p>\n\n\n\n<p><strong>Sample service YAML (catalog-info.yaml):<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">apiVersion: backstage.io\/v1alpha1\nkind: Component\nmetadata:\n  name: my-service\n  description: My sample microservice\n  tags:\n    - nodejs\n    - api\nspec:\n  type: service\n  owner: team-platform\n  lifecycle: production\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Place this in your repo root, or register via the Catalog UI.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Best Practices<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use consistent naming and owner fields.<\/li>\n\n\n\n<li>Tag everything (language, team, lifecycle).<\/li>\n\n\n\n<li>Automate registration with CI if possible.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Using the Catalog UI<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Access &#8220;Create&#8221; in the sidebar to add new entities.<\/li>\n\n\n\n<li>Search, filter, and view relationships between systems, components, and APIs.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>7. Adding and Using Plugins<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Popular Plugins<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>TechDocs:<\/strong> Native docs for each service.<\/li>\n\n\n\n<li><strong>CI\/CD:<\/strong> Jenkins, GitHub Actions, GitLab, Azure Pipelines integrations.<\/li>\n\n\n\n<li><strong>Kubernetes:<\/strong> View Pod health, logs, and resources.<\/li>\n\n\n\n<li><strong>GitHub, PagerDuty, Sentry, etc.<\/strong><\/li>\n<\/ul>\n\n\n\n<p><strong>Install Example \u2013 TechDocs:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">yarn add --cwd packages\/app @backstage\/plugin-techdocs\nyarn add --cwd packages\/backend @backstage\/plugin-techdocs-backend\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Enable in <code>app-config.yaml<\/code> as per <a href=\"https:\/\/backstage.io\/docs\/features\/techdocs\/getting-started\/\" target=\"_blank\" rel=\"noopener\">plugin docs<\/a>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How to Create a Custom Plugin<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Run: <code>yarn backstage-cli create-plugin<\/code><\/li>\n\n\n\n<li>Follow prompts; scaffolded files appear in <code>\/plugins<\/code>.<\/li>\n\n\n\n<li>Develop your plugin logic (see <a href=\"https:\/\/backstage.io\/docs\/plugins\/create-a-plugin\/\" target=\"_blank\" rel=\"noopener\">Plugin Authoring Guide<\/a>).<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Plugin Use Cases<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Internal dashboards (alerts, builds, deployments)<\/li>\n\n\n\n<li>Launching scripts or automations<\/li>\n\n\n\n<li>Embedding status pages or incident management<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>8. Managing Documentation with TechDocs<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How to Document Software in Backstage<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In your service repo, add a <code>docs\/<\/code> folder with Markdown files (<code>index.md<\/code> as the entrypoint).<\/li>\n\n\n\n<li>Reference the docs location in your <code>catalog-info.yaml<\/code>: <code>spec: type: service owner: team-xyz lifecycle: production documentation: location: .\/docs<\/code><\/li>\n\n\n\n<li>Build docs locally with TechDocs CLI: <code>npx @techdocs\/cli build<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Setting Up and Using TechDocs Plugin<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>See <a href=\"https:\/\/backstage.io\/docs\/features\/techdocs\/getting-started\/\" target=\"_blank\" rel=\"noopener\">TechDocs setup<\/a>.<\/li>\n\n\n\n<li>TechDocs can use MkDocs, support diagrams, embed images, etc.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Tips for Docs Organization<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keep docs near your code.<\/li>\n\n\n\n<li>Use diagrams (Mermaid, SVG).<\/li>\n\n\n\n<li>Set up a team-wide docs review process.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>9. CI\/CD and Developer Experience<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Integrating with CI\/CD Tools<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Plugins available for Jenkins, GitHub Actions, GitLab, CircleCI, etc.<\/li>\n\n\n\n<li>Can display build status, deployment history, pipeline logs in the portal.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example: Jenkins Plugin<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install Jenkins plugin, configure API token in <code>app-config.yaml<\/code>.<\/li>\n\n\n\n<li>See <a href=\"https:\/\/backstage.io\/docs\/features\/jenkins\/\" target=\"_blank\" rel=\"noopener\">Jenkins plugin guide<\/a>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How Backstage Improves Developer Workflows<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>One-stop shop for starting new projects, checking builds, reading docs.<\/li>\n\n\n\n<li>Self-service: engineers can onboard services, request resources, track ownership.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>10. Customizing Backstage<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Branding and UI Customization<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Change logo, theme, sidebar via configuration.<\/li>\n\n\n\n<li>Example: edit <code>packages\/app\/src\/themes<\/code> for custom color schemes.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Writing Custom Extensions<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Develop plugins as described above.<\/li>\n\n\n\n<li>Can add custom pages, widgets, or API endpoints.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>11. Deployment to Production<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Recommended Patterns<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Environment<\/th><th>Method<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td>Kubernetes<\/td><td>Helm chart, Kustomize<\/td><td>Most popular for scaling\/HA<\/td><\/tr><tr><td>AWS<\/td><td>ECS, EKS, or EC2<\/td><td>Use ALB, S3 for static assets<\/td><\/tr><tr><td>VM<\/td><td>PM2, systemd, Docker Compose<\/td><td>Good for simple setups or POCs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Best Practices<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Store configs securely (secrets manager, env vars).<\/li>\n\n\n\n<li>Use load balancers for HA.<\/li>\n\n\n\n<li>Monitor with Prometheus, Datadog, etc.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>12. Best Practices &amp; Common Pitfalls<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Tips for Success<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start simple: just catalog and docs.<\/li>\n\n\n\n<li>Automate catalog entry generation with CI.<\/li>\n\n\n\n<li>Get team buy-in by solving real pain points (onboarding, finding owners).<\/li>\n\n\n\n<li>Contribute back to open-source; stay up-to-date.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Common Pitfalls<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Over-customizing too early.<\/li>\n\n\n\n<li>Forgetting RBAC and security.<\/li>\n\n\n\n<li>Not investing in documentation quality.<\/li>\n\n\n\n<li>Ignoring upgrades\/maintenance.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>13. Case Studies &amp; Examples<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Success Stories<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spotify:<\/strong><br>Invented Backstage to tame hundreds of microservices. Saw 70% faster onboarding, improved developer happiness.<\/li>\n\n\n\n<li><strong>Netflix:<\/strong><br>Uses Backstage for developer self-service and standardized documentation.<\/li>\n\n\n\n<li><strong>American Airlines:<\/strong><br>Improved discoverability and collaboration across teams.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example Architecture<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">&#91;Developers] ---&gt; &#91;Backstage Portal]\n        |                 |\n   &#91;Docs, Build, Alerts, APIs] (via Plugins)\n        |\n&#91;CI\/CD Tools, Cloud APIs, Kubernetes]\n        |\n    &#91;Cloud Infra, Monitoring, Data]\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>14. Resources<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/backstage.io\/docs\/\" target=\"_blank\" rel=\"noopener\">Backstage Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/backstage\/backstage\" target=\"_blank\" rel=\"noopener\">GitHub Repository<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/backstage.io\/plugins\" target=\"_blank\" rel=\"noopener\">Backstage Plugins<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/discord.com\/invite\/MUpMjP2\" target=\"_blank\" rel=\"noopener\">Community Discord<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/backstage.io\/blog\/\" target=\"_blank\" rel=\"noopener\">Blog &amp; Case Studies<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>15. FAQ &amp; Troubleshooting<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Question<\/th><th>Answer<\/th><\/tr><\/thead><tbody><tr><td>Can I use Backstage with Azure?<\/td><td>Yes, via Azure AD, AKS, Azure Pipelines plugins.<\/td><\/tr><tr><td>Is Backstage secure?<\/td><td>Enterprise auth, RBAC, secrets best practices recommended.<\/td><\/tr><tr><td>Can I extend Backstage?<\/td><td>Yes, via plugins and custom extensions.<\/td><\/tr><tr><td>What about upgrades?<\/td><td>Stay updated with releases, follow <a href=\"https:\/\/backstage.io\/docs\/releases\/\" target=\"_blank\" rel=\"noopener\">migration guides<\/a>.<\/td><\/tr><tr><td>Any good starter templates?<\/td><td>Yes, <a href=\"https:\/\/backstage.io\/docs\/features\/software-templates\/\" target=\"_blank\" rel=\"noopener\">Backstage Software Templates<\/a>.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>16. Table: Backstage Key Components Overview<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Description<\/th><th>Config Location<\/th><\/tr><\/thead><tbody><tr><td>Software Catalog<\/td><td>All software assets, owners, docs<\/td><td><code>catalog-info.yaml<\/code>, UI<\/td><\/tr><tr><td>TechDocs<\/td><td>Markdown-powered docs in the portal<\/td><td><code>docs\/<\/code>, TechDocs plugin<\/td><\/tr><tr><td>Plugins<\/td><td>Extend Backstage with more features<\/td><td>Install via Yarn, config<\/td><\/tr><tr><td>Auth<\/td><td>Secure login and permissions<\/td><td><code>app-config.yaml<\/code><\/td><\/tr><tr><td>UI\/Themes<\/td><td>Branding, look and feel<\/td><td><code>packages\/app\/src\/themes<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>You now have a complete, actionable guide to understanding, installing, and using Backstage for your internal developer platform.<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here is a detailed, professional-quality tutorial on Backstage. This guide is comprehensive but clear, designed for everyone from beginners to experienced platform engineers. It covers all the requested topics, includes&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-50178","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=50178"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50178\/revisions"}],"predecessor-version":[{"id":50179,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50178\/revisions\/50179"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=50178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=50178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=50178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}