Skip to content
smallPict

अपना स्टोरेज + CDN इस्तेमाल करें

API Velocity और Momentum प्लान पर अपना ऑब्जेक्ट स्टोरेज और अपना CDN जोड़ें: हर प्रोवाइडर के लिए सेटअप, न्यूनतम अनुमतियाँ, कनेक्शन जाँच, और मोड बदलने पर क्या होता है।

उपलब्ध है: API Velocity और Momentum प्लान पर। Ignite (इसमें CDN नहीं है), डेवलपर सैंडबॉक्स (सैंडबॉक्स फ़ाइलें अस्थायी होती हैं) या WordPress प्लान (ये मैनेज्ड smallPict CDN इस्तेमाल करते हैं) पर उपलब्ध नहीं है।

संक्षेप में: BYO मोड में smallPict आपकी मूल फ़ाइलें और ऑप्टिमाइज़ की गई इमेज आपके बकेट में लिखता है, और आपका CDN उन्हें डिलीवर करता है। स्टोरेज और CDN हमेशा साथ जुड़ते हैं: आप एक को दूसरे के बिना नहीं ला सकते।


BYO क्या है

Velocity और Momentum में दो डिलीवरी मोड हैं। आप इनमें से एक डैशबोर्ड → CDN और स्टोरेज में चुनते हैं।

  • मैनेज्ड (डिफ़ॉल्ट): smallPict आपकी मूल फ़ाइलें अपने एन्क्रिप्टेड स्टोरेज में रखता है (90 दिनों के बाद लंबी अवधि के आर्काइव में ले जाई जाती हैं) और ऑप्टिमाइज़ की गई इमेज cdn.smallpict.app से डिलीवर करता है। कुछ भी सेट अप नहीं करना होता।
  • अपना स्टोरेज + CDN इस्तेमाल करें (BYO): आप अपने अकाउंट में एक S3-संगत बकेट और अपने अकाउंट में एक CDN जोड़ते हैं। हर नया जॉब मूल फ़ाइल और ऑप्टिमाइज़ की गई फ़ाइल आपके बकेट में लिखता है, और API आपके CDN डोमेन वाले URL लौटाता है।

यह साथ जुड़ने का नियम इसलिए है क्योंकि smallPict को डिलीवरी के दोनों हिस्से संभालने होते हैं: फ़ाइलें लिखना और कैश से पुरानी कॉपियाँ हटाना। CDN के बिना बकेट में कैश पर्ज के लिए कोई जगह नहीं होगी; बकेट के बिना CDN के पास डिलीवर करने को कुछ नहीं होगा।


मैनेज्ड बनाम BYO

मैनेज्ड (डिफ़ॉल्ट)अपना स्टोरेज + CDN इस्तेमाल करें
मूल फ़ाइलेंsmallPict का एन्क्रिप्टेड स्टोरेजआपके बकेट में originals/<job_id>/<file>
ऑप्टिमाइज़ की गई फ़ाइलेंcdn.smallpict.app से डिलीवरआपके बकेट में optimized/<job_id>.<ext>, आपके CDN डोमेन से डिलीवर
स्टोरेज कोटाVelocity 50 GB, Momentum 100 GBगिना नहीं जाता। भुगतान आप अपने स्टोरेज प्रोवाइडर को करते हैं।
CDN बैंडविड्थVelocity 30 GB/महीना, Momentum 200 GB/महीनागिना नहीं जाता। भुगतान आप अपने CDN प्रोवाइडर को करते हैं।
ट्रांसफ़ॉर्मेशनआपके प्लान में गिने जाते हैंआपके प्लान में गिने जाते हैं
smallPict द्वारा रखी गई कॉपीहाँ, जब तक आपका अकाउंट सक्रिय हैकोई नहीं। केवल प्रोसेसिंग के लिए अस्थायी अपलोड, जो 24 घंटे के भीतर हटा दिया जाता है।
कैश पर्जस्वचालितस्वचालित, आपके CDN के API के ज़रिए
CDN परफ़ॉर्मेंस, डोमेन और लागतsmallPictआप। smallPict आपके CDN की परफ़ॉर्मेंस, डोमेन या बिलों के लिए ज़िम्मेदार नहीं है।

समर्थित प्रोवाइडर

स्टोरेज (अभी उपलब्ध): Amazon S3, Cloudflare R2, Google Cloud Storage (S3 इंटरऑपरेबिलिटी), Alibaba Cloud OSS, Tencent Cloud COS, DigitalOcean Spaces, SumoPod Storage, MinIO, और कस्टम एंडपॉइंट के ज़रिए कोई भी अन्य S3-संगत सेवा (जैसे Hetzner, Vultr या Wasabi)।

CDN (अभी उपलब्ध): Cloudflare और Amazon CloudFront।

नियोजित: Azure Blob Storage और अन्य CDN। आप क्लाउड प्रोवाइडर पेज पर अर्ली एक्सेस का अनुरोध कर सकते हैं।


शुरू करने से पहले

  1. आप API Velocity या Momentum पर हैं और अकाउंट एडमिन के रूप में साइन इन हैं।
  2. आपके पास एक बकेट है, और एक CDN है जो उस बकेट की फ़ाइलें HTTPS पर डिलीवर करता है।
  3. स्टोरेज एंडपॉइंट इंटरनेट से HTTPS पर पहुँच योग्य है। प्राइवेट, आंतरिक और सादे HTTP वाले एंडपॉइंट अस्वीकार कर दिए जाते हैं।
  4. आपने smallPict के लिए सीमित अनुमतियों वाली कुंजियाँ बनाई हैं (नीचे न्यूनतम अनुमतियाँ देखें)। अपने अकाउंट की रूट या एडमिन कुंजियाँ इस्तेमाल न करें।

फिर डैशबोर्ड → CDN और स्टोरेज खोलें, अपना स्टोरेज + CDN इस्तेमाल करें चुनें, दोनों हिस्से भरें और स्टोरेज + CDN सेव करें चुनें। smallPict कनेक्शन जाँच चलाता है (नीचे बताई गई है) और जाँच पास होने पर ही आपको BYO पर स्विच करता है।


सेटअप गाइड

A. Amazon S3 + Amazon CloudFront

  1. अपनी पसंद के रीजन में बकेट बनाएँ, जैसे ap-southeast-1 में my-images। Block Public Access चालू रखें।
  2. बकेट को ओरिजिन बनाकर एक CloudFront डिस्ट्रिब्यूशन बनाएँ। Origin access control (OAC) इस्तेमाल करें ताकि बकेट प्राइवेट रहते हुए भी CloudFront उसे पढ़ सके, और CloudFront द्वारा सुझाई गई बकेट पॉलिसी लागू करें।
  3. वैकल्पिक: आपका अपना डोमेन। डिस्ट्रिब्यूशन में एक वैकल्पिक डोमेन नाम (जैसे images.example.com) और एक सर्टिफ़िकेट जोड़ें, और एक DNS रिकॉर्ड को डिस्ट्रिब्यूशन की ओर पॉइंट करें।
  4. इस पॉलिसी के साथ स्टोरेज के लिए एक IAM यूज़र (या रोल) बनाएँ:
JSON
{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Action": [        "s3:PutObject",        "s3:GetObject",        "s3:DeleteObject"      ],      "Resource": "arn:aws:s3:::my-images/*"    }  ]}
  1. इस पॉलिसी के साथ CloudFront के लिए एक IAM यूज़र बनाएँ (यह वही यूज़र हो सकता है)। cloudfront:GetDistribution वैकल्पिक है; इसके होने पर, CDN डोमेन खाली छोड़ने पर smallPict डिस्ट्रिब्यूशन का डोमेन पता लगा सकता है।
JSON
{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Action": [        "cloudfront:CreateInvalidation",        "cloudfront:GetDistribution"      ],      "Resource": "arn:aws:cloudfront::123456789012:distribution/E2QWRUHAPOMQZL"    }  ]}
  1. डैशबोर्ड में:
    • स्टोरेज प्रोवाइडर Amazon S3, बकेट my-images, रीजन ap-southeast-1, एंडपॉइंट खाली (रीजन का स्टैंडर्ड एंडपॉइंट इस्तेमाल होता है), और स्टोरेज की एक्सेस की ID और सीक्रेट।
    • CDN Amazon CloudFront, Distribution ID (जैसे E2QWRUHAPOMQZL), CloudFront की एक्सेस की ID और सीक्रेट, और वैकल्पिक रूप से CDN डोमेन (https://images.example.com)। डिस्ट्रिब्यूशन का अपना *.cloudfront.net डोमेन इस्तेमाल करने के लिए डोमेन खाली छोड़ें।

B. Cloudflare R2 + Cloudflare

  1. एक R2 बकेट बनाएँ, जैसे my-images।
  2. उसी Cloudflare अकाउंट के किसी ज़ोन पर बकेट से एक कस्टम डोमेन जोड़ें (R2 → आपका बकेट → Settings → Custom Domains), जैसे images.example.com। उस डोमेन पर आने वाले अनुरोध Cloudflare कैश से होकर जाते हैं। प्रोडक्शन के लिए r2.dev डेवलपमेंट URL इस्तेमाल न करें।
  3. केवल इस बकेट तक सीमित Object Read & Write के साथ एक R2 API टोकन बनाएँ (R2 → Manage API tokens)। दिखाई गई Access Key ID और Secret Access Key कॉपी करें।
  4. ज़ोन के लिए Zone → Cache Purge → Purge के साथ एक Cloudflare API टोकन बनाएँ (My Profile → API Tokens)। Zone → Zone → Read वैकल्पिक है।
  5. डैशबोर्ड में:
    • स्टोरेज प्रोवाइडर Cloudflare R2, बकेट my-images, एंडपॉइंट https://<account_id>.r2.cloudflarestorage.com (आपके बकेट की S3 API जानकारी में दिखता है), रीजन auto, और R2 Access Key ID और Secret Access Key।
    • CDN Cloudflare, Zone ID (डोमेन का Overview पेज, API सेक्शन), API टोकन, और CDN डोमेन https://images.example.com।

C. Google Cloud Storage + Cloudflare

Google Cloud Storage को HMAC कुंजियों के साथ इसके S3-संगत XML API के ज़रिए जोड़ा जाता है।

  1. बकेट बनाएँ, जैसे my-images।
  2. एक सर्विस अकाउंट बनाएँ और उसे केवल इस बकेट पर Storage Object User (roles/storage.objectUser) रोल दें।
  3. सर्विस अकाउंट के लिए एक HMAC की बनाएँ: Cloud Storage → Settings → Interoperability → Create a key for a service account। एक्सेस ID और सीक्रेट कॉपी करें।
  4. ऑप्टिमाइज़ की गई फ़ाइलों को अपने CDN के लिए पढ़ने योग्य बनाएँ। Cloudflare, Cloud Storage से HTTPS पर फ़ाइलें लाता है, इसलिए optimized/ के अंतर्गत ऑब्जेक्ट सार्वजनिक रूप से पढ़ने योग्य होने चाहिए। uniform bucket-level access के साथ, allUsers को Storage Object Viewer रोल देने से पूरा बकेट पढ़ने योग्य हो जाता है, originals/ सहित। अगर आपकी मूल फ़ाइलें प्राइवेट रहनी चाहिए, तो आगे एक ऑथेंटिकेशन लेयर लगाएँ (जैसे एक Cloudflare Worker जो बकेट को भेजे जाने वाले अनुरोधों पर साइन करता है)।
  5. एक प्रॉक्सी किया गया Cloudflare DNS रिकॉर्ड Cloud Storage की ओर पॉइंट करें, जैसे images.example.com। या तो बकेट का नाम होस्टनेम के अनुसार रखें और c.storage.googleapis.com के लिए प्रॉक्सी किया गया CNAME इस्तेमाल करें, या एक Cloudflare Origin Rule इस्तेमाल करें जो पाथ की शुरुआत में बकेट नाम के साथ अनुरोध storage.googleapis.com पर भेजे।
  6. ज़ोन के लिए Zone → Cache Purge → Purge के साथ एक Cloudflare API टोकन बनाएँ (Zone → Zone → Read वैकल्पिक)।
  7. डैशबोर्ड में: स्टोरेज प्रोवाइडर Google Cloud Storage, बकेट, एंडपॉइंट https://storage.googleapis.com, रीजन auto, HMAC एक्सेस ID और सीक्रेट; CDN Cloudflare, Zone ID, API टोकन और CDN डोमेन https://images.example.com।

D. MinIO या कोई भी S3-संगत स्टोरेज + Cloudflare

इसमें MinIO और S3-संगत सेवाएँ शामिल हैं, जैसे Hetzner, Wasabi, Vultr, SumoPod, Alibaba Cloud OSS, Tencent Cloud COS और DigitalOcean Spaces।

प्रोवाइडरडैशबोर्ड में चुनेंएंडपॉइंटनोट्स
MinIOMinIOआपका सर्वर, जैसे https://minio.example.comपाथ-स्टाइल अनुरोध चालू। सर्वर इंटरनेट से HTTPS पर पहुँच योग्य होना चाहिए।
Hetzner Object Storageकस्टम S3-संगतhttps://<location>.your-objectstorage.com
Wasabiकस्टम S3-संगतhttps://s3.<region>.wasabisys.com
Vultr Object Storageकस्टम S3-संगतhttps://<region>.vultrobjects.com
SumoPod StorageSumoPod Storageआपके SumoPod स्टोरेज डैशबोर्ड सेपाथ-स्टाइल डिफ़ॉल्ट रूप से चालू।
Alibaba Cloud OSSAlibaba Cloud OSShttps://oss-<region>.aliyuncs.comकेवल वर्चुअल-होस्टेड स्टाइल।
Tencent Cloud COSTencent Cloud COShttps://cos.<region>.myqcloud.comबकेट नाम में आपका APPID शामिल होता है, जैसे my-images-1250000000।
DigitalOcean SpacesDigitalOcean Spaceshttps://<region>.digitaloceanspaces.com
  1. बकेट बनाएँ और उस बकेट तक सीमित एक की बनाएँ जिसमें ऑब्जेक्ट पर put, get और delete की अनुमति हो (नीचे न्यूनतम अनुमतियाँ देखें)।
  2. optimized/ को अपने CDN के लिए पढ़ने योग्य बनाएँ, जैसे एक बकेट पॉलिसी से जो केवल optimized/* पर अनाम s3:GetObject की अनुमति देती है। MinIO पर:
JSON
{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Principal": {        "AWS": [          "*"        ]      },      "Action": [        "s3:GetObject"      ],      "Resource": [        "arn:aws:s3:::my-images/optimized/*"      ]    }  ]}
  1. बकेट के आगे Cloudflare लगाएँ: images.example.com के लिए एक प्रॉक्सी किया गया DNS रिकॉर्ड जो बकेट के पब्लिक होस्ट की ओर पॉइंट करे। अगर प्रोवाइडर को अनुरोध में अपना होस्टनेम चाहिए, तो एक Cloudflare Origin Rule जोड़ें जो Host हेडर को फिर से लिखे (और, पाथ-स्टाइल होस्ट के लिए, पाथ में बकेट नाम जोड़े)।
  2. ज़ोन के लिए Zone → Cache Purge → Purge के साथ एक Cloudflare API टोकन बनाएँ (Zone → Zone → Read वैकल्पिक)।
  3. डैशबोर्ड में: तालिका से प्रोवाइडर चुनें, बकेट, एंडपॉइंट, रीजन (अगर प्रोवाइडर का कोई रीजन नहीं है तो auto) और कुंजियाँ दर्ज करें; जहाँ तालिका कहे वहाँ पाथ-स्टाइल अनुरोध चालू करें; फिर CDN Cloudflare, Zone ID, API टोकन और CDN डोमेन।

न्यूनतम अनुमतियाँ

smallPict को ऐसी कुंजियाँ दें जो एक ही बकेट पर केवल ज़रूरी काम कर सकें।

प्रोवाइडरअनुमतियाँ
Amazon S3arn:aws:s3:::<bucket>/* पर s3:PutObject, s3:GetObject, s3:DeleteObject
Amazon CloudFrontडिस्ट्रिब्यूशन पर cloudfront:CreateInvalidation; डोमेन का पता लगाने के लिए वैकल्पिक cloudfront:GetDistribution
Cloudflare R2Object Read & Write वाला R2 API टोकन, बकेट तक सीमित
Cloudflare (CDN)ज़ोन के लिए Zone → Cache Purge → Purge वाला API टोकन; वैकल्पिक Zone → Zone → Read
Google Cloud Storageबकेट पर roles/storage.objectUser वाले सर्विस अकाउंट की HMAC की
Alibaba Cloud OSSबकेट पर oss:PutObject, oss:GetObject, oss:DeleteObject वाला RAM यूज़र
Tencent Cloud COSबकेट पर cos:PutObject, cos:GetObject, cos:DeleteObject वाला CAM सब-यूज़र (बकेट नाम में APPID शामिल होता है)
DigitalOcean Spacesपढ़ने, लिखने और हटाने की अनुमति वाली, बकेट तक सीमित Spaces एक्सेस की
MinIO / कस्टम S3-संगत<bucket>/* पर put, get और delete; एंडपॉइंट पब्लिक HTTPS होना चाहिए

कनेक्शन जाँच

हर बार सेव करने पर (और फिर से जाँचें चुनने पर), smallPict इस्तेमाल करने से पहले पूरा कनेक्शन जाँचता है:

  1. स्टोरेज: आपके बकेट में .smallpict-probe/ के अंतर्गत एक छोटी टेस्ट फ़ाइल लिखता है, उसे वापस पढ़ता है और हटा देता है।
  2. Cloudflare: आपके ज़ोन को एक सिंगल-URL टेस्ट पर्ज भेजता है।
  3. CloudFront: /.smallpict-probe/... पाथ के लिए एक टेस्ट इनवैलिडेशन बनाता है। यह उस महीने के आपके CloudFront इनवैलिडेशन पाथ में गिना जाता है।

अगर कोई भी चरण विफल होता है, तो कुछ भी स्विच नहीं होता। डैशबोर्ड संबंधित फ़ील्ड के पास कारण दिखाता है, जैसे बकेट नाम या API टोकन। कनेक्शन जाँच प्रति मिनट 5 प्रयासों तक सीमित है।


आपके CDN के लिए बकेट एक्सेस

  • optimized/ आपके CDN के लिए पढ़ने योग्य होना चाहिए: या तो उस प्रीफ़िक्स पर public-read, या प्राइवेट बकेट पर CDN ओरिजिन एक्सेस (CloudFront origin access control, या R2 कस्टम डोमेन)।
  • originals/ प्राइवेट रह सकता है। आपके CDN को इसकी कभी ज़रूरत नहीं होती।
  • CORS की ज़रूरत तभी है जब ब्राउज़र JavaScript से क्रॉस-ओरिजिन इमेज लाते हैं (जैसे fetch() या canvas)। सामान्य <img> टैग को इसकी ज़रूरत नहीं होती। अगर ज़रूरत हो, तो अपनी साइट के ओरिजिन से GET और HEAD की अनुमति दें।

ऑब्जेक्ट लेआउट और URL

क्याआपके बकेट में कीURL
मूल फ़ाइलoriginals/<job_id>/<file>डिलीवर नहीं की जाती
ऑप्टिमाइज़ की गई फ़ाइलoptimized/<job_id>.<ext><cdn_domain>/optimized/<job_id>.<ext>

CDN डोमेन में पाथ प्रीफ़िक्स हो सकता है, जैसे https://example.com/images; तब URL https://example.com/images/optimized/<job_id>.<ext> होता है।


कैश हेडर

ऑप्टिमाइज़ की गई फ़ाइलें Cache-Control: public, max-age=31536000, immutable के साथ लिखी जाती हैं। हर जॉब को एक अनोखी की मिलती है, इसलिए नए नतीजे का URL हमेशा नया होता है और पर्ज की ज़रूरत कम ही पड़ती है। ध्यान रखें कि आपके CDN के कैशिंग नियम इस हेडर को कम समय से ओवरराइड न करें।


कैश पर्ज

  • API के ज़रिए किए गए पर्ज अनुरोध (POST /v1/purge) बैच में आपके CDN को भेजे जाते हैं।
  • Cloudflare पर फ़ाइलें URL के आधार पर पर्ज होती हैं। "Purge all" केवल आपके डिलीवरी होस्ट और पाथ प्रीफ़िक्स को पर्ज करता है, पूरे ज़ोन को नहीं।
  • CloudFront पर फ़ाइलें इनवैलिडेशन से पर्ज होती हैं। "Purge all" एक /* इनवैलिडेशन बनाता है। CloudFront की मासिक मुफ़्त सीमा से ज़्यादा इनवैलिडेशन पाथ का बिल AWS आपके अकाउंट में भेजता है।

मोड बदलना

मोड बदलने से मौजूदा फ़ाइलें नहीं हटतीं। पहले से डिलीवर की गई फ़ाइलों के URL वही रहते हैं; केवल नए जॉब नए मोड का इस्तेमाल करते हैं।

  • मैनेज्ड → BYO: नए जॉब आपके बकेट में जाते हैं और आपके CDN से डिलीवर होते हैं। जो फ़ाइलें पहले से cdn.smallpict.app पर हैं, वे वहीं रहती हैं।
  • BYO → मैनेज्ड: नए जॉब फिर से मैनेज्ड स्टोरेज और CDN इस्तेमाल करते हैं। आपकी BYO सेटिंग्स और कुंजियाँ सेव रहती हैं लेकिन इस्तेमाल नहीं होतीं, इसलिए आप उन्हें दोबारा दर्ज किए बिना वापस स्विच कर सकते हैं, जब तक आप डिस्कनेक्ट करें नहीं चुनते।
  • डिस्कनेक्ट करें: सेव की गई कुंजियाँ और BYO सेटिंग्स हटा देता है और आपको मैनेज्ड पर वापस ले जाता है। आपके बकेट की फ़ाइलों को छुआ नहीं जाता।

जब कुछ विफल हो

  • अगर smallPict आपके बकेट में नहीं लिख पाता, तो वह फिर से कोशिश करता है, फिर एक कारण के साथ जॉब को विफल कर देता है जिसे आप API रिस्पॉन्स में पढ़ सकते हैं।
  • डैशबोर्ड आख़िरी त्रुटि और उसका समय दिखाता है, साथ में फिर से जाँचें बटन।
  • आपको हर घटना पर एक ईमेल मिलता है, हर विफल जॉब पर नहीं।
  • smallPict कभी भी मैनेज्ड स्टोरेज पर फ़ॉलबैक नहीं करता। आपकी फ़ाइलें कभी ऐसी जगह स्टोर नहीं होतीं जिसे आपने नहीं चुना।

सुरक्षा

  • कुंजियाँ एक एन्क्रिप्टेड सीक्रेट स्टोर में रखी जाती हैं। वे दोबारा कभी नहीं दिखाई जातीं, API द्वारा कभी नहीं लौटाई जातीं और कभी लॉग में नहीं लिखी जातीं।
  • किसी की को रोटेट करने के लिए, नई की दर्ज करें और सेव करें; कनेक्शन जाँच नई की के साथ चलती है। सेव की गई की रखने के लिए की वाला फ़ील्ड खाली छोड़ें।
  • स्टोरेज और CDN एंडपॉइंट को HTTPS इस्तेमाल करना होगा। जो एंडपॉइंट प्राइवेट, लूपबैक, लिंक-लोकल या अन्य आंतरिक पतों पर रिज़ॉल्व होते हैं, उन्हें अस्वीकार कर दिया जाता है।
  • smallPict के लिए अलग, सीमित अनुमतियों वाली कुंजियाँ इस्तेमाल करें, और BYO का इस्तेमाल बंद करने पर उन्हें अपने प्रोवाइडर के कंसोल में रद्द कर दें।