इस प्रोजेक्ट के बारे में
CloudPath एक सेल्फ-होस्टेड IoT कंट्रोल प्लेटफॉर्म है जिसे स्थानीय मशीन या पब्लिक नेटवर्क पर तैनात किया जा सकता है। इसका लक्ष्य "डिवाइस एक्सेस, स्टेटस देखना और रिमोट कंट्रोल" को एक सामान्य कंट्रोल प्लेन बनाना है, न कि किसी विशिष्ट डेवलपमेंट बोर्ड के लिए समर्पित सॉफ्टवेयर। यह प्रोजेक्ट MIT लाइसेंस के तहत ओपन सोर्स है और मुख्य रूप से तीन भागों से बना है: एक सिंगल बाइनरी सेंट्रल सर्विस cloudpath-server, प्रत्येक कंप्यूटर या साइट पर चलने वाला गेटवे cloudpath-edge, और प्लगइन Registry कंट्रोल प्लेन के लिए कमांड-लाइन टूल cloudpath। तकनीकी रूप से, बैकएंड Go में और फ्रंटएंड React में है, WebUI बिल्ड आर्टिफैक्ट्स सर्वर में एम्बेडेड हैं, और डेटाबेस के लिए SQLite के WAL मोड का उपयोग किया गया है, जिससे बिना CGO के Linux या arm64 पर क्रॉस-कंपाइलेशन संभव है।
अधिकार विभाजन
सेंट्रल सर्विस वांछित स्थिति (desired state), टेनेंट और ऑडिट का एकमात्र प्राधिकरण है, जो RBAC, टोकन, रेट लिमिटिंग, रिटेंशन पीरियड, प्लगइन डायरेक्टरी और रनिंग इंस्टेंस की वांछित स्थिति, साथ ही ऑपरेशन डिस्पैच और रसीद सेटलमेंट के लिए जिम्मेदार है। गेटवे ऑब्जर्वेशन स्टेट का एकमात्र प्राधिकरण है, जो अंतिम सफल applied स्नैपशॉट को सहेजता है और डिवाइस सुपरविजन, बैक-ऑफ रीस्टार्ट और ऑफलाइन इवेंट बफरिंग के लिए जिम्मेदार है; नेटवर्क टूटने के बाद भी यह चलता रहता है, और पुन: कनेक्ट होने पर केवल अंतिम स्नैपशॉट लागू करता है, बीच के साइड-इफेक्ट्स को रीप्ले नहीं करता। डिवाइस की पहचान टेनेंट, गेटवे और डिवाइस के ट्रिपलेट द्वारा निर्धारित की जाती है, और ऑनलाइन ट्रांसमिशन कुंजी edge_id और device_id का संयोजन होती है। अकाउंट सेशन के तहत, गेटवे से सर्वर और फिर ब्राउज़र तक का रियल-टाइम लिंक WebSocket के माध्यम से चलता है, जबकि REST का उपयोग ऐतिहासिक क्वेरी और प्रबंधन कार्यों के लिए किया जाता है।
प्लगइन सिस्टम
प्रोजेक्ट तीन प्रकार के प्लगइन्स में विभाजित है: Driver डिफ़ॉल्ट रूप से गेटवे साइड पर चलता है, जो डिवाइस डिस्कवरी, कनेक्शन, प्रोटोकॉल पार्सिंग, क्षमता मैपिंग और डिवाइस एक्शन के लिए जिम्मेदार है; Application सेंट्रल सर्विस साइड पर चलता है, जो बिजनेस ऑब्जेक्ट्स, बाइंडिंग, नियमों, कार्यों और डोमेन API के लिए जिम्मेदार है; Connector को गेटवे या सेंट्रल सर्विस पर चलाने की योजना है, जिसका उपयोग MQTT, Webhook जैसे नोटिफिकेशन और डेटा एग्जिट के लिए किया जाएगा, जो वर्तमान में लक्ष्य स्थिति (target state) में है। कोर किसी भी विशिष्ट हार्डवेयर के लिए कोड नहीं लिखता है, एक नया डिवाइस एक Driver प्लगइन के बराबर होता है; संदर्भ ड्राइवर stcb और कई एप्लिकेशन प्लगइन्स स्वतंत्र रिपॉजिटरी के रूप में जारी किए गए हैं, जिनमें Go प्लगइन टेम्पलेट, उदाहरण एप्लिकेशन और बाइनरी से होस्ट तक E2E टेस्ट स्कैफोल्ड प्रदान किए गए हैं। प्लगइन इंस्टॉल करने से पहले Manifest, संगतता रेंज, Release एसेट्स और डाइजेस्ट का सत्यापन किया जाता है, और वर्जन, डाइजेस्ट और स्रोत को लॉक फाइल में दर्ज किया जाता है।
त्वरित शुरुआत
Go, Node, pnpm और वैकल्पिक task इंस्टॉल करने के बाद, डिपेंडेंसी खींचने के लिए task setup और दो बाइनरी जेनरेट करने के लिए task build का उपयोग करें। सर्वर डिफ़ॉल्ट रूप से 127.0.0.1:8080 पर सुनता है और /healthz हेल्थ चेक प्रदान करता है। हार्डवेयर के बिना, डिवाइस ऑनलाइन होने, ऑपरेशन निष्पादन और डिस्कनेक्ट-रीकनेक्ट को सत्यापित करने के लिए बिल्ट-इन डेमो एडेप्टर का उपयोग किया जा सकता है; वास्तविक सीरियल डिवाइस कनेक्ट करते समय, पहले संबंधित Driver प्लगइन इंस्टॉल और इनेबल करें, फिर स्थानीय edge.yaml में plugin_host चालू करें और सीरियल पोर्ट और एडेप्टर विवरण भरें। पहली बार एडमिनिस्ट्रेटर अकाउंट इंस्टॉल करने के बाद, सेवा तुरंत अकाउंट मोड में चली जाती है, और हेल्थ चेक, स्टेटिक रिसोर्सेज और ऑथेंटिकेशन इंटरफेस के अलावा सभी के लिए क्रेडेंशियल्स की आवश्यकता होती है।
मैनेजमेंट कंसोल
लॉगिन के बाद, ओवरव्यू, डिवाइस लिस्ट और विवरण, रनिंग रिकॉर्ड (इवेंट्स), एप्लिकेशन और प्लगइन्स एवं इंस्टेंस विवरण, गेटवे लिस्ट और विवरण, और सेटिंग्स तक पहुँचा जा सकता है; एडमिन के लिए सदस्य, अनुमतियाँ और एक्सेस टोकन पेज अलग से उपलब्ध हैं। डिवाइस विवरण पेज का ऑपरेशन पैनल एडेप्टर द्वारा घोषित व्हाइटलिस्ट के आधार पर बटन जेनरेट करता है; API का उपयोग करके सीधे कमांड भेजे जा सकते हैं और इवेंट स्ट्रीम और गेटवे ऑनलाइन स्टेटस की क्वेरी की जा सकती है। ऑपरेशन स्टेटस pending, sent, ok, failed, timeout होते हैं, और लंबे समय तक रसीद न मिलने पर बैकग्राउंड क्लीनअप टास्क उन्हें टाइमआउट के रूप में चिह्नित करता है। इवेंट्स और फाइनल स्टेट ऑपरेशन्स डिफ़ॉल्ट रूप से 30 दिनों तक रखे जाते हैं।
सुरक्षा डिज़ाइन
README एक्सपोज़र सरफेस को L0 सिंगल मशीन, L1 इंट्रानेट या रिवर्स प्रॉक्सी, और L2 पब्लिक नेटवर्क के तीन स्तरों में विभाजित करता है, और चेतावनी देता है कि L0 कॉन्फ़िगरेशन को सीधे पब्लिक नेटवर्क पर न रखें। क्रेडेंशियल्स के दो मोड हैं: साझा सर्विस टोकन एक संगत पथ है, जबकि अकाउंट मोड सेशन कुकी लॉगिन, admin, operator और viewer की तीन स्तर की भूमिकाएं, और cp_ प्रीफिक्स वाले टेनेंट टोकन प्रदान करता है। स्कोप read, write, admin, edge का सबसेट होता है, प्लेन टेक्स्ट केवल निर्माण प्रतिक्रिया में एक बार लौटाया जाता है, और डेटाबेस में केवल SHA-256 और शॉर्ट प्रीफिक्स स्टोर होते हैं। Secret को सर्वर कॉन्फ़िगरेशन और ऑडिट में secret://name हैंडल के रूप में दिखाया जाता है, प्लेन टेक्स्ट केवल टारगेट गेटवे पर प्रदाता द्वारा पार्स किया जाता है, और प्लगइन्स को manifest में स्पष्ट रूप से अनुमति घोषित करनी होगी; सर्वर प्लेन टेक्स्ट को स्टोर या फॉरवर्ड नहीं करता है। इसके अलावा, ऑपरेशन व्हाइटलिस्ट, पैरामीटर लंबाई और कैरेक्टर लिमिट, रिक्वेस्ट बॉडी लिमिट, WebSocket रीड लिमिट, SPA पाथ ट्रैवर्सल प्रोटेक्शन, ऑपरेशन और लॉगिन रेट लिमिटिंग और सुरक्षा रिस्पांस हेडर का एक सेट मौजूद है।
परिनियोजन और मल्टी-गेटवे एक्सेस
आधिकारिक तौर पर कंटेनर-मुक्त पब्लिक नेटवर्क परिनियोजन चरण दिए गए हैं: पहले बिल्ड आर्टिफैक्ट्स का आर्किटेक्चर सत्यापन करें (रिलीज़ मैट्रिक्स में Linux arm64 शामिल है), फिर एक समर्पित गैर-रूट अकाउंट के साथ systemd यूनिट का उपयोग करके सेवा चलाएं, सीक्रेट्स को 0600 एनवायरनमेंट फाइल में रखें, और अंत में HTTPS और WSS प्रदान करने के लिए nginx रिवर्स प्रॉक्सी का उपयोग करें, और WebSocket के लिए अलग से अपग्रेड हेडर और लंबे रीड टाइमआउट कॉन्फ़िगर करें; साथ ही यह स्पष्ट किया गया है कि ऑथेंटिकेशन उत्पाद द्वारा स्वयं संभाला जाता है, और रिवर्स प्रॉक्सी लेयर को सार्वजनिक रखा जाता है। कंटेनर और Compose स्वरूप भी उपयोग किए जा सकते हैं, लेकिन होस्ट आर्किटेक्चर इमेज के समान होना चाहिए। एक ही सर्वर से कई कंप्यूटर जोड़ना एक सामान्य उपयोग है: एडमिन प्रत्येक कंप्यूटर के लिए edge scope का टेनेंट टोकन बनाता है, और WSS एंडपॉइंट, टोकन और सहमत edge_id उपयोगकर्ता को देता है; उपयोगकर्ता रिलीज़ से संबंधित प्लेटफॉर्म बाइनरी डाउनलोड करता है, checksums से सत्यापित करता है, स्थानीय कॉन्फ़िगरेशन फाइल भरता है और उसे चलाता है। गेटवे में एक्सपोनेंशियल बैक-ऑफ रीकनेक्शन होता है, और ऑफलाइन इवेंट्स एक बाउंडेड बफर में जाते हैं और पुन: कनेक्ट होने पर रीप्ले होते हैं। अलग-अलग टेनेंट्स के डिवाइस, इवेंट, ऑपरेशन और इंस्टेंस एक-दूसरे को दिखाई नहीं देते, और एक गेटवे के ऑफलाइन होने से दूसरे पर कोई प्रभाव नहीं पड़ता।
परीक्षण और रिलीज़
परीक्षण में Go यूनिट टेस्ट, रेस डिटेक्शन, फ्रंटएंड फ्रोजन इंस्टॉलेशन और टाइप चेकिंग, प्लगइन टेम्पलेट फ्लो और एग्रीगेट गेटकीपर कमांड शामिल हैं; रिलीज़ वर्जन टैग द्वारा ट्रिगर होती है, जो छह प्लेटफॉर्म मैट्रिक्स बिल्ड और एक एकीकृत checksums फाइल जेनरेट करती है। रिपॉजिटरी सार्वजनिक बाउंड्री ऑडिट, Markdown लिंक चेक और वर्कफ़्लो स्ट्रक्चर चेक जैसे स्क्रिप्ट गेटकीपर्स भी प्रदान करती है।
वर्तमान सीमाएं
README वर्तमान स्थिति और लक्ष्य स्थिति के बीच स्पष्ट अंतर करता है: Connector और नोटिफिकेशन रनटाइम, MQTT और Modbus एक्सेस, रिमोट OTA, टाइम-सीरीज़ एग्रीगेशन, सेंट्रल की मैनेजमेंट, डिस्ट्रिब्यूटेड कोटा और मल्टी-सर्वर अभी तक लागू नहीं किए गए हैं; टेनेंट टोकन सेशन केवल REST के लिए हैं, ब्राउज़र रियल-टाइम चैनल के लिए नहीं; एक ही बाहरी ड्राइवर द्वारा कई वास्तविक बोर्ड्स को चलाना, हॉट-प्लगिंग और ऑपरेशन रसीदों को कवर करने वाला ऑन-साइट E2E भी अभी पूरा नहीं हुआ है, इसलिए मल्टी-बोर्ड लिंक को प्रोटोकॉल और वास्तविक बोर्ड साक्ष्य पूरा होने तक सत्यापित नहीं माना जाता है। प्रोजेक्ट का सिद्धांत है कि "अनलगाए क्षमताओं को वर्तमान स्थिति के रूप में नहीं लिखा जाएगा"।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.