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