Backstage is an open platform for building developer portals.
It unifies infrastructure tooling, services, and documentation into a single catalog-driven UI.
flowchart LR
Dev([Developer]) -->|:7007| Backstage[Backstage App]
Backstage --> Catalog[Software Catalog]
Backstage --> Templates[Scaffolder Templates]
Backstage --> TechDocs[TechDocs]
Backstage --> DB[(PostgreSQL)]
- Developers access the Backstage portal via the web UI.
- The software catalog indexes services, libraries, and infrastructure components.
- Scaffolder templates let teams create new projects from standardized blueprints.
- TechDocs renders markdown documentation alongside the catalog entries.
- PostgreSQL stores catalog state, user data, and plugin metadata.
- Backstage image:
backstage/backstage:latest - Database image:
postgres:16-alpine - Container names:
backstage,backstage-db - Backstage UI:
http://<host-ip>:7007 - PostgreSQL port:
5432(internal only)
Set via .env (copy from .env.example):
BACKSTAGE_PORT(default:7007)POSTGRES_USER(default:backstage)POSTGRES_PASSWORD(default:changeme)POSTGRES_DB(default:backstage)
From the repository root:
cd backstage
cp .env.example .env
docker compose up -dOpen:
- Backstage UI:
http://localhost:7007
Useful commands:
docker compose ps
docker compose logs -f backstage
docker compose restart
docker compose down- Register services in the software catalog using
catalog-info.yamlfiles in your repos. - Create scaffolder templates to standardize new project creation across teams.
- Enable TechDocs to render markdown docs directly in the portal.
- Add plugins for CI/CD visibility, Kubernetes, cost management, and more.
- Change the default database password before exposing externally.
- The official image ships with a demo catalog; customize
app-config.yamlfor your org. - For production, mount a custom
app-config.production.yamlvia volumes. - See Backstage docs for full configuration and plugin reference.