first commit
This commit is contained in:
142
R2_MIGRATION.md
Normal file
142
R2_MIGRATION.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user