Skip to content

Cloudflare Workers & Pages

Edge üzerinde çalışma, wrangler.toml konfigürasyonu ve Worker mimarisi.

Coursio, Cloudflare Workers üzerinde çalışan bir edge uygulamasıdır. Bu sayfa, uygulamanın Edge üzerinde nasıl çalıştığını ve wrangler.toml konfigürasyonunu açıklar.

Cloudflare Workers, V8 izolasyonu ile çalışan, 0ms cold-start performansı sunan bir edge runtime’dır. Coursio’nun tüm backend kodu (API route’ları, loader/action, GraphQL) bu runtime içinde çalışır.

  • Global dağıtım: İstekler kullanıcıya en yakın edge lokasyonundan yanıtlanır.
  • Cold-start yok: Worker’lar her zaman hazır; ilk istekte bile gecikme yok.
  • Otomatik ölçekleme: Trafiğe göre otomatik olarak ölçeklenir.
  • Düşük maliyet: Kullanım bazlı fiyatlandırma.

Ana Worker dosyası workers/app.ts içinde:

export default {
async fetch(request: Request, env: any, ctx: ExecutionContext): Promise<Response> {
// WebSocket chat endpoint'i
if (url.pathname === "/api/chat") {
// ChatRoom Durable Object'e yönlendirme
}
// React Router request handler
return await requestHandler({ request, env, ... });
},
};

React Router Cloudflare adapter’ı (@react-router/cloudflare) ile tüm route’lar (app/routes/*.tsx) Worker içinde çalışır.

name = "coursio"
compatibility_date = "2026-01-03"
compatibility_flags = ["nodejs_compat"]
main = "./workers/app.ts"
  • name: Cloudflare’daki Worker adı.
  • compatibility_date: API uyumluluk tarihi.
  • nodejs_compat: Node.js API’lerini kullanmak için (ör. process.env).
[assets]
directory = "./build/client"

React Router build çıktısı (build/client) statik dosyalar olarak serve edilir.

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "59c4a12da58e45d3993436576a163c85"
localConnectionString = "postgresql://..."

Hyperdrive, PostgreSQL bağlantılarını optimize eder. Detay için Hyperdrive Entegrasyonu sayfasına bakın.

Public vars ([vars]):

  • BASE_URL, BETTER_AUTH_URL
  • STRIPE_PUBLIC_KEY, STRIPE_PRICE_ID_*
  • BUNNY_LIBRARY_ID, BUNNY_STORAGE_ZONE
  • EMAIL_FROM, GOOGLE_CLIENT_ID

Secrets (CLI ile):

Terminal window
wrangler secret put DATABASE_URL
wrangler secret put STRIPE_SECRET_KEY
wrangler secret put STRIPE_WEBHOOK_SECRET
[[durable_objects.bindings]]
name = "CHAT_ROOM"
class_name = "ChatRoom"

Gerçek zamanlı sohbet için Durable Objects kullanılır. workers/chat.ts içinde ChatRoom sınıfı tanımlıdır.

[dev]
port = 8787
local_protocol = "http"

Yerel geliştirme: npm run start veya npx wrangler devhttp://localhost:8787.

Terminal window
npm run build
npm run deploy

Build çıktısı (build/client, build/server) Cloudflare Workers’a deploy edilir. Production’da wrangler.toml içindeki name ve config kullanılır.

  • workers/ — Cloudflare Worker giriş noktası.
  • wrangler.toml — Worker adı, vars, secrets, Hyperdrive binding.
  • app/root.tsx — Uygulama kök bileşeni; Cloudflare adapter ile context.
  • vite.config.ts — React Router ve build yapılandırması.