Yüksek performanslı, güvenli ve basit Go tabanlı Görsel CDN servisi. Fiber framework'ü üzerine kurulmuştur.
- Güvenli Yükleme: API Key koruması ve
magic bytes(MIME type sniffing) içerik kontrolü. - Akıllı İsimlendirme:
5-5-5-5formatı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
/healthendpointi.
- Go 1.25+ veya Docker
Yöntem A: Go ile Çalıştırma
.envdosyasını yapılandırın (default ayarlar yeterlidir).- Servisi başlatın:
go run main.goYöntem B: Docker ile Çalıştırma Tek komutla ayağa kaldırın:
docker-compose up -d --buildVerileriniz ./data klasöründe kalıcı olarak saklanır.
| 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) |
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"
}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"
}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 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 }
}
}.
├── 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ı