# API, CLI ve CI ile dağıtım

> Kapsamlı API token'ları, REST API v1, zefily komut satırı aracı ve GitHub Actions ya da GitLab CI'dan dağıtım.

## API token'ları

**Ayarlar → API token'ları** altında bir token oluşturun: bir **Ad**, bir geçerlilik süresi (**Geçerlilik süresi** gün sayısı ya da **Süresiz**) ve kullanabileceği **Kapsamlar**. Token **yalnızca bir kez** gösterilir; CI gizli değişkenlerinize kopyalayın. Token sizin adınıza, organizasyondaki rolünüzle ve kapsamlarıyla sınırlı olarak çalışır. Liste her token'ın ne zaman oluşturulduğunu ve son kullanıldığını gösterir; **Token'ı iptal et** onu anında devre dışı bırakır.

| Kapsam | İzin verdiği |
| --- | --- |
| `servers:read` | Sunucuları ve durumlarını listelemek |
| `sites:read` | Siteleri ve deploy ayarlarını listelemek |
| `sites:write` | Site oluşturmak (panelin doğrulamalarıyla) |
| `sites:deploy` | Deploy ve geri alma başlatmak |
| `jobs:read` | İşleri izlemek: bir deploy'unkini ya da bir sunucunun son işlerini |

Dakikadaki istek sayısı planınıza bağlıdır.

## REST API v1

Temel adres `https://app.zefily.com/api/v1`; token Bearer token olarak gönderilir:

```bash
curl -H "Authorization: Bearer $ZEFILY_TOKEN" https://app.zefily.com/api/v1/servers
```

| Yöntem ve yol | Kapsam |
| --- | --- |
| `GET /servers` | `servers:read` |
| `GET /servers/{server}` | `servers:read` |
| `GET /servers/{server}/sites` | `sites:read` |
| `POST /servers/{server}/sites` | `sites:write` |
| `GET /servers/{server}/sites/{site}` | `sites:read` |
| `POST /servers/{server}/sites/{site}/deploy` | `sites:deploy` |
| `POST /servers/{server}/sites/{site}/rollback` | `sites:deploy` |
| `GET /servers/{server}/jobs` | `jobs:read` |
| `GET /jobs/{job}` | `jobs:read` |

Her yazma işlemi panelle aynı denetimlerden geçer (doğrulama, plan limitleri, denetim kaydı).

## zefily CLI

Sisteminize uygun CLI'yı `https://dl.zefily.com/cli/` adresinden indirin (`zefily-linux-amd64`, `zefily-linux-arm64`, `zefily-darwin-arm64`, `zefily-windows-amd64.exe`…). `ZEFILY_TOKEN` değişkenine token'ınızı verin:

```bash
zefily servers
zefily sites [server]
zefily deploy <alan-adı|site-id> [--wait]
zefily rollback <alan-adı|site-id> [--release YYYYMMDDhhmmss] [--wait]
zefily job <id> [--wait]
zefily jobs <server> [--type site.deploy]
```

`--wait` işi izler ve iş başarılı olmazsa 1 durum koduyla çıkar; böylece pipeline deploy ile birlikte başarısız olur.

## CI'dan dağıtım

`sites:read`, `sites:deploy` ve `jobs:read` kapsamlı, CI gizli değişkeni olarak saklanan bir token kullanın.

GitHub Actions:

```yaml
deploy:
  needs: test
  if: github.ref == 'refs/heads/main'
  runs-on: ubuntu-latest
  steps:
    - name: Deploy
      env:
        ZEFILY_TOKEN: ${{ secrets.ZEFILY_TOKEN }}
      run: |
        curl -fsSLo zefily https://dl.zefily.com/cli/zefily-linux-amd64
        chmod +x zefily
        ./zefily deploy app.example.com --wait
```

GitLab CI:

```yaml
deploy:
  stage: deploy
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
  script:
    - curl -fsSLo zefily https://dl.zefily.com/cli/zefily-linux-amd64 && chmod +x zefily
    - ./zefily deploy app.example.com --wait
```

Deploy'lar bittiğinde haberdar olmak için `deploy finished` olayına bir [webhook](/tr/docs/bildirimler) ekleyin.

---
Kaynak: https://zefily.com/tr/docs/api-ve-cli
