Skip to content

Ortam Değişkenleri

Tüm Secret ve Public anahtarlar — STRIPE, DATABASE, BUNNY ve diğerleri, açıklamalı liste.

Bu sayfada Achidemy projesinde kullanılan tüm ortam değişkenleri, Secret (gizli) ve Public (açık) olarak açıklamalı listelenir. Yerel geliştirme için .dev.vars, production için Cloudflare secrets veya wrangler.toml içindeki [vars] kullanılır.

Production (Achidemy): Canlı uygulama https://achidemy.net apex adresinde çalışır; B2B kiracı panelleri https://<subdomain>.achidemy.net (wildcard route) üzerinden sunulur. BASE_URL ve BETTER_AUTH_URL production için https://achidemy.net olmalıdır. Veritabanı Neon PostgreSQL (pooler; örn. us-east-1); Worker’da bağlantı Hyperdrive + DATABASE_URL secret (veya yerel localConnectionString / .dev.vars) ile yapılır.

DeğişkenTürAçıklama
DATABASE_URLSecretNeon PostgreSQL bağlantı dizesi (?sslmode=require). Yerelde .dev.vars; production’da wrangler secret put DATABASE_URL (Hyperdrive’ın döndürdüğü connection string veya doğrudan Neon pooler URL’si — mevcut deploy mimarisine göre). Yerel wrangler dev için ayrıca wrangler.toml[[hyperdrive]]localConnectionString aynı Neon veritabanına işaret etmelidir.

DeğişkenTürAçıklama
STRIPE_SECRET_KEYSecretStripe API gizli anahtarı. Test: sk_test_..., Canlı: sk_live_.... Ödemeler, abonelik ve Connect işlemleri için gerekli.
STRIPE_WEBHOOK_SECRETSecretStripe webhook imza doğrulama anahtarı (whsec_...). Yerelde stripe listen --forward-to localhost:8787/api/stripe/webhook çalıştırıldığında CLI’dan alınır.
STRIPE_PUBLIC_KEYPublicStripe publishable anahtarı (pk_test_... / pk_live_...). İstemci tarafında Stripe.js ile kullanılır. wrangler.toml içinde vars olarak tanımlanabilir.
STRIPE_PRICE_ID_MONTHLYPublicAylık abonelik fiyat ID’si (price_...).
STRIPE_PRICE_ID_YEARLYPublicYıllık abonelik fiyat ID’si (price_...).
STRIPE_B2B_PRICE_IDPublicB2B (company) per-seat abonelik Price ID’si (price_...). company.billing checkout’unda mode: subscription ile kullanılır; quantity = organizations.seatLimit.

DeğişkenTürAçıklama
BUNNY_LIBRARY_IDPublicBunny Video kütüphane ID’si. Video stream ve yönetim için.
BUNNY_API_KEYSecretBunny API anahtarı. Video/storage API istekleri için. Altyazı (caption) yükleme/silme ve eski video upload akışları için kullanılabilir.
BUNNY_STREAM_API_KEYSecret (opsiyonel, tavsiye edilen)Bunny Stream API için özel anahtar. Direct upload (TUS) video yükleme sistemi ve altyazı (caption) işlemleri için bu anahtar tercih edilir; kodda BUNNY_STREAM_API_KEY yoksa otomatik olarak BUNNY_API_KEY fallback olarak kullanılır.
BUNNY_STORAGE_ZONEPublicBunny Storage zone adı. Dosya yükleme (ders kaynakları, sohbet resimleri vb.) için.
BUNNY_STORAGE_KEYSecretBunny Storage zone API anahtarı.
BUNNY_VIDEO_SECURITY_KEYSecretBunny stream güvenlik anahtarı (signed URL üretimi için).

DeğişkenTürAçıklama
BETTER_AUTH_SECRETSecretBetter Auth oturum/şifreleme için kullanılan rastgele gizli anahtar.
BETTER_AUTH_URLPublicUygulama kök URL’i (örn. http://localhost:8787, https://achidemy.net). OAuth callback ve oturum için.
RESEND_API_KEYSecretResend e-posta API anahtarı (re_...). E-posta doğrulama ve şifre sıfırlama için (isteğe bağlı).
EMAIL_FROMPublicGönderen e-posta adresi (örn. Achidemy <[email protected]>).

DeğişkenTürAçıklama
BASE_URLPublicUygulama kök URL’i. E-posta linkleri, OAuth callback ve mutlak URL üretimi için. Yerelde http://localhost:8787 veya http://localhost:5173; production’da https://achidemy.net.

DeğişkenTürAçıklama
SENTRY_DSNPublicSentry proje DSN’i. Worker (backend) tarafında hata izleme için. Yerelde .dev.vars; production’da wrangler.toml [vars] veya wrangler secret put SENTRY_DSN.
VITE_SENTRY_DSNPublicAynı DSN; client (tarayıcı) bundle’da build zamanında kullanılır. Yerelde .env veya .dev.vars; production build için CI ortamında veya .env.production ile tanımlanmalı.

Not: DSN boşsa Sentry event göndermez; uygulama normal çalışır. Sentry çalışma yapısı için Monitoring ve Observability sayfasına bakın.


DeğişkenTürAçıklama
VITE_ALGOLIA_APP_IDPublicAlgolia uygulama ID’si. Navbar anlık arama (client) ve backend senkronizasyonu için. wrangler.toml [vars] içinde tanımlanır.
VITE_ALGOLIA_SEARCH_KEYPublicAlgolia salt-okunur arama anahtarı. Client (tarayıcı) tarafında algoliasearch/lite ile kullanılır. wrangler.toml [vars] içinde tanımlanır.
ALGOLIA_ADMIN_KEYSecretAlgolia yönetici (write) anahtarı. Backend’den kursları Algolia’ya senkronize etmek için (syncCourseToAlgolia). Yerelde .dev.vars; production’da wrangler secret put ALGOLIA_ADMIN_KEY.

Not: Algolia anahtarları Algolia Dashboard → API Keys sayfasından alınır. VITE_ prefix’li değişkenler Vite tarafından client bundle’a dahil edilir; ALGOLIA_ADMIN_KEY ise yalnızca sunucu tarafında erişilebilir.


DeğişkenTürAçıklama
VITE_TURNSTILE_SITE_KEYPublicTurnstile widget site key. npm run build sırasında Vite ile client bundle’a gömülür; yerelde .env, production öncesi build ortamında aynı değer olmalıdır. app/lib/turnstile.ts içinde import.meta.env.VITE_TURNSTILE_SITE_KEY okunur.
TURNSTILE_SECRET_KEYSecretSecret keychallenges.cloudflare.com/turnstile/v0/siteverify ile token doğrulama. Production’da wrangler secret put veya güvenli şekilde Dashboard’dan; kod env.TURNSTILE_SECRET_KEY kullanır.

Not: Cloudflare Turnstile panelinde widget için hostname listesine achidemy.net, gerekiyorsa www.achidemy.net ve *.achidemy.net ekleyin; aksi halde istemci tarafında 110200 benzeri hatalar oluşabilir.


Bu dosya git’e eklenmez (.gitignore). Proje kökünde oluşturun. Yukarıdaki Secret değişkenleri burada tanımlayın; Public değişkenler wrangler.toml içinde de tutulabilir.

# Veritabanı
DATABASE_URL=postgresql://user:pass@host/neondb?sslmode=require
# Stripe (yerel webhook test için)
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Better Auth / E-posta (isteğe bağlı)
RESEND_API_KEY=re_...
BETTER_AUTH_SECRET=rastgele-gizli-anahtar
# Bunny (gerekirse)
BUNNY_API_KEY=...
BUNNY_STORAGE_KEY=...
BUNNY_VIDEO_SECURITY_KEY=...
# Sentry (hata izleme)
SENTRY_DSN=https://[email protected]/...
VITE_SENTRY_DSN=https://[email protected]/...
# Algolia (arama)
VITE_ALGOLIA_APP_ID=YOUR_APP_ID
VITE_ALGOLIA_SEARCH_KEY=YOUR_SEARCH_KEY
ALGOLIA_ADMIN_KEY=YOUR_ADMIN_KEY
# Turnstile (login/register — istemci + sunucu aynı widget çifti)
VITE_TURNSTILE_SITE_KEY=0x...
TURNSTILE_SECRET_KEY=0x...

Not: wrangler dev çalışırken Hyperdrive için wrangler.toml içindeki localConnectionString kullanılır; DATABASE_URL ise .dev.vars veya ortamdan okunur. Client tarafı için VITE_SENTRY_DSN ve VITE_TURNSTILE_SITE_KEY build sırasında okunur; yerelde .env veya .dev.vars ile aynı değeri verebilirsiniz.

  • Vars (Public): BASE_URL, BETTER_AUTH_URL, VITE_TURNSTILE_SITE_KEY, STRIPE_PUBLIC_KEY, STRIPE_PRICE_ID_*, BUNNY_LIBRARY_ID, BUNNY_STORAGE_ZONE, EMAIL_FROM, SENTRY_DSN, VITE_SENTRY_DSN, VITE_ALGOLIA_APP_ID, VITE_ALGOLIA_SEARCH_KEY vb. wrangler.toml içinde [vars] veya Cloudflare Dashboard’dan.
  • Secrets (Gizli): wrangler secret put DATABASE_URL, wrangler secret put STRIPE_SECRET_KEY, wrangler secret put STRIPE_WEBHOOK_SECRET, wrangler secret put ALGOLIA_ADMIN_KEY, wrangler secret put TURNSTILE_SECRET_KEY (secret’ı yalnızca [vars] yerine CLI ile tutmak istiyorsanız) vb. Production’da gizli bilgileri asla kalıcı olarak repoya yazmayın.