Platform Mühendisliğinde Internal Developer Portal (IDP) Kurulumu: Backstage mi, Port mu?
Modern Platform Engineering pratiklerinin merkezinde tek bir nihai hedef var: Kognitif yükü azaltıp Developer Experience (DevX) çıtasını yukarı çekmek. Ancak bir sabah uyanıp “Hadi şirkete bir IDP kuralım” dediğinizde, DevOps dünyasının en büyük iki kutbu önünüze dikiliyor: Açık kaynak kodlu, Spotify kökenli Backstage ve SaaS/API-first yaklaşımıyla son dönemin parlayan yıldızı Port. Bu iki aracın broşür vaatlerini bir kenara bırakıp üretim ortamındaki gerçek maliyetlerine, mimari esnekliklerine ve Day-2 operasyonlarına bakalım.
SlackOps’tan Self-Service’e: Neden Bir IDP’ye İhtiyacımız Var?
Kabul edelim, şirket içinde yazdığınız bash script’leri, Terraform modülleri ve “production-hazır” Helm chart’ları harika çalışıyor olabilir. Fakat yazılımcı yeni bir microservice açmak için hâlâ Slack kanalından “#devops-help bana yeni bir Redis açar mısınız?” yazıyorsa, ortada bir platform değil, sadece insan gücüyle çalışan bir bilet kuyruğu vardır. IDP; Golden Path (Altın Yol) felsefesini somutlaştıran, altyapı yetkilendirmesini ve servis kataloğunu tek bir panele toplayan arayüzdür.
1. Spotify Backstage: Kodun Gücü ve Bakımın Laneti
Backstage bir ürün değildir; bir framework’tür. TypeScript ve React ile yazılmış bir monorepo iskeletidir. Kurulumu yaptığınız an elinizde bitmiş bir portal değil, sizin geliştirmeniz gereken bir yazılım projesi olur.
Backstage Mimarisi ve Plugin Ekosistemi
Backstage’in en büyük artısı, limitsiz özelleştirilebilmesidir. Şirket içi legacy bir LDAP sisteminiz veya kurum içi custom bir deployment engine’iniz varsa, Backstage içine plugin yazarak entegre edemeyeceğiniz hiçbir şey yoktur. Servislerinizi catalog-info.yaml dosyalarıyla declarative olarak tanımlarsınız:
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: payment-gateway-service
description: Core payment processing engine
annotations:
github.com/project-slug: acme-corp/payment-gateway
backstage.io/techdocs-ref: dir:.
argocd/app-name: payment-gateway-prod
prometheus.io/rule: alert_payment_latency
spec:
type: service
lifecycle: production
owner: payments-team
system: core-banking
providesApis:
- payment-api
dependsOn:
- resource:default/payment-postgres-db
Yazılım Şablonları (Software Templates) ile Self-Service
Backstage Scaffolder, geliştiricinin parametreleri girdiği ve arka planda bir Git repo’su oluşturup ilk commit’i attığı şablon mekanizmasıdır:
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: go-service-template
title: Go Microservice (Golden Path)
spec:
owner: platform-core
type: service
parameters:
- title: Servis Konfigürasyonu
required: [name, owner]
properties:
name:
type: string
description: Servis adı (kebab-case)
owner:
type: string
ui:field: OwnerPicker
steps:
- id: template
name: Dosyaları Hazırla
action: fetch:template
input:
url: ./skeleton
values:
name: ${{ parameters.name }}
owner: ${{ parameters.owner }}
- id: publish
name: GitHub Reposu Aç
action: publish:github
input:
allowedHosts: ['github.com']
description: Service created via Backstage
repoUrl: github.com?owner=acme-corp&repo=${{ parameters.name }}
defaultBranch: main
Neden Can Sıkar?
- Node.js Dependency Cehennemi: Her
yarn upgradeçalıştırdığınızda core plugin’lerin kırılma ihtimali çok yüksektir. - Frontend Eforu: Platform ekibinde React ve modern frontend toolchain’lerine hakim mühendis yoksa, arayüz geliştirmeleri kabusa dönüşür.
- State ve DB Yönetimi: Catalog senkronizasyonu için PostgreSQL tutmanız, cache stratejilerini (Redis) yönetmeniz ve auth mekanizmalarını tek tek implemente etmeniz gerekir.
2. Port (getport.io): Data-Model First ve Low-Code IDP
Port, Backstage’in tam zıddı bir felsefeyle gelir: “Siz platform mühendisisiniz, frontend geliştiricisi değilsiniz.” Port bir SaaS veya Control-Plane-Only çözümüdür. UI tarafında tek satır kod yazmazsınız; her şey Blueprints (Veri Modelleri) ve Actions (Eylemler) üzerinden kurgulanır.
Entity ve Blueprint Mantığı
Port’ta altyapınızı bir Graph Database gibi modelllersiniz. Bir Kubernetes Cluster’ı, bir Microservice’e; o Microservice, bir RDS instance’ına ve bir PagerDuty On-Call rotasyonuna bağlanabilir.
Bu modeli Terraform ile Infrastructure as Code (IaC) prensibine uygun şekilde yönetebilirsiniz:
# Port Terraform Provider ile Blueprint tanımı
resource "port_blueprint" "microservice" {
title = "Microservice"
icon = "Microservice"
identifier = "microservice"
properties = {
string_props = {
"language" = {
title = "Language"
enum = ["Go", "NodeJS", "Python"]
}
"slack_channel" = {
title = "Slack Channel"
}
}
}
}
resource "port_action" "scaffold_service" {
title = "Scaffold New Microservice"
icon = "Github"
identifier = "create_microservice"
blueprint = port_blueprint.microservice.identifier
trigger_type = "self-service"
user_inputs = {
string_props = {
"service_name" = {
title = "Service Name"
}
}
}
backend_invocation = {
type = "github"
org = "acme-corp"
repo = "platform-scaffolder-workflows"
workflow = "scaffold.yaml"
}
}
Kubernetes ve CI/CD Entegrasyonu: Port Exporter
Backstage katalog için repo taraması (polling) yaparken, Port event-driven çalışır. Cluster’ınıza kurduğunuz bir exporter agent, kaynakları dinamik olarak Port paneline push eder:
helm repo add port-labs https://port-labs.github.io/helm-charts
helm repo update
helm install port-k8s-exporter port-labs/port-k8s-exporter \
--set port.clientId="YOUR_CLIENT_ID" \
--set port.clientSecret="YOUR_CLIENT_SECRET" \
--values values.yaml
Burada values.yaml içinde basit JQ mapping’leri tanımlayarak Kubernetes CRD’lerinizi doğrudan UI component’lerine dönüştürebilirsiniz. Sıfır React, sıfır TypeScript.
Derin Kıyaslama: Hangi Senaryoda Hangisi?
1. Bakım Maliyeti (Total Cost of Ownership)
Backstage açık kaynak ve “bedava” gibi görünse de en az 1-2 platform mühendisinin tam zamanlı mesaisini tüketir. Güvenlik yamaları, TypeScript bağımlılıkları ve plugin güncellemeleri ciddi bir yüktür. Port ise SaaS lisanslama maliyetine sahiptir ancak kurulumu günler içinde tamamlanıp minimum eforla ayakta tutulur.
2. Esneklik ve Kurumsal Uyum
Kurum içi compliance politikalarınız multi-tenant SaaS kullanımına izin vermiyorsa, air-gapped ortamlarda çalışıyorsanız veya tamamen şirketinizin UI design system’ına (örneğin kurumsal Material UI teması) gömülmüş bir portal istiyorsanız Backstage tek seçenektir. Port hibrit çalışabilir (self-hosted exporter ve runner modelleriyle verinizi içeride tutabilir) ancak UI kontrolü her zaman onlardadır.
3. Self-Service Workflow Tetikleme
Backstage, kendi Scaffolder motoruna güvenir. Node.js backend’i üzerinde repo klonlar, commit atar ve PR açar. Port ise orkestrasyonu var olan araçlarınıza devreder: GitHub Actions, GitLab CI, Argo Workflows veya doğrudan bir Webhook. DevOps mühendisi için Port’un bu yaklaşımı çok daha doğaldır çünkü CI pipeline’ı yazmak, Scaffolder Action yazmaktan katbekat daha hızlıdır.
Karar Ağacı
Mimarinize karar verirken şu kontrol listesini uygulayabilirsiniz:
- Ekip Büyüklüğü: 150+ yazılımcınız ve sadece portal geliştirmeye adanmış 3+ kişilik bir Platform Engineering ekibiniz varsa: Backstage.
- Hızlı Değer Üretimi (Time-to-Value): 20-100 kişilik yazılımcı grubuna hizmet veren yalın bir DevOps ekibiyseniz ve iki hafta içinde bir katalog + self-service portal istiyorsanız: Port.
- Arayüz İhtiyacı: “Bize standart bir dashboard yetmez, production tracing ve billing verilerini custom canvas grafikleriyle basacağız” diyorsanız: Backstage.
- IaC ve GitOps Entegrasyonu: Portalı da Terraform ile yönetip altyapı state’i gibi kontrol etmek istiyorsanız: Port.
Özet
Platform Mühendisliğinin amacı yeni bir monorepo yazılım bakım yükü yaratmak değil, yazılım ekiplerinin önündeki altyapı bariyerlerini kaldırmaktır. Eğer bir yazılım eviyseniz ve temel yetkinliğiniz portal geliştirmek değilse, Port gibi modern platformlar operasyonel yükü minimize etmek için daha rasyoneldir. Ancak regülasyonların boğduğu, UI üzerinde tam egemenlik isteyen devasa bir kurumsal yapıdaysanız, Backstage’in getirdiği bakım yükünü göze alıp kendi iç ürününüzü inşa etmek doğru yoldur.