Files
image-apiv3/R2_SETUP_CHECKLIST.md
Beyhan Oğur 031582ea2c first commit
2026-04-26 22:11:03 +03:00

5.1 KiB
Raw Permalink Blame History

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
  • resimlerim adı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ı

  1. API Credentials:

    • Asla commit etmeyin
    • Production'da environment variables kullanın
    • Düzenli olarak rotate edin
  2. Public Access:

    • Sadece gerekli dosyalar public olsun
    • Rate limiting uygulayın
    • Hotlink protection düşünün
  3. 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