AWS S3 + CloudFront ile dağıtım sırasında statik dosyaların yüklenememesi nedeniyle oluşan beyaz ekran sorununu çözmek
(blog.lemonbase.team)Dağıtım sırasında statik dosyaların yüklenememesi nedeniyle beyaz ekran oluşması sorununu AWS S3 + CloudFront ile çözen bir yazı. AWS S3 + CloudFront ile kararlı bir statik dosya dağıtımı planlayanlara yardımcı olmasını umuyorum.
[Sorunun ortaya çıkış arka planı]
- React + Vite tabanlı frontend servisinin işletilmesi
- Dağıtımdan sonra aralıklı olarak beyaz ekran oluşması → statik dosyalar yüklenemiyor
- Konsol hatası: MIME türü uyuşmazlığı (
text/htmldönüyor)
[Sorun analizi]
- MIME türü uyuşmazlığı: statik dosya yerine HTML yanıtı dönüyor
- Github Actions iptali → ECS instance'ının kaldırılması hipotezi
- Dağıtım zamanı ile statik dosya servis etme zamanının uyuşmaması
- Eski sürümün
index.htmldosyası yeni statik dosyalara referans veriyor ancak dosyalar silinmiş durumda
[Çözüm yöntemi]
- CloudFront + S3 kullanımı (nihai karar)
- Eski sürüm statik dosyalarını korumak için S3 mutlak yolu kullanımı
- Vite build sırasında dosya adına
commitHash,timestampekleme → benzersizliğin korunması - Gereksiz dosyaların otomatik silinmesi için S3 Lifecycle ayarı
- Hızlı ve kararlı statik dosya servisi için CloudFront entegrasyonu
- Local, Dev, Prod ortamları için ayrı yapılandırma
[Doğrulama sonuçları]
- CloudFront + S3 yaklaşımının düzgün çalıştığı doğrulandı
- Caching stratejisi uygulandı: tarayıcı önbelleği (
Cache-Control,max-age) kontrol edildi - Dosyalara benzersizlik verildiği için cache invalidation gerekmiyor
- Önceden olduğu gibi statik dosya eksikliği sorunu olmadan kararlı dağıtım mümkün
[Öğrenilenler]
- Dağıtım ortamında statik dosya yönetimi UX üzerinde büyük etki yaratabilir.
- Hipotez doğrularken hızlı ve basit yaklaşım önemlidir
- S3 + CloudFront kullanan dağıtım ortamı optimizasyonu deneyimi
- Ortama göre dağıtım stratejilerinin (Local, Dev, Prod) ayrıştırılması gerekir
- Tarayıcı önbelleği davranışını (
Cache-Control,from disk cache) anlamak şarttır
1 yorum
Rolling olduğu için sorun çıkması zaten normal. Dağıtım süresini kısaltabilir ya da dağıtımı ayırıp trafiği tek tarafa toplayan blue-green stratejisiyle yapabilirsiniz.
Ya da React’te error catch yapıp yeniden yüklemeyi zorlayabilirsiniz.