शाळांसाठी मल्टी-टेनंट SaaS प्लॅटफॉर्म Azure आणि Cosmos DB संपूर्ण मार्गदर्शक
ही सिस्टीम १००, ५०० किंवा १,००० शाळांना एकाच कोडबेसवरून कशी चालवली जाते? Azure वरील संसाधने (Resources), डेटाबेस पार्टीशनिंग, बिझनेस फ्लो आणि नफ्याचे संपूर्ण मराठी विश्लेषण.
१. SaaS चा मुख्य गाभा (The Big Picture Concept)
सामान्य वेब डेव्हलपमेंट एजन्सी प्रत्येक शाळेसाठी वेगळी वर्डप्रेस किंवा कस्टम वेबसाईट बनवते. जेव्हा १०० शाळा होतात, तेव्हा १०० वेगळ्या वेबसाईट्स सांभाळणे अशक्य होते.
आपण तयार केलेले मॉडेल हे Shopify किंवा Wix सारखे मल्टी-टेनंट SaaS (Software as a Service) आहे:
१
१ सिंगल कोडबेस
सर्व शाळा एकाच Next.js ॲप्लिकेशनवर चालतात. तुम्ही नवीन फिचर ॲड केले की सर्व १०० शाळांना ते एका सेकंदात मिळते.
२
३० सेकंदात नवीन शाळा
शाळेचे नाव, लोगो, बोर्ड (CBSE/ICSE/IB) आणि रंग निवडा; त्वरित शाळेची स्वतंत्र वेबसाईट आणि CMS डॅशबोर्ड तयार होतो.
३
कस्टम डोमेन किंवा सबडोमेन
शाळा स्वतःचा डोमेन वापरू शकते (उदा. www.dpsschool.edu) किंवा तुमचा सबडोमेन (dps.edulaunch.com).
२. सुरुवातीपासून शेवटपर्यंतचा फ्लो (Start-to-End Flow)
एका नवीन शाळेला तुम्ही ही सिस्टीम विकता तेव्हा प्रत्यक्षात काय घडते?
१
शाळा ऑनबोर्डिंग (Provisioning)
तुम्ही सुपर ॲडमिन (localhost:3000) मध्ये जाऊन शाळेचे नाव, सबडोमेन व प्लॅन निवडता. Cosmos DB मध्ये शाळेचा स्वतंत्र पार्टीशन (/tenantId) तयार होतो.
२
शाळेची पब्लिक वेबसाईट लाईव्ह
पालक आणि विद्यार्थी शाळेच्या ब्रँडेड वेबसाईटवर येतात. तिथे शाळेचे परिपत्रक (Notices), हिरो बॅनर, गॅलरी आणि अभ्यासक्रम दिसतो.
३
पालक ॲडमिशन फॉर्म भरतात
पालक "Apply for Admission" वर क्लिक करून फॉर्म भरतात. हा डेटा थेट Cosmos DB मधील त्या शाळेच्या पार्टीशनमध्ये सेव्ह होतो.
४
शाळा CMS मधून मॅनेज करते
शाळेचे मुख्याध्यापक किंवा क्लार्क त्यांच्या CMS मध्ये (/s/[tenantId]/admin) लॉगिन करून लीड्स पाहतात, नोटीस पोस्ट करतात आणि स्टेटस अपडेट करतात.
५
दरमहा ऑटोमॅटिक बिलिंग
शाळा तुम्हाला दरमहा ₹१५,००० ते ₹३५,००० (किंवा $99 ते $499) सबस्क्रिप्शन फी देते.
३. शाळांचे कस्टम डोमेन्स (my.school.com, dg.test.com, kd.edu.com) कसे चालतात?
जेव्हा एखादी शाळा स्वतःचे डोमेन (उदा. my.school.com, dg.test.com, किंवा kd.edu.com) घेऊन येते, तेव्हा आपली सिस्टीम कोणत्याही कोड बदलाशिवाय ते कसे ओळखते? हे ३ सोप्या लेव्हल्सवर काम करते:
१
शाळेचा DNS (CNAME)
शाळेच्या IT ॲडमिनला त्यांच्या GoDaddy / Namecheap मध्ये फक्त १ CNAME रेकॉर्ड टाकायचा असतो: kd.edu.com CNAME domains.edulaunch.com
२
ऑटोमॅटिक SSL (HTTPS 🔒)
Cloudflare for SaaS किंवा Azure Front Door प्रत्येक नवीन डोमेनसाठी मोफत SSL सर्टिफिकेट जनरेट करते. तुम्हाला कोणतेही मॅन्युअल सर्टिफिकेट विकत घ्यावे लागत नाही.
३
Next.js Proxy Rewrite
आपला src/proxy.ts येणाऱ्या रिक्वेस्टचा Host हेडर तपासतो आणि त्या शाळेची वेबसाईट दाखवतो. पालकांच्या ब्राऊझरमध्ये डोमेन तेच राहते!
पॉईंटर: URL कधीही बदलत नाही (Zero Redirection / 100% White-Label)
जेव्हा पालक https://kd.edu.com उघडतात, तेव्हा ब्राऊझरच्या ॲड्रेस बारमध्ये kd.edu.com हेच दिसते. त्यांना तुमच्या SaaS प्लॅटफॉर्मचा मूळ पाथ (/s/oakridge) किंवा तुमचे नाव अजिबात दिसत नाही!
शाळेच्या IT ॲडमिनला द्यावयाचा DNS चार्ट:
रेकॉर्ड टाईप (Type)
होस्ट / सबडोमेन (Name)
पॉईंट्स टू (Target / Value)
TTL
CNAME
kd.edu.com (किंवा www)
domains.edulaunch.com (किंवा Azure Ingress IP)
Auto / 3600
हे प्रत्यक्ष लोकलवर टेस्ट करण्यासाठी खालील लिंकवर क्लिक करा:
आपण कोडमध्ये ?domain= पॅरामीटर दिला आहे, जेणेकरून तुम्ही कोणत्याही कस्टम डोमेनची चाचणी थेट करू शकता:
// src/proxy.ts
export function proxy(request: NextRequest) {
// १. येणारा डोमेन ओळखतो
const host = request.headers.get('host'); // उदा. "kd.edu.com"
// २. डेटाबेस / मॅपमधून शोधतो हा डोमेन कोणत्या शाळेचा आहे
const tenantId = DOMAIN_TO_TENANT_MAP[host]; // 'oakridge'
// ३. ट्रान्सपरंट Rewrite (ब्राऊझरची URL न बदलता शाळेची वेबसाईट दाखवतो)
return NextResponse.rewrite(new URL(`/s/${tenantId}`, request.url));
}
४. Azure वर कोणती रिसोर्सेस (Resources) लागतील?
Azure वर १०० शाळा चालवण्यासाठी फक्त खालील ५ रिसोर्सेस लागतात:
Azure Resource
कशासाठी वापरले जाते?
फायदा
Azure Cosmos DB (NoSQL)
मुख्य मल्टी-टेनंट डेटाबेस (शाळेचे कॉन्फिगरेशन, नोटीस, ॲडमिशन लीड्स)
/tenantId द्वारे प्रत्येक शाळेचा डेटा स्वतंत्र व सुरक्षित राहतो; 5ms पेक्षा कमी लेटन्सी.
Azure Container Apps
आपले Next.js ॲप होस्ट करण्यासाठी (Docker Container)
Serverless ऑटो-स्केल; गर्दी वाढल्यास आपोआप क्षमता वाढवते, रात्री खर्च कमी करते.
Azure Blob Storage
शाळेचे मोठे फोटो, ॲन्युअल डे गॅलरी, PDF परिपत्रके साठवण्यासाठी
डेटाबेसवर भार येत नाही; स्वस्त स्टोरेज आणि हाय स्पीड डाऊनलोड.
Azure Front Door
ग्लोबल CDN, कस्टम डोमेन मॅपिंग आणि मोफत SSL सर्टिफिकेट्स
१०० शाळांचे www.school.edu ऑटोमॅटिक सुरक्षित (HTTPS) होतात.
Azure Container Registry (ACR)
आपल्या Next.js कोडची Docker इमेज स्टोअर करण्यासाठी
सुरक्षित, खाजगी आणि ऑटोमॅटिक GitHub डिप्लॉयमेंट.
५. १०० शाळांसाठी Azure Cosmos DB कसे काम करते?
अनेकांना असा प्रश्न पडतो: "१०० शाळांसाठी १०० वेगळे डेटाबेस बनवावे लागतील का?" उत्तर: अजिबात नाही! Cosmos DB मध्ये १ सिंगल डेटाबेस (SchoolSaaSDB) असतो.
पार्टीशन की (Partition Key) ची जादू: /tenantId
Cosmos DB मध्ये प्रत्येक डॉक्युमेंटमध्ये tenantId असतो. जेव्हा 'Oakridge' शाळेचा पालक येतो, तेव्हा क्वेरी फक्त Oakridge च्या पार्टीशनमध्ये शोधते. बाकीच्या ९९ शाळांच्या डेटाला हातही लावला जात नाही.
तीन मोठे फायदे:
Noisy Neighbor Protection: जर शाळा #५ मध्ये ॲडमिशनचा निकाल लागला आणि ५०,००० पालक आले, तरी त्याचा शाळा #६ ते #१०० वर ०% परिणाम होतो.
Shared Autoscale Throughput: तुम्ही डेटाबेस लेव्हलवर १,००० ते १०,००० RU/s चा शेअर्ड पूल ठेवता. सर्व १०० शाळा हाच पूल वापरतात. त्यामुळे १०० पट बिल येत नाही, फक्त १ डेटाबेसचे बिल येते!
अमर्याद क्षमता (Infinite Scale): Cosmos DB मायक्रोसॉफ्ट स्वतः Office 365, Teams आणि Xbox साठी वापरते. १०० शाळा असोत वा १०,००० शाळा, डेटाबेस कधीही क्रॅश होत नाही.
६. बिझनेस आणि नफ्याचे गणित (Economics for 100 Schools)
१०० शाळा ऑनबोर्ड झाल्यावर तुमचे उत्पन्न आणि Azure चा खर्च किती असेल?
तपशील (Item)
रक्कम (दरमहा)
१०० शाळांचे उत्पन्न (Average ₹१५,०००/शाळा दरमहा)
+ ₹१५,००,००० / महिना ($18,000/mo)
Azure Cosmos DB (Shared Autoscale)
- ₹४,००० ते ₹६,५०० / महिना
Azure Container Apps (Next.js होस्टिंग)
- ₹३,००० ते ₹५,००० / महिना
Azure Blob Storage + CDN (फोटो आणि PDF)
- ₹१,००० ते ₹२,००० / महिना
एकूण Azure क्लाउड खर्च
फक्त ₹८,००० ते ₹१३,५०० / महिना
तुमचा निव्वळ नफा (Net Monthly Profit)
₹१४,८५,०००+ / महिना (९८% मार्जिन!)
७. Azure वर डिप्लॉय कसे करावे? (Deployment Steps)
तुम्ही Azure Portal किंवा Azure CLI द्वारे अगदी सहज डिप्लॉय करू शकता:
पायरी १: Cosmos DB तयार करा
az cosmosdb create --name school-saas-cosmos --resource-group rg-school-saas --capabilities EnableServerless
पायरी २: Next.js ॲप Azure Container Apps वर रन करा
तुमच्या डोमेन रजिस्ट्रारमध्ये (GoDaddy / Cloudflare) एक CNAME रेकॉर्ड जोडा: *.edulaunch.com CNAME edulaunch-school-saas.azurecontainerapps.io
यामुळे कोणतीही नवीन शाळा जोडल्यास DNS मध्ये बदल न करता तिचा सबडोमेन त्वरित सुरू होतो!