> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# API Developer Multi Portal

> Apinizer üzerinde varsayılan portaldan bağımsız, izole çalışan yeni bir API Developer Portal'ın Kubernetes üzerinde kurulum ve yapılandırma adımları.

## Giriş

Bu doküman, **Apinizer API Developer (Geliştirici) Portal** üzerinde yeni bir portal kurulumunun nasıl yapılacağını açıklamaktadır.

Oluşturulan yeni API Developer Portal, varsayılan (default) olarak gelen API Developer Portal'den **bağımsız bir yapı** olarak çalışmaktadır. Yeni portal, aşağıdaki bileşenler kullanılarak izole bir şekilde sunulmaktadır:

* Ayrı Namespace
* Ayrı Pod
* Ayrı Secret
* Ayrı Service

Bu yapı sayesinde her portalın konfigürasyonu ve yönetimi birbirinden etkilenmeden sürdürülebilir.

## Kurulum Öncesi Adımlar

Apinizer API Portalı'nın kurulumuna başlamadan önce aşağıdaki ön koşulların sağlandığından emin olunmalıdır:

<CardGroup cols={2}>
  <Card title="Apinizer Kurulumu" icon="server" href="/tr/setup/apinizer/apinizer">
    API Manager'ın kurulu ve çalışır durumda olması gerekmektedir.
  </Card>
</CardGroup>

<Warning>
  Lisans anahtarınızda **API Developer Portal** modülünün tanımlı ve aktif olması gerekmektedir.
</Warning>

## Kurulum Adımları

API Portal kurulumu, Kubernetes yönetim şekline göre iki farklı yöntemle yapılabilir:

1. **Otomatik Kurulum:** Kubernetes yönetimi Apinizer üzerinden yapılıyorsa, API Manager arayüzü kullanılarak kurulum yapılabilir.
2. **Manuel Kurulum:** Kubernetes yönetimi Apinizer üzerinden yapılmıyorsa, Kubernetes kümesine manuel manifest (YAML) dosyaları uygulanarak kurulum yapılır ve ardından API Manager ile bağlantı sağlanır.

### 3.1. Kişisel API Erişimi İçin Token Oluşturma

Kurulum sırasında API Manager ile iletişim kurmak için yetkili bir token gereklidir. Token bilgileri, yeni bir token oluşturarak veya **Profilim** sayfasında mevcut bir token kullanılarak elde edilebilir. Personel tokenları genellikle `apnz_` öneki ile başlar.

<Info>
  Token oluşturma işlemi için API Manager'da **Profilim** sayfasına giderek yeni bir token oluşturabilirsiniz.
</Info>

<Frame caption="Token oluşturma - Profilim sayfasından kişisel API token oluşturma">
  <img src="https://mintcdn.com/apinizer/74TMnSOZDvjtaICJ/images/setup/apinizer/api-portal/01-token-olusturma.png?fit=max&auto=format&n=74TMnSOZDvjtaICJ&q=85&s=c44abc15a0c090f2970ef92462fb82c2" alt="Token Oluşturma Ekranı" width="1200" height="800" style={{ borderRadius: '0.5rem' }} data-path="images/setup/apinizer/api-portal/01-token-olusturma.png" />
</Frame>

### 3.2. API Developer Portal Kurulumu

Yönetim şeklinize göre aşağıdaki başlıklardan **sadece birini** uygulayınız.

#### 3.2.1. API Developer Portal Kurulumu (API Manager Üzerinden)

Kubernetes yönetimi Apinizer üzerinden yapılıyorsa, **Genel Ayarlar** menüsünde "Kubernetes Yönetimi" seçeneğinin aktif olduğundan emin olun.

1. API Manager'da **Yönetim → Sunucu Yönetimi → Kubernetes Resources** sayfasına gidin.
2. **Deployment & Pods** sekmesinden yeni API Portal'ı etkinleştirin.

<Frame caption="Kubernetes Resources sayfası - API Portal etkinleştirme">
  <img src="https://mintcdn.com/apinizer/74TMnSOZDvjtaICJ/images/setup/apinizer/api-portal/02-kubernetes-resources.png?fit=max&auto=format&n=74TMnSOZDvjtaICJ&q=85&s=2acc8694b19b9902c0d60fa4082b6e72" alt="Kubernetes Resources Menüsü" width="1200" height="600" style={{ borderRadius: '0.5rem' }} data-path="images/setup/apinizer/api-portal/02-kubernetes-resources.png" />
</Frame>

3. Açılan diyalog penceresinde, yeni portal için gerekli tanımları yapın.

<Frame caption="API Portal kurulum diyaloğu - Gerekli ayarların yapılandırılması">
  <img src="https://mintcdn.com/apinizer/74TMnSOZDvjtaICJ/images/setup/apinizer/api-portal/03-api-portal-dialog.png?fit=max&auto=format&n=74TMnSOZDvjtaICJ&q=85&s=3521f7755c5c7e7a26a3f37966f84f50" alt="API Portal Kurulum Diyaloğu" width="1200" height="800" style={{ borderRadius: '0.5rem' }} data-path="images/setup/apinizer/api-portal/03-api-portal-dialog.png" />
</Frame>

<Info>
  **Portal ID Bilgisi:** Kurulum sırasında istenecek olan **Portal ID** bilgisini; **Administration > Portal > Settings > Portal** menüsünde, ilgili portalın kartında bulabilirsiniz.
</Info>

<img
  src="https://mintcdn.com/apinizer/LAWQyEt-1arDa5J_/images/setup/apinizer/api-portal/portal-id.png?fit=max&auto=format&n=LAWQyEt-1arDa5J_&q=85&s=b731d6aee1812fa4514b69eb3604e70b"
  alt="Portal ID Konumu"
  style={{
width: "100%",
height: "auto",
maxWidth: "100%",
borderRadius: "0.5rem"
}}
  width="1900"
  height="910"
  data-path="images/setup/apinizer/api-portal/portal-id.png"
/>

**Konfigürasyon Parametreleri:**

| Alan                                         | Açıklama                                                                                                                        |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Apinizer Portal Management API URL**       | Portalın Apinizer yönetim API'lerini tüketebilmesi için gerekli adrestir.<br />Örnek: `http://<API_MANAGER_ACCESS_URL>:<PORT>/` |
| **Apinizer Portal Management API Key/Token** | Portalın yönetim API'lerine erişimi için gereken token bilgisidir (Bölüm 3.1'de oluşturulan).                                   |
| **API Portal ID**                            | Oluşturulacak yeni portalın benzersiz kimliğini (UNIQ ID) belirtir.                                                             |
| **Sayısı (Count)**                           | Çalışacak Gateway engine (Pod) sayısını belirtir (ReplicaSet).                                                                  |
| **Servis Portu (Service Port)**              | Servisin dışarıya açılacağı portu belirtir (NodePort).                                                                          |
| **Node Listesi (Node List)**                 | Pod'ların hangi Kubernetes Worker sunucularında çalışacağını belirler (NodeAffinity).                                           |
| **CPU / Bellek**                             | Pod başına ayrılacak maksimum CPU ve RAM limitleridir.                                                                          |
| **Ek Değişkenler**                           | Pod içinde çalıştırılacak ortam değişkenleridir (Environment Variables).                                                        |
| **Host Takma Adları**                        | `etc/hosts` dosyasına eklenecek IP-Host eşleşmeleridir (HostAlias).                                                             |

<Info>
  **Java Options ve Bellek Ayarı**

  Ek değişkenler alanındaki **Java Options** ayarı için:

  * `-Xmx` ve `-Xms` yerine dinamik bellek yönetimi kullanılır.
  * Varsayılan olarak `-XX:MaxRAMPercentage=75.0` kullanılır (Konteyner belleğinin %75'i).
  * 1 GB limitli bir pod için JVM Heap yaklaşık 750 MB olacaktır.
</Info>

#### 3.2.2. API Developer Portal Kurulumu (Manuel / API Manager Dışı)

Apinizer, Kubernetes kümesini yönetmiyorsa, aşağıdaki adımları takip ederek manuel kurulum yapabilirsiniz.

<Warning>
  **Önemli:** Bu kurulumda `apinizer-portal-2` gibi farklı bir isimlendirme kullanılarak varsayılan portaldan ayrıştırma yapılır.
</Warning>

**Adım 1: Secret Oluşturma**

Öncelikle API Manager erişim bilgilerini ve Portal ID'yi içeren bir Kubernetes Secret oluşturulmalıdır.

```bash theme={null}
# Değişkenleri kendi ortamınıza göre düzenleyin
API_MANAGER_URL='<APINIZER_MANAGEMENT_API_BASE_URL>' # Örn: http://apimanager-ui-ip:port
API_MANAGER_APIKEY='<API_KEY>' # Bölüm 3.1'den alınan token
API_PORTAL_ID='<API_PORTAL_ID>' # Portal Ayarlarından alınan ID

# Base64 Encode İşlemi
echo -n ${API_MANAGER_URL} | base64
# Çıktıyı <ENCODED_URL> yerine yazın

echo -n ${API_MANAGER_APIKEY} | base64
# Çıktıyı <ENCODED_API_KEY> yerine yazın

echo -n ${API_PORTAL_ID} | base64
# Çıktıyı <ENCODED_API_PORTAL_ID> yerine yazın
```

**Adım 2: Secret Dosyasının Oluşturulması**

Aşağıdaki içeriğe sahip `api-portal-secret-2.yaml` dosyasını oluşturunuz.

```yaml theme={null}
apiVersion: v1
kind: Namespace
metadata:
  name: apinizer-portal-2
---
apiVersion: v1
kind: Secret
metadata:
  name: apinizer-portal-secret-2
  namespace: apinizer-portal-2
type: Opaque
data:
  apinizerManagementApiBaseUrl: <ENCODED_URL>
  apiKey: <ENCODED_API_KEY>
  apiPortalId: <ENCODED_API_PORTAL_ID>
```

Oluşturulan secret dosyasını uygulayınız:

```bash theme={null}
kubectl apply -f api-portal-secret-2.yaml
```

**Adım 3: Deployment ve Service Oluşturma**

Aşağıdaki içeriğe sahip `apinizer-portal-deployment-2.yaml` dosyasını oluşturunuz. Bu dosya hem Deployment hem de Service tanımlarını içerir.

```yaml theme={null}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: apinizer-portal-2
  namespace: apinizer-portal-2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apinizer-portal-2
      version: v1
  template:
    metadata:
      labels:
        app: apinizer-portal-2
        version: v1
    spec:
      containers:
        - name: apinizer-portal-app
          image: apinizercloud/apiportal:<APINIZER_VERSION>
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: prod
            - name: JAVA_OPTS
              value: -XX:MaxRAMPercentage=75.0
            - name: API_PORTAL_MANAGEMENT_API_BASE_URL
              valueFrom:
                secretKeyRef:
                  key: apinizerManagementApiBaseUrl
                  name: apinizer-portal-secret-2
            - name: API_PORTAL_MANAGEMENT_API_KEY
              valueFrom:
                secretKeyRef:
                  key: apiKey
                  name: apinizer-portal-secret-2
            - name: API_PORTAL_ID
              valueFrom:
                secretKeyRef:
                  key: apiPortalId
                  name: apinizer-portal-secret-2
          livenessProbe:
            failureThreshold: 13
            httpGet:
              path: /apinizer/management/health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          ports:
            - containerPort: 8080
              protocol: TCP
          readinessProbe:
            failureThreshold: 13
            httpGet:
              path: /apinizer/management/health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          resources:
            limits:
              cpu: "1"
              memory: 1Gi
          startupProbe:
            failureThreshold: 13
            httpGet:
              path: /apinizer/management/health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  name: apinizer-portal-service-2
  namespace: apinizer-portal-2
  labels:
    app: apinizer-portal-2
spec:
  selector:
    app: apinizer-portal-2
  type: NodePort
  ports:
    - name: http
      port: 8080
      nodePort: <API_DEVELOPER_PORTAL_2_PORT>
```

Oluşturulan deployment ve service dosyasını uygulayınız:

```bash theme={null}
kubectl apply -f apinizer-portal-deployment-2.yaml
```

### 3.3. API Developer Portal'in API Manager ile Entegrasyonu

<Warning>
  **Önemli:** Bu aşamaya kadar portalın teknik kurulumu tamamlanmıştır ancak API'lerin görüntülenmesi ve yetkilendirme işlemleri için entegrasyonun tamamlanması şarttır.
</Warning>

API Manager'da, **Portal → Ayarlar → Portal** sayfasına giderek, kurumunuza uygun tanımları yapınız.
Detaylı bilgi için [Portal Ayarları](/tr/api-portal/api-portal-ayarlari) dökümanını inceleyebilirsiniz.

### 3.4. API Developer Portal'i SSL ile Başlatma

İstenilen durumlarda API Developer Portal SSL sertifikası ile güvenli erişime (HTTPS) açılabilir.
Detaylı bilgi için [API Developer Portal SSL Yapılandırması](/tr/operations/yonetici-kilavuzlari/api-developer-portal-ssl) dökümanını inceleyebilirsiniz.

## Erişim

Yukarıdaki adımlar tamamlandıktan ve Kubernetes üzerinde Pod'lar `Running` durumuna geldikten sonra, yeni portala aşağıdaki adresten erişebilirsiniz:

```
http://<KUBERNETES_WORKER_IP>:<API_DEVELOPER_PORTAL_2_PORT>
```
