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

191 lines
5.1 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 Kurulum Kontrol Listesi
## ✅ Tamamlanan Adımlar
### 1. Kod Değişiklikleri
- [x] AWS SDK (@aws-sdk/client-s3) kuruldu
- [x] R2 storage servisi oluşturuldu (app/lib/r2-storage.ts)
- [x] Upload endpoint'leri güncellendi (hem /api hem /api/v1)
- [x] List endpoint'leri güncellendi (R2 URL'leri kullanıyor)
- [x] Delete endpoint'leri güncellendi (R2'den silme)
- [x] Environment variables eklendi (.env, .env.local, .env.example)
- [x] Yerel dosya sistemi referansları kaldırıldı
- [x] Linter hataları temizlendi
### 2. Yapılandırma
- [x] Europa server endpoint yapılandırıldı
- [x] R2 credentials .env dosyalarına eklendi
- [x] Bucket name: `resimlerim`
- [x] 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:
```json
[
{
"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)
```bash
# 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
```bash
# 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
```bash
# AWS CLI veya rclone kullanarak toplu yükleme
# Örnek: rclone sync public/uploads/ r2:resimlerim/
```
### 2. Veritabanını Güncelle
```sql
-- 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
```bash
# 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