first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:11:03 +03:00
commit 031582ea2c
98 changed files with 13281 additions and 0 deletions

190
R2_SETUP_CHECKLIST.md Normal file
View 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