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

143 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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ükleme
- `deleteFromR2()`: Resim silme
- `getContentType()`: Dosya türü belirleme
### 3. Güncellenen Dosyalar
#### API Routes (Upload)
- `app/api/images/upload/route.ts`
- `app/api/v1/images/upload/route.ts`
**Değişiklikler:**
- Yerel dosya sistemi yerine R2'ye yükleme
- `writeFile` ve `mkdir` kaldırıldı
- `uploadToR2()` kullanılıyor
- URL'ler artık tam R2 URL'leri olarak kaydediliyor
#### API Routes (List)
- `app/api/images/route.ts`
- `app/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.ts`
- `app/api/v1/images/[id]/route.ts`
**Değişiklikler:**
- Yerel dosya silme yerine R2'den silme
- `unlink` yerine `deleteFromR2()` kullanılıyor
### 4. Environment Variables
`.env`, `.env.local` ve `.env.example` dosyalarına eklenen değişkenler:
```env
# 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
1. **Bucket Oluşturma:**
- Cloudflare Dashboard > R2 > Create Bucket
- Bucket adı: `images` (veya .env'de belirtilen)
- Location: Europa
2. **Public Access:**
- Bucket Settings > Public Access
- Custom Domain ekleyin: `images.beyhano.com.tr`
- CORS ayarlarını yapılandırın (gerekirse)
3. **API Token:**
- R2 > Manage R2 API Tokens
- Create API Token
- Permissions: Object Read & Write
- Token bilgilerini .env'e ekleyin
## Avantajlar
1. **Ölçeklenebilirlik:** Sınırsız depolama kapasitesi
2. **Performans:** CDN entegrasyonu ile hızlı erişim
3. **Maliyet:** Egress ücreti yok (Cloudflare CDN üzerinden)
4. **Güvenilirlik:** Otomatik yedekleme ve dayanıklılık
5. **Bakım:** Sunucu disk alanı yönetimi gerekmez
## Geriye Dönük Uyumluluk
Mevcut sistemde `public/uploads/` klasöründe bulunan resimler için:
1. **Manuel Migrasyon:** Mevcut resimleri R2'ye yükleyin
2. **Veritabanı Güncelleme:** `images` tablosundaki `url` ve `filePath` alanlarını güncelleyin
3. **Eski Dosyalar:** Migrasyon sonrası eski dosyaları silebilirsiniz
## Test Etme
### 1. Resim Yükleme Testi
```bash
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
```bash
curl -X GET https://image.beyhano.com.tr/api/images \
-H "Authorization: Bearer YOUR_TOKEN"
```
### 3. Resim Silme Testi
```bash
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
1. **Güvenlik:** API credentials'ları asla commit etmeyin
2. **Backup:** Kritik resimlerin yedeğini alın
3. **Monitoring:** R2 kullanım metriklerini takip edin
4. **Rate Limiting:** R2 API rate limitlerini göz önünde bulundurun