0/14

Projeyi Canlıya Çıkmadan Önce Kontrol Listesi

Kendi bilgisayarında tek başına test ederken her şey ışık hızında ve hatasız çalışır. Ancak projeyi gerçek kullanıcıların, botların ve kesintili ağların olduğu canlı ortama (production) aldığında kurallar tamamen değişir.

Bu interaktif kontrol listesi 'Projeyi Canlıya Çıkmadan Önce Kontrol Listesi (Production-Ready)' videosunun devamı. Projendeki her katmanı yayına çıkmadan önce buradan tek tek kontrol et, detaylarını açıp incele ve tamamladığın maddeleri işaretle; ilerlemen tarayıcında otomatik kaydedilir.

  • Temelİşe girmeden önce sağlam bilinmeli
  • İyi olurİlanlarda sık geçiyor, elini güçlendirir
  • Sonraİşe girdikten sonra, ihtiyaç doğunca

Bir konuya tıkla: ne bilmen gerektiği ve kaynaklar açılır.

  1. 01

    1. API Güvenliği ve Trafik Kontrolü

    Kötü niyetli botların veya hatalı bir istemci döngüsünün sunucunu saniyeler içinde kilitlemesini kapıda engelle.

  2. 02

    2. Konfigürasyon ve Ortam Değişkenleri (.env)

    Eksik bir API anahtarının gece yarısı ödeme adımında patlamasını önlemek için tüm ayarları uygulama kalkarken doğrula.

  3. 03

    3. Merkezi Hata Yönetimi ve Loglama

    Kullanıcıya asla iç sistem detaylarını sızdırma; ama bir sorun olduğunda 30 saniyede kök nedeni bulacak kadar net log tut.

  4. 04

    4. Veritabanı, Havuz ve Yedekleme Güvenliği

    Trafik arttığında ilk darboğaz her zaman veritabanıdır. Bağlantıları, sorguları ve yedekleri yayına çıkmadan güvenceye al.

  5. 05

    5. Dağıtım (Deploy), Healthcheck ve Rollback Planı

    Kodu canlıya insan eli değmeden al ve işler ters giderse 60 saniye içinde önceki çalışan sürüme dönebileceğinden emin ol.

Konu konu

Haritadaki her konunun açıklaması, bilmen gerekenler ve kaynaklar — tek listede.

  1. 011. API Güvenliği ve Trafik Kontrolü

    • Rate Limiting ve İstek Sınırlandırma· Temel

      Hiçbir API ucu sınırsız bırakılmaz. Tek bir kullanıcının veya botun saniyede binlerce istek atarak veritabanını ve CPU'yu tüketmesini engellemek için hız sınırı koy.

      Bilmen gerekenler

      • Genel API uçlarında IP veya kullanıcı başına dakikada makul bir sınır tanımla (429 Too Many Requests)
      • Birden fazla sunucu kopyası varsa sayacı bellek yerine Redis üzerinde tut
      • Yanıt başlıklarında kalan hakkı bildir (Retry-After, RateLimit-Remaining)

      Kaynaklar

      • Login, Kayıt ve OTP uçlarına sıkı limit· Temel

        Brute-force şifre denemelerini ve SMS/E-posta gönderim faturasını patlatacak saldırıları engellemek için kimlik doğrulama uçlarına çok daha düşük limitler uygula.

        Bilmen gerekenler

        • Giriş ve şifre sıfırlama uçlarında dakikada en fazla 5 deneme izni ver
        • Sadece IP'ye değil, hedef e-posta/kullanıcı adına göre de kilit koy
      • İstek gövdesi (Body) boyut sınırı· Temel

        Basit bir JSON ucuna 500 MB veri gönderilerek sunucu RAM'inin şişirilmesini (Out of Memory) önlemek için maksimum gövde boyutu belirle.

        Bilmen gerekenler

        • Standart JSON uçlarında limiti 100 KB – 1 MB arasında sınırla
        • Dosya yüklemelerini uygulama sunucusu yerine doğrudan S3/R2 Pre-signed URL ile yap
    • Şema Doğrulaması, CORS ve Güvenlik Başlıkları· Temel

      İstemciden gelen hiçbir veriye güvenme. Tüm parametreleri tip ve sınır kontrolünden geçir; tarayıcı güvenlik başlıklarını sıkılaştır.

      Bilmen gerekenler

      • Body, Query ve Params verilerini Zod veya class-validator ile doğrula; beklenmeyen alanları reddet (strip/strict)
      • CORS ayarında '*' (herkese açık) yerine yalnızca kendi alan adını tanımla
      • HSTS, X-Content-Type-Options ve Content-Security-Policy başlıklarını aktif et

      Kaynaklar

      • Kritik işlemlerde Idempotency-Key· İyi olur

        Kullanıcı 'Öde' veya 'Sipariş Ver' butonuna ağ gecikmesi yüzünden üst üste bastığında işlemin yalnızca bir kez gerçekleşmesini garanti altına al.

        Bilmen gerekenler

        • İstemciden gelen Idempotency-Key değerini Redis'te kısa süreli kilitle
        • Aynı anahtarla gelen mükerrer isteklere işlemi tekrarlamadan ilk yanıtı dön
  2. 022. Konfigürasyon ve Ortam Değişkenleri (.env)

    • Başlangıçta Ortam Doğrulaması (Fail-Fast Boot)· Temel

      Uygulama ayağa kalkarken tüm zorunlu ortam değişkenlerini şema ile kontrol et. Tek bir değişken bile eksikse sunucu hiç başlamasın ve hangi değişkenin eksik olduğunu açıkça yazsın.

      Bilmen gerekenler

      • Kod içinde rastgele process.env okumak yerine tek bir doğrulanmış config modülü kullan
      • Güncel ve açıklamalı bir .env.example dosyasını repoda tut

      Kaynaklar

      • Test ve Canlı anahtarların tam izolasyonu· Temel

        Lokal geliştirme ortamında canlı veritabanı veya canlı ödeme (Stripe/Iyzico) anahtarlarının kullanılmadığından emin ol.

        Bilmen gerekenler

        • JWT_SECRET ve veritabanı şifrelerini her ortam için kriptografik olarak ayrı üret
        • Git geçmişinde yanlışlıkla commit edilmiş .env veya gizli anahtar olmadığını kontrol et
  3. 033. Merkezi Hata Yönetimi ve Loglama

    • Merkezi Hata Yakalayıcı ve Stack Trace Gizleme· Temel

      Beklenmeyen bir veritabanı veya kod hatası oluştuğunda kullanıcıya tablo adlarını ve dosya yollarını içeren ham stack trace dönme. Standart ve güvenli bir hata mesajı ilet.

      Bilmen gerekenler

      • Her isteğe benzersiz bir Request-ID (Correlation ID) ata ve hata yanıtında bu kodu dön
      • Operasyonel hatalar (400/404) ile beklenmeyen sistem hatalarını (500) birbirinden ayır
      • Yapılandırılmış JSON Loglama ve Hassas Veri Maskeleme· Temel

        Canlıda rastgele console.log yerine aranabilir JSON log (Pino / Winston) kullan ve loglara şifre, token veya kredi kartı numarası düşmediğinden emin ol.

        Bilmen gerekenler

        • password, token, authorization ve cvv alanlarını loglayıcıda otomatik maskele (redact)
        • 500 hatalarını anında bildiren bir hata takip aracı (Sentry vb.) bağla
  4. 044. Veritabanı, Havuz ve Yedekleme Güvenliği

    • Bağlantı Havuzu (Connection Pool) ve Timeout Sınırları· Temel

      Her istekte yeni veritabanı bağlantısı açmak sunucuyu kilitler. Sabit boyutlu bir Connection Pool kullan ve yanıt vermeyen sorgular ya da dış API'ler için mutlaka zaman aşımı (timeout) tanımla.

      Bilmen gerekenler

      • Veritabanı havuz boyutunu (max connections) sunucu kopya sayısına bölerek hesapla
      • Dış servis (ödeme, e-posta, 3. parti API) isteklerine 3–10 saniye arası kesin timeout koy
      • Sunucu kapanırken (SIGTERM) devam eden istekleri bitirip havuzu temiz kapatan Graceful Shutdown ekle
      • İndeks (Index) ve N+1 Sorgu Kontrolü· Temel

        WHERE, JOIN ve ORDER BY içinde kullanılan sütunlarda indeks olduğundan ve listeleme uçlarında döngü içinde 50 ayrı sorgu (N+1) atılmadığından emin ol.

        Bilmen gerekenler

        • Lokal geliştirme ortamında ORM SQL sorgu loglarını açıp ana akışları test et
        • Hiçbir listeleme ucunu sayfalamasız (Pagination / Limit olmadan) bırakma
      • Otomatik Yedekleme (Backup) ve Geri Yükleme Testi· Temel

        Geri yüklenemeyen yedek, yedek değildir. Otomatik günlük veritabanı yedeğini aktif et ve canlıya çıkmadan önce en az bir kez yedeği farklı bir veritabanına dönmeyi test et.

        Bilmen gerekenler

        • Veritabanı şema değişikliklerini (Migration) elle değil versiyonlu migration dosyalarıyla çalıştır
  5. 055. Dağıtım (Deploy), Healthcheck ve Rollback Planı

    • Gerçek Healthcheck Ucu ve Güvenli Konteyner· Temel

      Sadece '200 OK' dönen sahte bir uç yerine, veritabanı ve Redis bağlantısını gerçekten yoklayan bir `/health` ucu kur; böylece Load Balancer bozuk konteynere trafik göndermez.

      Bilmen gerekenler

      • Yeni konteyner ayağa kalkıp /health onayı vermeden eski konteyneri kapatma (Zero-Downtime)
      • Docker imajını multi-stage olarak derle ve içeride root olmayan (non-root) kullanıcıyla çalıştır
      • Otomatik CI/CD Hattı ve Tek Komutla Rollback· Temel

        Canlı sunucuya SSH ile bağlanıp elle git pull yapma. GitHub Actions ile test + build sürecini otomatikleştir ve hatalı sürümde tek tıkla önceki Docker imajına dön.

        Bilmen gerekenler

        • Her Docker imajını sadece 'latest' diye değil, Git commit SHA koduyla etiketle
        • Canlıya çıkış sonrası ilk 5 dakika hata oranlarını ve p95 yanıt sürelerini izle