Skip to content

ewgsta/image-api

Repository files navigation

CDN Servisi

Yüksek performanslı, güvenli ve basit Go tabanlı Görsel CDN servisi. Fiber framework'ü üzerine kurulmuştur.

Özellikler

  • Güvenli Yükleme: API Key koruması ve magic bytes (MIME type sniffing) içerik kontrolü.
  • Akıllı İsimlendirme: 5-5-5-5 formatında (örn: abcde-fghij-klmno-pqrst.jpg) anonim dosya isimleri.
  • On-the-fly Optimizasyon: URL parametreleri ile anlık boyutlandırma ve kalite ayarı (?w=500&q=80).
  • Aggressive Caching: İlk işlenen görseli önbelleğe alır ve sonraki isteklerde diskten ışık hızında sunar.
  • Güvenlik: Rate Limiting (Dakikada 60 istek) ve Helmet güvenlik başlıkları.
  • Sistem İzleme: Disk kullanımı, dosya sayısı ve uptime bilgisini veren /health endpointi.

Başlangıç

Gereksinimler

  • Go 1.25+ veya Docker

1. Kurulum ve Çalıştırma

Yöntem A: Go ile Çalıştırma

  1. .env dosyasını yapılandırın (default ayarlar yeterlidir).
  2. Servisi başlatın:
go run main.go

Yöntem B: Docker ile Çalıştırma Tek komutla ayağa kaldırın:

docker-compose up -d --build

Verileriniz ./data klasöründe kalıcı olarak saklanır.

2. Konfigürasyon (.env)

Değişken Varsayılan Açıklama
CDN_PORT :3000 Sunucu portu
API_KEY - Yükleme (Upload) güvenliği için anahtar
CACHE_DURATION 31536000 HTTP Cache-Control süresi (saniye)

API Dokümantasyonu

📤 Dosya Yükleme (Upload)

X-API-KEY header'ı zorunludur.

  • Avatar: POST /api/upload/avatar
  • Genel Resim: POST /api/upload/image

Örnek (cURL):

curl -X POST http://localhost:3000/api/upload/avatar \
  -H "X-API-KEY: change_me_secure_key_123" \
  -F "file=@profil.jpg"

Yanıt:

{
    "success": true,
    "name": "abcde-fghij-klmno-pqrst.jpg",
    "type": "avatar"
}

🗑️ Dosya Silme

Orijinal dosyayı ve varsa önbellekteki (cache) tüm versiyonlarını siler. X-API-KEY zorunludur.

  • URL: DELETE /api/file/:category/:filename
  • Örnek: DELETE /api/file/avatar/abcde-fghij-klmno-pqrst.jpg

Örnek (cURL):

curl -X DELETE http://localhost:3000/api/file/avatar/abcde-fghij-klmno-pqrst.jpg \
  -H "X-API-KEY: change_me_secure_key_123"

Yanıt:

{
    "success": true,
    "message": "File and related cache deleted"
}

🖼️ Görsel Erişim ve Optimizasyon

URL parametreleri ekleyerek görseli anında işleyebilirsiniz.

Format: http://localhost:3000/<type>/<filename>?<params>

Parametreler:

  • w: Genişlik (px)
  • h: Yükseklik (px)
  • q: Kalite (0-100, varsayılan 80)

Örnekler:

  • Orijinal: .../avatar/xxxxx.jpg
  • 300px Genişlik: .../avatar/xxxxx.jpg?w=300
  • Thumbnail (100x100): .../avatar/xxxxx.jpg?w=100&h=100
  • Düşük Kalite: .../avatar/xxxxx.jpg?q=30

🏥 Sistem Sağlığı (Health Check)

Sistem durumunu ve istatistikleri verir.

  • Endpoint: GET /health
  • Örnek Yanıt:
{
  "status": "ok",
  "system": {
    "uptime": "12m30s",
    "avatar_stats": { "file_count": 150, "total_size_bytes": 500240 },
    "image_stats": { "file_count": 20, "total_size_bytes": 102400 },
    "cache_stats": { "file_count": 55, "total_size_bytes": 120500 }
  }
}

Proje Yapısı

.
├── config/         # Yapılandırma yükleyici
├── handlers/       # HTTP handlerlar 
├── utils/          # Yardımcı fonksiyonlar
├── data/           # Depolama alanı 
│   ├── avatar/
│   ├── image/
│   └── cache/      # İşlenmiş görseller buraya kaydedilir
└── main.go         # Giriş noktası

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published