"Benim bilgisayarımda çalışıyordu" cümlesi yazılım dünyasının klasiklerindendir. Bir değişikliği doğrudan canlı sistemde denemek ise kesintilerin en yaygın nedenlerinden biridir. Ortam ayrımı; geliştirmenin, denemenin ve gerçek kullanımın birbirine zarar vermeden ilerlemesini sağlar.
Üç temel ortam
| Ortam | Amaç | Kim kullanır? | Veri |
|---|---|---|---|
| Geliştirme (dev) | Kod yazmak, denemek | Geliştiriciler | Sahte veya örnek veri |
| Test / Staging | Canlıya çıkmadan son kontrol | Ekip, müşteri temsilcisi | Anonimleştirilmiş veya test verisi |
| Canlı (prod) | Gerçek kullanım | Müşteriler | Gerçek veri |
Staging ortamı, canlı ortamın mümkün olduğunca birebir kopyası olmalıdır: aynı işletim sistemi, aynı sürümler, benzer ayarlar. Farklar ne kadar azsa sürpriz o kadar azdır. Docker bu benzerliği sağlamanın en pratik yollarından biridir.
Yapılandırma ayrımı
Kod aynı kalmalı, yalnızca ayarlar ortamdan ortama değişmelidir:
- Veritabanı bağlantıları
- Ödeme sağlayıcısının test ve canlı anahtarları
- E-posta ve SMS gönderim ayarları
- Log seviyesi
.NET'te appsettings.Development.json, appsettings.Production.json ve ortam değişkenleri bu iş için tasarlanmıştır. Gizli bilgiler kodla birlikte saklanmamalıdır. Ayrıntılar: .NET'te yapılandırma ve gizli bilgiler.
Test ortamında sık yapılan iki büyük hata
1. Gerçek müşterilere e-posta veya SMS göndermek
Test ortamında canlı veritabanının kopyası kullanılıyorsa ve bildirim ayarları da kopyalandıysa, müşterilere "test" mesajları gidebilir. Test ortamında bildirimleri yalnızca belirlenmiş test adreslerine gönderen bir güvenlik kilidi olmalıdır.
2. Gerçek kişisel veriyi test ortamına taşımak
Canlı veritabanını olduğu gibi test ortamına kopyalamak KVKK açısından risklidir; test ortamları genellikle daha az korunur. Kişisel verileri maskeleyen veya anonimleştiren bir aktarım tercih edilmelidir. Bkz. KVKK saklama ve imha politikası.
Sürüm akışı
- Geliştirici değişikliği kendi ortamında yapar ve test eder.
- Değişiklik incelenir ve ana dala alınır (code review).
- Otomatik olarak test ortamına dağıtılır (CI/CD).
- Test ortamında kontrol edilir, gerekiyorsa müşteri onayı alınır.
- Aynı paket canlıya alınır; canlı için ayrıca derleme yapılmaz.
Canlıya alım sırasında kesintiyi önlemek için bkz. sıfır kesintili dağıtım.
Küçük projeler için
Her proje için üç ayrı sunucu gerekmez. Küçük bir projede:
- Geliştirme: geliştiricinin bilgisayarı
- Test: canlı sunucuda ayrı bir alt alan adı ve ayrı veritabanı (test.ornek.com)
- Canlı: ana alan adı
Bu basit ayrım bile hataların büyük kısmının müşteriye ulaşmasını engeller.
Sık sorulan sorular
Test ortamı arama motorlarında görünmeli mi?
Hayır. Parola koruması veya noindex ile arama motorlarından gizlenmelidir; aksi halde kopya içerik ve bilgi sızıntısı riski oluşur.
Veritabanı değişiklikleri ortamlar arasında nasıl taşınır?
Elle SQL çalıştırmak yerine sürümlenmiş migration dosyaları kullanılmalıdır. EF Core migration'ları bu iş için uygundur.
Sonuç
Ortam ayrımı, hataları müşteriden önce yakalamanın en temel yoludur. Basit bir test ortamı bile canlı sistemdeki sürprizleri belirgin şekilde azaltır.