Skip to content
smallPict

Kendi Depolamanız + CDN’iniz

API Velocity ve Momentum planlarında kendi nesne depolamanızı ve kendi CDN’inizi bağlayın: sağlayıcıya göre kurulum, minimum izinler, bağlantı kontrolü ve mod değiştirdiğinizde ne olduğu.

Kullanılabildiği planlar: API Velocity ve Momentum. Ignite’ta (CDN içermez), geliştirici sandbox’ında (sandbox dosyaları geçicidir) ve WordPress planlarında (yönetilen smallPict CDN’ini kullanırlar) kullanılamaz.

Kısaca: BYO modunda smallPict orijinallerinizi ve optimize edilmiş görsellerinizi sizin bucket’ınıza yazar ve bunları sizin CDN’iniz sunar. Depolama ve CDN her zaman birlikte bağlanır: biri olmadan diğerini getiremezsiniz.


BYO nedir

Velocity ve Momentum’da iki teslim modu vardır. Birini Panel → CDN ve depolama bölümünde seçersiniz.

  • Yönetilen (varsayılan): smallPict orijinallerinizi kendi şifreli depolamasında tutar (90 gün sonra uzun süreli arşive taşınır) ve optimize edilmiş görselleri cdn.smallpict.app üzerinden sunar. Kurulacak bir şey yoktur.
  • Kendi depolamanız + CDN’iniz (BYO): kendi hesabınızdaki S3 uyumlu bir bucket’ı ve kendi hesabınızdaki bir CDN’i bağlarsınız. Her yeni iş, orijinali ve optimize edilmiş dosyayı bucket’ınıza yazar ve API, CDN alan adınızdaki URL’leri döndürür.

Birlikte bağlama kuralı, smallPict’in teslimatın iki yarısını da yapabilmesi gerektiği için vardır: dosyaları yazmak ve eski kopyaları önbellekten temizlemek. CDN’siz bir bucket’ta önbellek temizleme isteklerinin gidecek yeri olmazdı; bucket’sız bir CDN’in ise sunacak bir şeyi olmazdı.


Yönetilen ve BYO karşılaştırması

Yönetilen (varsayılan)Kendi depolamanız + CDN’iniz
OrijinallersmallPict şifreli depolamasıBucket’ınızda originals/<job_id>/<file>
Optimize edilmiş dosyalarcdn.smallpict.app üzerinden sunulurBucket’ınızda optimized/<job_id>.<ext>, CDN alan adınızdan sunulur
Depolama kotasıVelocity 50 GB, Momentum 100 GBSayılmaz. Depolama sağlayıcınıza ödersiniz.
CDN bant genişliğiVelocity 30 GB/ay, Momentum 200 GB/aySayılmaz. CDN sağlayıcınıza ödersiniz.
DönüşümlerPlanınızdan düşülürPlanınızdan düşülür
smallPict’te tutulan kopyaEvet, hesabınız aktif olduğu süreceYok. Yalnızca 24 saat içinde silinen geçici işleme yüklemesi.
Önbellek temizlemeOtomatikOtomatik, CDN’inizin API’si üzerinden
CDN performansı, alan adı ve maliyetlerismallPictSiz. smallPict, CDN’inizin performansından, alan adlarından veya faturalarından sorumlu değildir.

Desteklenen sağlayıcılar

Depolama (şu anda kullanılabilir): Amazon S3, Cloudflare R2, Google Cloud Storage (S3 birlikte çalışabilirliği), Alibaba Cloud OSS, Tencent Cloud COS, DigitalOcean Spaces, SumoPod Storage, MinIO ve özel bir endpoint üzerinden diğer tüm S3 uyumlu hizmetler (örneğin Hetzner, Vultr veya Wasabi).

CDN (şu anda kullanılabilir): Cloudflare ve Amazon CloudFront.

Planlanan: Azure Blob Storage ve diğer CDN’ler. Bulut sağlayıcıları sayfasından erken erişim isteyebilirsiniz.


Başlamadan önce

  1. API Velocity veya Momentum planındasınız ve hesap yöneticisi olarak oturum açtınız.
  2. Bir bucket’ınız ve bu bucket’taki dosyaları HTTPS üzerinden sunan bir CDN’iniz var.
  3. Depolama endpoint’ine internetten HTTPS ile erişilebiliyor. Özel, dahili ve düz HTTP endpoint’leri reddedilir.
  4. smallPict için dar kapsamlı anahtarlar oluşturdunuz (aşağıdaki Minimum izinler bölümüne bakın). Hesabınızın root veya yönetici anahtarlarını kullanmayın.

Ardından Panel → CDN ve depolama bölümünü açın, Kendi depolamanız + CDN’iniz seçeneğini seçin, iki bölümü de doldurun ve Depolama + CDN’i kaydet düğmesine tıklayın. smallPict bağlantı kontrolünü (aşağıda açıklanmıştır) çalıştırır ve sizi yalnızca kontrol başarılı olursa BYO’ya geçirir.


Kurulum kılavuzları

A. Amazon S3 + Amazon CloudFront

  1. Bucket’ı oluşturun; istediğiniz bölgede, örneğin ap-southeast-1 bölgesinde my-images. Block Public Access ayarını açık tutun.
  2. Bir CloudFront dağıtımı oluşturun ve kaynağı (origin) olarak bucket’ı seçin. Bucket özel kalırken CloudFront’un onu okuyabilmesi için Origin access control (OAC) kullanın ve CloudFront’un önerdiği bucket politikasını uygulayın.
  3. İsteğe bağlı: kendi alan adınız. Dağıtıma alternatif bir alan adı (örneğin images.example.com) ve bir sertifika ekleyin, ardından bir DNS kaydını dağıtıma yönlendirin.
  4. Depolama için bir IAM kullanıcısı (veya rolü) oluşturun, şu politikayla:
JSON
{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Action": [        "s3:PutObject",        "s3:GetObject",        "s3:DeleteObject"      ],      "Resource": "arn:aws:s3:::my-images/*"    }  ]}
  1. CloudFront için bir IAM kullanıcısı oluşturun (aynı kullanıcı olabilir), şu politikayla. cloudfront:GetDistribution isteğe bağlıdır; bu izinle smallPict, CDN alan adını boş bıraktığınızda dağıtımın alan adını algılayabilir.
JSON
{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Action": [        "cloudfront:CreateInvalidation",        "cloudfront:GetDistribution"      ],      "Resource": "arn:aws:cloudfront::123456789012:distribution/E2QWRUHAPOMQZL"    }  ]}
  1. Panelde:
    • Depolama sağlayıcısı Amazon S3, bucket my-images, bölge ap-southeast-1, endpoint boş (bölgenin standart endpoint’i kullanılır) ve depolama için access key ID ile secret.
    • CDN Amazon CloudFront, Distribution ID (örneğin E2QWRUHAPOMQZL), CloudFront için access key ID ile secret ve isteğe bağlı olarak CDN alan adı (https://images.example.com). Dağıtımın kendi *.cloudfront.net alan adını kullanmak için alan adını boş bırakın.

B. Cloudflare R2 + Cloudflare

  1. Bir R2 bucket’ı oluşturun, örneğin my-images.
  2. Bucket’a özel bir alan adı bağlayın (R2 → bucket’ınız → Settings → Custom Domains), örneğin aynı Cloudflare hesabındaki bir zone’da images.example.com. Bu alan adına gelen istekler Cloudflare önbelleğinden geçer. Üretimde r2.dev geliştirme URL’sini kullanmayın.
  3. Bir R2 API token’ı oluşturun (R2 → Manage API tokens); Object Read & Write izniyle ve yalnızca bu bucket ile sınırlı. Gösterilen Access Key ID ve Secret Access Key değerlerini kopyalayın.
  4. Bir Cloudflare API token’ı oluşturun (My Profile → API Tokens); zone için Zone → Cache Purge → Purge izniyle. Zone → Zone → Read isteğe bağlıdır.
  5. Panelde:
    • Depolama sağlayıcısı Cloudflare R2, bucket my-images, endpoint https://<account_id>.r2.cloudflarestorage.com (bucket’ınızın S3 API ayrıntılarında gösterilir), bölge auto ve R2 Access Key ID ile Secret Access Key.
    • CDN Cloudflare, Zone ID (alan adının Overview sayfası, API bölümü), API token’ı ve CDN alan adı https://images.example.com.

C. Google Cloud Storage + Cloudflare

Google Cloud Storage, HMAC anahtarlarıyla S3 uyumlu XML API’si üzerinden bağlanır.

  1. Bucket’ı oluşturun, örneğin my-images.
  2. Bir hizmet hesabı oluşturun ve ona yalnızca bu bucket üzerinde Storage Object User (roles/storage.objectUser) rolünü verin.
  3. Hizmet hesabı için bir HMAC anahtarı oluşturun: Cloud Storage → Settings → Interoperability → Create a key for a service account. Access ID ve secret değerlerini kopyalayın.
  4. Optimize edilmiş dosyaları CDN’iniz için okunabilir yapın. Cloudflare dosyaları Cloud Storage’dan HTTPS ile alır, bu yüzden optimized/ altındaki nesnelerin herkese açık okunabilir olması gerekir. Tek tip bucket düzeyinde erişimde (uniform bucket-level access) allUsers grubuna Storage Object Viewer rolünü vermek, originals/ dahil tüm bucket’ı okunabilir yapar. Orijinallerinizin özel kalması gerekiyorsa önüne kimlik doğrulayan bir katman koyun (örneğin bucket’a giden istekleri imzalayan bir Cloudflare Worker).
  5. Proxy’lenen bir Cloudflare DNS kaydını Cloud Storage’a yönlendirin, örneğin images.example.com. Ya bucket’a ana makine adını verip c.storage.googleapis.com adresine proxy’lenen bir CNAME kullanın ya da istekleri yolun başında bucket adıyla storage.googleapis.com adresine gönderen bir Cloudflare Origin Rule kullanın.
  6. Bir Cloudflare API token’ı oluşturun; zone için Zone → Cache Purge → Purge izniyle (Zone → Zone → Read isteğe bağlı).
  7. Panelde: depolama sağlayıcısı Google Cloud Storage, bucket, endpoint https://storage.googleapis.com, bölge auto, HMAC access ID ve secret; CDN Cloudflare, Zone ID, API token’ı ve CDN alan adı https://images.example.com.

D. MinIO veya herhangi bir S3 uyumlu depolama + Cloudflare

Bu bölüm MinIO’yu ve Hetzner, Wasabi, Vultr, SumoPod, Alibaba Cloud OSS, Tencent Cloud COS ve DigitalOcean Spaces gibi S3 uyumlu hizmetleri kapsar.

SağlayıcıPanelde seçinEndpointNotlar
MinIOMinIOSunucunuz, ör. https://minio.example.comPath-style istekler açık. Sunucuya internetten HTTPS ile erişilebilmelidir.
Hetzner Object StorageÖzel S3 uyumluhttps://<location>.your-objectstorage.com
WasabiÖzel S3 uyumluhttps://s3.<region>.wasabisys.com
Vultr Object StorageÖzel S3 uyumluhttps://<region>.vultrobjects.com
SumoPod StorageSumoPod StorageSumoPod depolama panelinizdenPath-style varsayılan olarak açık.
Alibaba Cloud OSSAlibaba Cloud OSShttps://oss-<region>.aliyuncs.comYalnızca virtual-hosted stili.
Tencent Cloud COSTencent Cloud COShttps://cos.<region>.myqcloud.comBucket adı APPID’nizi içerir, ör. my-images-1250000000.
DigitalOcean SpacesDigitalOcean Spaceshttps://<region>.digitaloceanspaces.com
  1. Bucket’ı oluşturun ve yalnızca o bucket ile sınırlı, nesnelerde yazma, okuma ve silme izni olan bir anahtar oluşturun (aşağıdaki Minimum izinler bölümüne bakın).
  2. optimized/ klasörünü CDN’iniz için okunabilir yapın, örneğin yalnızca optimized/* için anonim s3:GetObject izni veren bir bucket politikasıyla. MinIO’da:
JSON
{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Principal": {        "AWS": [          "*"        ]      },      "Action": [        "s3:GetObject"      ],      "Resource": [        "arn:aws:s3:::my-images/optimized/*"      ]    }  ]}
  1. Bucket’ın önüne Cloudflare koyun: images.example.com için bucket’ın herkese açık ana makinesine işaret eden, proxy’lenen bir DNS kaydı. Sağlayıcı istekte kendi ana makine adını istiyorsa Host başlığını yeniden yazan (ve path-style ana makineler için yola bucket adını ekleyen) bir Cloudflare Origin Rule ekleyin.
  2. Bir Cloudflare API token’ı oluşturun; zone için Zone → Cache Purge → Purge izniyle (Zone → Zone → Read isteğe bağlı).
  3. Panelde: tablodan sağlayıcıyı seçin; bucket’ı, endpoint’i, bölgeyi (sağlayıcının bölgesi yoksa auto) ve anahtarları girin; tabloda belirtildiyse path-style istekleri açın; ardından CDN Cloudflare, Zone ID, API token’ı ve CDN alan adı.

Minimum izinler

smallPict’e yalnızca ihtiyaç duyduğu işlemleri, tek bir bucket üzerinde yapabilen anahtarlar verin.

Sağlayıcıİzinler
Amazon S3arn:aws:s3:::<bucket>/* üzerinde s3:PutObject, s3:GetObject, s3:DeleteObject
Amazon CloudFrontDağıtım üzerinde cloudfront:CreateInvalidation; alan adının algılanabilmesi için isteğe bağlı cloudfront:GetDistribution
Cloudflare R2Bucket ile sınırlı, Object Read & Write izinli R2 API token’ı
Cloudflare (CDN)Zone için Zone → Cache Purge → Purge izinli API token’ı; isteğe bağlı Zone → Zone → Read
Google Cloud StorageBucket üzerinde roles/storage.objectUser rolüne sahip bir hizmet hesabı için HMAC anahtarı
Alibaba Cloud OSSBucket üzerinde oss:PutObject, oss:GetObject, oss:DeleteObject izinli RAM kullanıcısı
Tencent Cloud COSBucket üzerinde cos:PutObject, cos:GetObject, cos:DeleteObject izinli CAM alt kullanıcısı (bucket adı APPID’yi içerir)
DigitalOcean SpacesBucket ile sınırlı, okuma, yazma ve silme izinli Spaces erişim anahtarı
MinIO / özel S3 uyumlu<bucket>/* üzerinde yazma, okuma ve silme; endpoint herkese açık HTTPS olmalıdır

Bağlantı kontrolü

Her kaydettiğinizde (ve Kontrolü yeniden dene düğmesine tıkladığınızda) smallPict, bağlantıyı kullanmadan önce tamamını kontrol eder:

  1. Depolama: bucket’ınızda .smallpict-probe/ altına küçük bir test dosyası yazar, geri okur ve siler.
  2. Cloudflare: zone’unuza tek URL’lik bir test temizleme isteği gönderir.
  3. CloudFront: /.smallpict-probe/... yolu için bir test invalidation’ı oluşturur. Bu, ay içindeki CloudFront invalidation yolu sayınıza dahil edilir.

Herhangi bir adım başarısız olursa hiçbir şey değiştirilmez. Panel, nedeni ilgili alanın yanında gösterir; örneğin bucket adı veya API token’ı. Bağlantı kontrolü dakikada 5 denemeyle sınırlıdır.


CDN’iniz için bucket erişimi

  • optimized/ CDN’iniz tarafından okunabilir olmalıdır: ya bu önek için herkese açık okuma ya da özel bir bucket için CDN kaynak erişimi (CloudFront origin access control veya R2 özel alan adı).
  • originals/ özel kalabilir. CDN’inizin buna hiç ihtiyacı yoktur.
  • CORS yalnızca tarayıcılar görselleri JavaScript’ten farklı bir kaynaktan alıyorsa gerekir (örneğin fetch() veya bir canvas). Düz <img> etiketleri için gerekmez. Gerekiyorsa sitenizin kaynağından GET ve HEAD isteklerine izin verin.

Nesne düzeni ve URL’ler

NeBucket’ınızdaki anahtarURL
Orijinaloriginals/<job_id>/<file>Sunulmaz
Optimize edilmiş dosyaoptimized/<job_id>.<ext><cdn_domain>/optimized/<job_id>.<ext>

CDN alan adı bir yol öneki içerebilir, örneğin https://example.com/images; bu durumda URL https://example.com/images/optimized/<job_id>.<ext> olur.


Önbellek başlıkları

Optimize edilmiş dosyalar Cache-Control: public, max-age=31536000, immutable başlığıyla yazılır. Her iş benzersiz bir anahtar alır; bu yüzden yeni bir sonucun URL’si her zaman yenidir ve temizlemeye nadiren gerek duyulur. CDN’inizin önbellek kurallarının bu başlığı daha kısa bir süreyle geçersiz kılmasına izin vermeyin.


Önbellek temizleme

  • API üzerinden yapılan temizleme istekleri (POST /v1/purge) toplu olarak sizin CDN’inize gider.
  • Cloudflare’de dosyalar URL’ye göre temizlenir. “Tümünü temizle” yalnızca teslim ana makinenizi ve yol önekinizi temizler, zone’unuzun tamamını değil.
  • CloudFront’ta dosyalar invalidation’larla temizlenir. “Tümünü temizle” bir /* invalidation’ı oluşturur. CloudFront’un aylık ücretsiz kotasını aşan invalidation yolları AWS tarafından hesabınıza faturalandırılır.

Mod değiştirme

Mod değiştirmek mevcut dosyaları taşımaz. Daha önce teslim edilen dosyalar mevcut URL’lerini korur; yeni modu yalnızca yeni işler kullanır.

  • Yönetilen → BYO: yeni işler bucket’ınıza gider ve CDN’iniz tarafından sunulur. cdn.smallpict.app üzerindeki dosyalar orada kalır.
  • BYO → yönetilen: yeni işler yeniden yönetilen depolama ve CDN’i kullanır. BYO ayarlarınız ve anahtarlarınız, Bağlantıyı kes düğmesine tıklayana kadar kayıtlı ama kullanılmadan kalır; böylece yeniden girmeden geri geçebilirsiniz.
  • Bağlantıyı kes: kayıtlı anahtarları ve BYO ayarlarını siler ve sizi yönetilen moda döndürür. Bucket’ınızdaki dosyalara dokunulmaz.

Bir şey ters gittiğinde

  • smallPict bucket’ınıza yazamazsa yeniden dener, ardından API yanıtında okuyabileceğiniz bir nedenle işi başarısız olarak sonlandırır.
  • Panel, son hatayı ve ne zaman oluştuğunu bir Kontrolü yeniden dene düğmesiyle birlikte gösterir.
  • Başarısız her iş için değil, olay başına bir e-posta alırsınız.
  • smallPict asla yönetilen depolamaya geri dönmez. Dosyalarınız asla sizin seçmediğiniz bir yerde saklanmaz.

Güvenlik

  • Anahtarlar şifreli bir gizli bilgi deposunda tutulur. Bir daha asla gösterilmez, API tarafından döndürülmez ve günlüklere yazılmaz.
  • Bir anahtarı yenilemek için yenisini girip kaydedin; bağlantı kontrolü yeni anahtarla çalışır. Kayıtlı anahtarı korumak için anahtar alanını boş bırakın.
  • Depolama ve CDN endpoint’leri HTTPS kullanmalıdır. Özel, loopback, link-local veya diğer dahili adreslere çözümlenen endpoint’ler reddedilir.
  • smallPict için ayrı, dar kapsamlı anahtarlar kullanın ve BYO’yu kullanmayı bırakırsanız bunları sağlayıcınızın konsolundan iptal edin.