5.1 KiB
5.1 KiB
Cloudflare R2 Kurulum Kontrol Listesi
✅ Tamamlanan Adımlar
1. Kod Değişiklikleri
- AWS SDK (@aws-sdk/client-s3) kuruldu
- R2 storage servisi oluşturuldu (app/lib/r2-storage.ts)
- Upload endpoint'leri güncellendi (hem /api hem /api/v1)
- List endpoint'leri güncellendi (R2 URL'leri kullanıyor)
- Delete endpoint'leri güncellendi (R2'den silme)
- Environment variables eklendi (.env, .env.local, .env.example)
- Yerel dosya sistemi referansları kaldırıldı
- Linter hataları temizlendi
2. Yapılandırma
- Europa server endpoint yapılandırıldı
- R2 credentials .env dosyalarına eklendi
- Bucket name:
resimlerim - Public URL:
https://images.beyhano.com.tr
📋 Yapılması Gerekenler (Cloudflare Dashboard)
1. R2 Bucket Kontrolü
- Cloudflare Dashboard'a giriş yapın
- R2 > Buckets bölümüne gidin
resimlerimadında bucket olduğunu kontrol edin- Bucket location'ın Europa (EEUR) olduğunu doğrulayın
2. Public Access Ayarları
- Bucket > Settings > Public Access
- Custom Domain ekleyin:
images.beyhano.com.tr - DNS kayıtlarını yapılandırın (CNAME veya A record)
- SSL/TLS sertifikasının aktif olduğunu kontrol edin
3. CORS Ayarları (Gerekirse)
Eğer frontend'den direkt R2'ye erişim gerekiyorsa:
[
{
"AllowedOrigins": ["https://image.beyhano.com.tr"],
"AllowedMethods": ["GET", "HEAD"],
"AllowedHeaders": ["*"],
"MaxAgeSeconds": 3600
}
]
4. API Token Kontrolü
- R2 > Manage R2 API Tokens
- Token'ın aktif olduğunu kontrol edin
- Permissions: Object Read & Write
- Token bilgilerinin .env'de doğru olduğunu doğrulayın
🧪 Test Adımları
1. Yerel Test (Development)
# Sunucuyu başlat
yarn dev
# Test resmi yükle
curl -X POST http://localhost:3000/api/images/upload \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "file=@test-image.jpg" \
-F "width=800" \
-F "height=600"
2. Production Test
# Test resmi yükle
curl -X POST https://image.beyhano.com.tr/api/images/upload \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "file=@test-image.jpg"
# Resimleri listele
curl -X GET https://image.beyhano.com.tr/api/images \
-H "Authorization: Bearer YOUR_TOKEN"
# Resmi tarayıcıda aç (dönen URL'yi kullan)
# Örnek: https://images.beyhano.com.tr/abc123.jpg
3. Kontrol Edilecekler
- Resim başarıyla yükleniyor
- R2 bucket'ta resim görünüyor
- Public URL üzerinden resme erişilebiliyor
- Resim listesi doğru URL'leri döndürüyor
- Resim silme işlemi çalışıyor
- Resim manipülasyonu (resize, format) çalışıyor
🔄 Mevcut Resimlerin Migrasyonu (Opsiyonel)
Eğer public/uploads/ klasöründe mevcut resimler varsa:
1. Resimleri R2'ye Yükle
# AWS CLI veya rclone kullanarak toplu yükleme
# Örnek: rclone sync public/uploads/ r2:resimlerim/
2. Veritabanını Güncelle
-- Eski URL'leri yeni R2 URL'leriyle değiştir
UPDATE images
SET url = CONCAT('https://images.beyhano.com.tr/', fileName),
filePath = fileName
WHERE url LIKE '/uploads/%';
3. Eski Dosyaları Temizle
# Migrasyon başarılı olduktan sonra
rm -rf public/uploads/*
🚨 Sorun Giderme
R2 Bağlantı Hatası
Error: R2'ye yükleme başarısız
Çözüm:
- Environment variables'ları kontrol edin
- R2 API Token'ın aktif olduğunu doğrulayın
- Account ID'nin doğru olduğunu kontrol edin
Public URL Erişim Hatası
403 Forbidden veya 404 Not Found
Çözüm:
- Custom domain yapılandırmasını kontrol edin
- Public access ayarlarını kontrol edin
- DNS propagation'ı bekleyin (24 saat)
Upload Başarılı Ama Resim Görünmüyor
Çözüm:
- Browser cache'i temizleyin
- R2 bucket'ta dosyanın var olduğunu kontrol edin
- Content-Type header'ının doğru olduğunu kontrol edin
📊 Monitoring
Cloudflare Dashboard
- R2 > Analytics
- Storage kullanımı
- Request sayısı
- Bandwidth kullanımı
Önemli Metrikler
- Upload success rate
- Average response time
- Error rate
- Storage growth
🔒 Güvenlik Notları
-
API Credentials:
- Asla commit etmeyin
- Production'da environment variables kullanın
- Düzenli olarak rotate edin
-
Public Access:
- Sadece gerekli dosyalar public olsun
- Rate limiting uygulayın
- Hotlink protection düşünün
-
Backup:
- Kritik resimlerin yedeğini alın
- Versioning'i etkinleştirin (R2 settings)
- Disaster recovery planı oluşturun
📝 Notlar
- R2 egress ücreti yoktur (Cloudflare CDN üzerinden)
- Storage maliyeti: ~$0.015/GB/ay
- Class A operations: $4.50/million (PUT, LIST)
- Class B operations: $0.36/million (GET, HEAD)
- Europa server kullanıldığı için GDPR uyumlu
✅ Son Kontrol
Deployment öncesi:
- Tüm environment variables production'da ayarlandı
- R2 bucket ve custom domain yapılandırıldı
- Test upload/download/delete çalışıyor
- Monitoring ve alerting kuruldu
- Backup stratejisi belirlendi
- Documentation güncellendi