بوابات المطورين مع Backstage

TechDocs والإضافات

3 دقيقة للقراءة

TechDocs يجلب التوثيق إلى Backstage باستخدام نهج "التوثيق كرمز"، بينما الإضافات توسع وظائف Backstage مع تكاملات لنظامك البيئي الكامل من الأدوات.

TechDocs: التوثيق كرمز

TechDocs يعرض توثيق Markdown مباشرة في Backstage:

التوثيق التقليدي:
┌─────────────┬─────────────┬─────────────┐
│  Confluence │    Notion   │    Wiki     │
└─────────────┴─────────────┴─────────────┘
"التوثيق دائماً قديم ويصعب إيجاده"

TechDocs:
┌─────────────────────────────────────────┐
│            BACKSTAGE                     │
│  ┌───────────────────────────────────┐  │
│  │ الخدمة: user-service              │  │
│  │ [نظرة عامة] [API] [التوثيق] [CI/CD]│  │
│  │                                   │  │
│  │  📄 البدء                         │  │
│  │  📄 الهندسة المعمارية              │  │
│  │  📄 مرجع API                      │  │
│  │  📄 كتاب التشغيل                  │  │
│  └───────────────────────────────────┘  │
└─────────────────────────────────────────┘
"التوثيق يعيش مع الكود، دائماً محدث"

إعداد TechDocs

أضف TechDocs لخدمتك:

# في جذر مستودعك:
# mkdocs.yaml
site_name: توثيق خدمة المستخدم
nav:
  - الرئيسية: index.md
  - البدء: getting-started.md
  - الهندسة المعمارية: architecture.md
  - مرجع API: api.md
  - كتاب التشغيل: runbook.md

plugins:
  - techdocs-core

# المرجع في catalog-info.yaml
# catalog-info.yaml
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: user-service
  annotations:
    backstage.io/techdocs-ref: dir:.  # التوثيق في نفس المستودع
    # أو خارجي: url:https://github.com/acme/user-service-docs

أنشئ توثيقك:

# docs/index.md
# خدمة المستخدم

مرحباً بك في توثيق خدمة المستخدم.

## روابط سريعة

- [البدء](getting-started.md)
- [مرجع API](api.md)
- [كتاب التشغيل](runbook.md)

## نظرة عامة

خدمة المستخدم تتعامل مع المصادقة وإدارة ملف المستخدم.

## الهندسة المعمارية

```mermaid
graph LR
    A[العميل] --> B[بوابة API]
    B --> C[خدمة المستخدم]
    C --> D[(PostgreSQL)]
    C --> E[مزود المصادقة]

التواصل

  • المالك: فريق الخلفية
  • Slack: #team-backend
  • المناوبة: PagerDuty

## تكوين TechDocs

كوّن TechDocs في `app-config.yaml`:

```yaml
# app-config.yaml
techdocs:
  builder: 'local'  # 'local' أو 'external'
  generator:
    runIn: 'local'  # 'local' أو 'docker'
  publisher:
    type: 'local'   # 'local', 'awsS3', 'googleGcs', 'azureBlobStorage'

    # للإنتاج مع S3:
    # type: 'awsS3'
    # awsS3:
    #   bucketName: 'acme-techdocs'
    #   region: 'us-east-1'

نظام الإضافات البيئي

قوة Backstage تأتي من الإضافات. إليك الأساسية:

# إضافات Backstage الأساسية
plugins:

  infrastructure:
    - name: "@backstage/plugin-kubernetes"
      purpose: "إظهار حالة البود، السجلات، الأحداث"
      config: |
        kubernetes:
          serviceLocatorMethod:
            type: multiTenant
          clusterLocatorMethods:
            - type: config
              clusters:
                - name: production
                  url: https://k8s.acme.com
                  authProvider: serviceAccount

    - name: "@backstage/plugin-catalog-backend-module-aws"
      purpose: "اكتشاف موارد AWS"

  ci_cd:
    - name: "@backstage/plugin-github-actions"
      purpose: "إظهار حالة GitHub Actions"

    - name: "@roadiehq/backstage-plugin-argo-cd"
      purpose: "إظهار نشر ArgoCD"

  monitoring:
    - name: "@backstage/plugin-prometheus"
      purpose: "عرض مقاييس Prometheus"

    - name: "@grafana/plugin-grafana"
      purpose: "تضمين لوحات Grafana"

  incident_management:
    - name: "@backstage/plugin-pagerduty"
      purpose: "إظهار المناوبة، إنشاء الحوادث"

    - name: "@backstage/plugin-opsgenie"
      purpose: "تكامل OpsGenie"

  security:
    - name: "@backstage/plugin-security-insights"
      purpose: "إظهار تنبيهات Dependabot"

    - name: "@roadiehq/backstage-plugin-snyk"
      purpose: "عرض ثغرات Snyk"

تثبيت الإضافات

أضف الإضافات لتطبيق Backstage:

# إضافة إضافة (من جذر تطبيق backstage)
yarn add --cwd packages/app @backstage/plugin-kubernetes

# لإضافات الخلفية
yarn add --cwd packages/backend @backstage/plugin-kubernetes-backend

سجّل في تطبيقك:

// packages/app/src/App.tsx
import { KubernetesPage } from '@backstage/plugin-kubernetes';

const routes = (
  <FlatRoutes>
    {/* ... مسارات أخرى */}
    <Route path="/kubernetes" element={<KubernetesPage />} />
  </FlatRoutes>
);

مثال إضافة Kubernetes

إظهار حالة Kubernetes في الوقت الفعلي:

# catalog-info.yaml - تمكين إضافة Kubernetes
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: user-service
  annotations:
    # ربط موارد Kubernetes
    backstage.io/kubernetes-id: user-service
    backstage.io/kubernetes-namespace: production
    backstage.io/kubernetes-label-selector: 'app=user-service'
# app-config.yaml - تكوين Kubernetes
kubernetes:
  serviceLocatorMethod:
    type: 'multiTenant'
  clusterLocatorMethods:
    - type: 'config'
      clusters:
        - name: production
          url: ${K8S_CLUSTER_URL}
          authProvider: serviceAccount
          serviceAccountToken: ${K8S_SERVICE_ACCOUNT_TOKEN}
          skipTLSVerify: false
          skipMetricsLookup: false

بناء إضافات مخصصة

أنشئ إضافات خاصة بالمؤسسة:

// plugins/acme-cost-insights/src/plugin.ts
import {
  createPlugin,
  createRoutableExtension,
} from '@backstage/core-plugin-api';

export const acmeCostInsightsPlugin = createPlugin({
  id: 'acme-cost-insights',
  routes: {
    root: rootRouteRef,
  },
});

export const AcmeCostInsightsPage = acmeCostInsightsPlugin.provide(
  createRoutableExtension({
    name: 'AcmeCostInsightsPage',
    component: () =>
      import('./components/CostInsightsPage').then(m => m.CostInsightsPage),
    mountPoint: rootRouteRef,
  }),
);

سوق الإضافات

اعثر على المزيد من الإضافات في:

في الوحدة التالية، سنستكشف Crossplane لتوفير البنية التحتية—المحرك الذي يشغل طلبات البنية التحتية ذاتية الخدمة. :::