4.2 KiB
4.2 KiB
Cloudflare R2 Storage Entegrasyonu
Bu proje, resim depolamasını yerel dosya sisteminden Cloudflare R2'ye taşımak için güncellenmiştir.
Yapılan Değişiklikler
1. Yeni Kütüphane
- @aws-sdk/client-s3 eklendi (Cloudflare R2, S3-uyumlu API kullanır)
2. Yeni Dosyalar
- app/lib/r2-storage.ts: R2 storage işlemleri için yardımcı fonksiyonlar
uploadToR2(): Resim yüklemedeleteFromR2(): Resim silmegetContentType(): Dosya türü belirleme
3. Güncellenen Dosyalar
API Routes (Upload)
app/api/images/upload/route.tsapp/api/v1/images/upload/route.ts
Değişiklikler:
- Yerel dosya sistemi yerine R2'ye yükleme
writeFilevemkdirkaldırıldıuploadToR2()kullanılıyor- URL'ler artık tam R2 URL'leri olarak kaydediliyor
API Routes (List)
app/api/images/route.tsapp/api/v1/images/route.ts
Değişiklikler:
- Base URL ekleme kaldırıldı (R2 URL'leri zaten tam URL)
- Direkt olarak veritabanından gelen URL döndürülüyor
API Routes (Delete)
app/api/images/[id]/route.tsapp/api/v1/images/[id]/route.ts
Değişiklikler:
- Yerel dosya silme yerine R2'den silme
unlinkyerinedeleteFromR2()kullanılıyor
4. Environment Variables
.env, .env.local ve .env.example dosyalarına eklenen değişkenler:
# Cloudflare R2 Storage (Europa Server)
R2_ACCOUNT_ID=4f3dc7a1aa54f4ba52803e952d6cf6be
R2_ACCESS_KEY_ID=177784973745076ce943e02b267cf139
R2_SECRET_ACCESS_KEY=9fcf11d84de480e0bee89f23703c655582c0b0035bcaee828ef0fe187b0d4b63
R2_BUCKET_NAME=resimlerim
R2_PUBLIC_URL=https://images.beyhano.com.tr
Not: Europa server endpoint'i kullanılıyor: https://{ACCOUNT_ID}.eu.r2.cloudflarestorage.com
R2 Bucket Yapılandırması
Gerekli Ayarlar
-
Bucket Oluşturma:
- Cloudflare Dashboard > R2 > Create Bucket
- Bucket adı:
images(veya .env'de belirtilen) - Location: Europa
-
Public Access:
- Bucket Settings > Public Access
- Custom Domain ekleyin:
images.beyhano.com.tr - CORS ayarlarını yapılandırın (gerekirse)
-
API Token:
- R2 > Manage R2 API Tokens
- Create API Token
- Permissions: Object Read & Write
- Token bilgilerini .env'e ekleyin
Avantajlar
- Ölçeklenebilirlik: Sınırsız depolama kapasitesi
- Performans: CDN entegrasyonu ile hızlı erişim
- Maliyet: Egress ücreti yok (Cloudflare CDN üzerinden)
- Güvenilirlik: Otomatik yedekleme ve dayanıklılık
- Bakım: Sunucu disk alanı yönetimi gerekmez
Geriye Dönük Uyumluluk
Mevcut sistemde public/uploads/ klasöründe bulunan resimler için:
- Manuel Migrasyon: Mevcut resimleri R2'ye yükleyin
- Veritabanı Güncelleme:
imagestablosundakiurlvefilePathalanlarını güncelleyin - Eski Dosyalar: Migrasyon sonrası eski dosyaları silebilirsiniz
Test Etme
1. Resim Yükleme Testi
curl -X POST https://image.beyhano.com.tr/api/images/upload \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "file=@test-image.jpg" \
-F "width=800" \
-F "height=600" \
-F "quality=90" \
-F "format=jpeg"
2. Resim Listeleme Testi
curl -X GET https://image.beyhano.com.tr/api/images \
-H "Authorization: Bearer YOUR_TOKEN"
3. Resim Silme Testi
curl -X DELETE https://image.beyhano.com.tr/api/images/IMAGE_ID \
-H "Authorization: Bearer YOUR_TOKEN"
Sorun Giderme
R2 Bağlantı Hatası
- Environment variables'ların doğru olduğundan emin olun
- R2 API Token'ın aktif olduğunu kontrol edin
- Bucket adının doğru olduğunu kontrol edin
Upload Hatası
- Dosya boyutunun 10MB'ın altında olduğundan emin olun
- Content-Type'ın doğru ayarlandığını kontrol edin
- R2 bucket'ın write permission'a sahip olduğunu kontrol edin
URL Erişim Hatası
- Custom domain'in doğru yapılandırıldığından emin olun
- Public access ayarlarını kontrol edin
- DNS kayıtlarının doğru olduğunu kontrol edin
Önemli Notlar
- Güvenlik: API credentials'ları asla commit etmeyin
- Backup: Kritik resimlerin yedeğini alın
- Monitoring: R2 kullanım metriklerini takip edin
- Rate Limiting: R2 API rate limitlerini göz önünde bulundurun