> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Kalan sağlayıcı anahtarlarını toplayın

Kalan hizmetler için kısa yol göstericiler: AI sağlayıcıları, Trigger.dev, S3 depolama, Sentry veya PostHog, Turnstile ve alan adınız.

## Bu sayfa nasıl kullanılır

Aşağıdaki her bölüm eksiksiz bir kurulum yol göstericisidir: hesabı oluşturun, anahtarı bulun, env adlarını ayarlayın, doğrulayın. Yalnızca ürününüzün gönderdiği hizmetlerin bölümlerini alın — AI özelliği olmayan bir site asla ilki gerektirmez ve kit, buradaki her bölüm atlanmış olarak çalışmaya devam eder.

Her yerdeki aynı gizli kuralları: API anahtarları ve webhook gizli anahtarları yalnızca sunucuda kalır, yalnızca `NEXT_PUBLIC_`/`EXPO_PUBLIC_` ön ekli değerler istemciye ulaşabilir, üretim gizli değerleri hostun gizli deposunda yaşar ve geliştirme sunucusu env'i ancak yeniden başlatmada yeniden okur.

[Hesap kontrol listesine dönün](https://supastack.dev/tr/docs/web/external-accounts.md)


## AI sağlayıcı anahtarları

Kit'in `AI_PROVIDER`'ı `openai`, `anthropic`, `openai-compatible` ve `openrouter` kabul eder — ayrıca varsayılan yerel yedek `fake`. Birini seçin; sağlayıcı anahtarı gereken tek hesaptır çünkü model kimlikleri ve fiyatları env değişkenlerinden değil kit'in veritabanı kataloğundan gelir.

OpenAI: [platform.openai.com](https://platform.openai.com) → API keys → Create new secret key → `sk-…` kopyalayın → `OPENAI_API_KEY`. Anthropic: [console.anthropic.com](https://console.anthropic.com) → API Keys → Create Key → `sk-ant-…` → `ANTHROPIC_API_KEY`. İkisi de belirteç başına faturalandırır — birkaç dolarlık kredi geliştirmeyi karşılar.

OpenRouter her katalog modelini tek anahtarla yönlendirir: [openrouter.ai](https://openrouter.ai) → Keys → Create Key → `sk-or-…` → `AI_PROVIDER=openrouter` artı `OPENROUTER_API_KEY`; isteğe bağlı `OPENROUTER_APP_NAME`/`OPENROUTER_SITE_URL` atıf başlıkları gönderir. `openai-compatible` her OpenAI biçimli uç noktayı kapsar: `OPENAI_COMPATIBLE_API_KEY` artı `OPENAI_COMPATIBLE_BASE_URL`.

Doğrulayın: yeniden başlatın, bir AI işi çalıştırın ve deterministik sahte yerine gerçek model yanıtı bekleyin. Anahtarı adlandıran bir başlangıç hatası, sağlayıcı bayrağının anahtarı olmadan açık olduğu anlamına gelir. Gerçek bir yanıt ayrıca aşağıdaki Trigger.dev bölümünden `JOB_PROVIDER=trigger` ve kit kataloğunda etkin bir model gerektirir — [AI'ı kurun](https://supastack.dev/tr/docs/web/setup-ai.md) o kurulumu kapsar.

```
# apps/web/.env.local — pick ONE provider
AI_PROVIDER=openai
OPENAI_API_KEY=sk-…

# or AI_PROVIDER=anthropic
# ANTHROPIC_API_KEY=sk-ant-…

# or AI_PROVIDER=openrouter
# OPENROUTER_API_KEY=sk-or-…

# or AI_PROVIDER=openai-compatible
# OPENAI_COMPATIBLE_API_KEY=…
# OPENAI_COMPATIBLE_BASE_URL=https://your-endpoint/v1
```


## Trigger.dev

Ürün gerçek arka plan işi çalıştırmaları gerektirmedikçe atlayın — `JOB_PROVIDER=local`, işleri onları çalıştırmadan bellekte kuyruğa alır ve geliştirme için doğrudur.

1. [app.trigger.dev](https://app.trigger.dev) → kaydolun → proje oluşturun.

2. İki değer kopyalayın: projenin settings veya gösterge paneli URL'sindeki proje referansı `proj_…` → `TRIGGER_PROJECT_REF` ve projenin API keys sayfasındaki gizli anahtar (geliştirme ortamı için `tr_dev_…`, üretim için `tr_prod_…`) → `TRIGGER_SECRET_KEY`. İkisi de yalnızca sunucuda kalır.

3. Kit'in görevleri zaten `apps/web/trigger` içinde yaşar ve `apps/web/trigger.config.ts`, `TRIGGER_PROJECT_REF` okur. `apps/web` içinden `npx trigger.dev@latest dev` çalıştırın — görevleri projenize kaydeder ve bunları geliştirme anahtarına karşı yerelde çalıştırır.

Doğrulayın: dev komutu kayıtlı görevleri günlüğe kaydeder; uygulamada birini kuyruğa alın ve gösterge panelinin Runs listesinde çalışmasını izleyin. Dağıtılmış ortamlar görev setini yayınlamak için `corepack pnpm --filter @supastack/web trigger:deploy` çalıştırır.

```
# apps/web/.env.local
JOB_PROVIDER=trigger
TRIGGER_PROJECT_REF=proj_…
TRIGGER_SECRET_KEY=tr_dev_…   # tr_prod_… in production

# run the worker alongside the app, from apps/web:
cd apps/web
npx trigger.dev@latest dev
```


## S3 uyumlu depolama (Cloudflare R2)

Ürün dosya saklamadıkça atlayın — `STORAGE_PROVIDER=memory` geliştirme için yüklemeleri işlem içinde tutar.

Herhangi bir S3 uyumlu bucket çalışır; Cloudflare R2 ücretsiz katman dostu seçimdir. 1. [dash.cloudflare.com](https://dash.cloudflare.com) → R2 Object Storage → Create bucket'ı açın, ad verin ve varsayılan konum ipucunu koruyun.

2. R2 genel bakışına dönüp Manage R2 API Tokens → Create API token → Object Read & Write izni, o bucket'a kapsamlı → Create'yi açın. Access Key ID, Secret Access Key ve gösterilen S3 uç noktasını — `https://<account-id>.r2.cloudflarestorage.com` — kopyalayın.

3. Aşağıdaki env adlarını ayarlayın. `STORAGE_REGION=auto` R2 geleneğidir — kit varsayılan olarak `us-east-1` kullanır ve R2 de onu kabul eder. `STORAGE_FORCE_PATH_STYLE`, özel uç noktalar için zaten varsayılan olarak açıktır ve R2 bunu ister. Genel dosyaları sunmak ayrıca `STORAGE_PUBLIC_BASE_URL` veya CDN bağlantısı gerektirir; özel dosyalar daha fazlasına ihtiyaç duymaz.

Doğrulayın: yeniden başlatın ve uygulama üzerinden yükleyin — nesne R2 bucket gezgininde görünür. İmza veya 403 hatası, belirtecin o bucket'ta nesne okuma/yazma izni olmadığı anlamına gelir; doğru kapsamlı yeni bir belirteç oluşturun.

```
# apps/web/.env.local
STORAGE_PROVIDER=s3
STORAGE_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
STORAGE_REGION=auto
STORAGE_BUCKET=your-bucket
STORAGE_ACCESS_KEY_ID=…          # server-only
STORAGE_SECRET_ACCESS_KEY=…      # server-only
# STORAGE_PUBLIC_BASE_URL=       # optional public-URL base
```


## Sentry veya PostHog (isteğe bağlı)

Tamamen isteğe bağlı: her gözlemlenebilirlik değeri varsayılan olarak ayarlanmamıştır ve kit onlarsız da iyi çalışır — üretimde hata raporları ve analitik istediğinizde bunu ekleyin.

Hatalar için Sentry: [sentry.io](https://sentry.io) → proje oluşturun → Next.js platformunu seçin → kurulum ekranı DSN `https://…@….ingest.sentry.io/…` gösterir → `SENTRY_DSN`. İstisnalar daha sonra correlation-id etiketleriyle Sentry'ye ulaşır; ücretsiz katman başlamak için yeterlidir.

Bunun yerine ürün analitiği için PostHog: [posthog.com](https://posthog.com) → proje oluşturun → proje API anahtarını `phc_…` kopyalayın → `NEXT_PUBLIC_POSTHOG_KEY` artı `NEXT_PUBLIC_POSTHOG_HOST` (`https://us.i.posthog.com` veya AB hostunuz). Bu ikisi tasarım gereği genel tarayıcı değerleridir; `SENTRY_DSN` sunucu tarafında kalır. `ALERT_WEBHOOK_URL` isteğe bağlı olarak hata uyarılarını Slack uyumlu bir uç noktaya gönderir.

Doğrulayın: yeniden başlatın, bir test istisnası oluşturun (veya Sentry'nin örnek olayını oynatın) ve projenin Issues listesine düştüğünü onaylayın.

```
# apps/web/.env.local — all optional
SENTRY_DSN=https://…@….ingest.sentry.io/…

NEXT_PUBLIC_POSTHOG_KEY=phc_…
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com

# ALERT_WEBHOOK_URL=https://hooks.slack.com/services/…
```


## Cloudflare Turnstile

Genel formlar ve kimlik bilgisi uç noktaları için bot koruması — `CAPTCHA_PROVIDER=off` varsayılandır, bu yüzden kaydı yabancılara açmadan önce ekleyin. Ücretsizdir.

1. [dash.cloudflare.com](https://dash.cloudflare.com) → Turnstile → Add widget → ad verin ve host adlarını listeleyin: geliştirme için `localhost` artı gerçek alan adınız → Create.

2. İki değeri de kopyalayın: Site Key — tasarım gereği geneldir, widget'ın içinde işlenir → `NEXT_PUBLIC_TURNSTILE_SITE_KEY` — ve sunucunun doğrulamak için kullandığı Secret Key → `TURNSTILE_SECRET_KEY`.

3. `CAPTCHA_PROVIDER=turnstile` açar; başlangıç hangi anahtar eksikse onu adlandırarak başarısız olur. Captcha rehberi widget'ın tam olarak hangi yüzeyleri koruduğunu listeler.

Doğrulayın: `/auth` veya iletişim formunu açın — widget işlenir; çözülmemiş meydan okumayla gönderimler reddedilir. Widget hiç yüklenmezse, gezdiğiniz host adı widget'ın listesinde değildir.

[Turnstile'in hangi formları koruduğunu görün](https://supastack.dev/tr/docs/web/captcha.md)

```
# apps/web/.env.local
CAPTCHA_PROVIDER=turnstile
NEXT_PUBLIC_TURNSTILE_SITE_KEY=0x…   # public by design
TURNSTILE_SECRET_KEY=0x…             # server-only
```


## Kendi alan adınız

Herhangi bir kayıt şirketinden tek satın alma — Cloudflare Registrar, Porkbun, Namecheap hepsi çalışır. Buradan env'e kopyalanan hiçbir şey yok; alan adı yol boyunca yapılandırdığınız Services ID, Resend DNS'i, Turnstile host adları ve OAuth return URL'lerinde görünür.

Uygulamaya yöneltmenin iki yolu: Cloud Run için dağıtım rehberindeki alan adı eşlemesini kullanın — birkaç konsol tıklaması artı Google'ın listelediği DNS kayıtları. Veya DNS'i Cloudflare nameserver'larına taşıyın (kayıt şirketi iki kaydı değiştirir) — isteğe bağlı ama aynı zamanda R2 genel bucket'ları ve Turnstile host adlarını tek yerde yönetmenin düzenli yoludur.

[Cloud Run'da alan adını eşleyin](https://supastack.dev/tr/docs/web/deploy-google-cloud.md)

[Ardından veritabanını kurun](https://supastack.dev/tr/docs/web/setup-database.md)


Kuruluma devam etmek için [Veritabanını kurun](https://supastack.dev/tr/docs/web/setup-database.md) kılavuzunu okuyun.


## Sonraki

[Veritabanını kurun](https://supastack.dev/tr/docs/web/setup-database.md)
