जब भी मैं इंजीनियरों को उनके स्टैक के बारे में लिखते हुए देखता हूं, तो मैं नए टूल्स जानने के लिए उत्सुक रहता हूं। खासकर जब आप चीजें अकेले ही चला रहे होते हैं, तो आप हमेशा दूसरों के अनुभव से सीखने का प्रयास करते रहते हैं।
2015 में, मैं मौजूदा पासवर्ड मैनेजर्स के स्तर से निराश था, खासकर इसलिए कि निजी सर्वरों के लिए कुछ भी उचित नहीं था। मैंने Psono, एक ओपन सोर्स पासवर्ड मैनेजर पर काम करना शुरू किया, जिसमें उचित स्तर का एन्क्रिप्शन और सुरक्षित साझा करने के विकल्प थे। Psono को कभी भी SaaS के रूप में चलाने के लिए डिज़ाइन नहीं किया गया था, अन्यथा मैंने शुरुआत में ही कई उपयोगकर्ताओं के लिए समर्थन जोड़ा होता।
बस ताकि आपको Psono के पैमाने का एक अंदाजा हो सके। Psono वर्तमान में लगभग 70 देशों में स्थानीय स्तर पर स्थापित है, जिसमें 4000 से अधिक इंस्टॉलेशन्स हैं। अकेले Psono SaaS का वर्तमान में 15,000 से अधिक लोग उपयोग कर रहे हैं, जिनमें से अधिकांश हमारे Psono के मुफ्त कम्युनिटी संस्करण का उपयोग कर रहे हैं जो हमारे पेड एंटरप्राइज प्रोडक्ट के समान तकनीकी स्टैक पर चलता है।
एक सामान्य Psono इंस्टॉलेशन का स्टैक एक डेटाबेस, सर्वर, दो वेब क्लाइंट्स (एक नियमित उपयोगकर्ताओं के लिए और दूसरा एडमिन के लिए), iOS और Android के लिए एप्स, Chrome और Firefox के लिए ब्राउज़र एक्सटेंशन से बनता है। एक ग्राहक इसे एक LDAP गेटवे या एक फाइल सर्वर पर भी इंस्टॉल कर सकता है।
इसके अलावा, मेरे पास बहुत अधिक इंफ्रास्ट्रक्चर है। कंपनी के होमपेज और प्रोडक्ट पेज को पावर देने वाली वेबसाइट से शुरू होकर, मेरे पास हमारे एंटरप्राइज प्रोडक्ट के लिए एक लाइसेंस सर्वर, कोट्स और इनवॉइस संभालने के लिए एक केंद्रीय ERP सिस्टम, Psono SaaS खरीदने और अपनी इंस्टॉलेशन को मैनेज करने के लिए एक शॉप और एक OIDC के साथ एक ऑथेंटिकेशन सेवा है।
लेख के दौरान आप देखेंगे कि मुझे पुरानी और विश्वसनीय तकनीक पसंद है।
भाषाएँ
- पायथन: सभी बैकएंड कोड पायथन में लिखा गया है। पायथन के सबसे बड़े फायदे इसका समृद्ध इकोसिस्टम है। टाइप्स की कमी (कई लोग इसे एक कमी मानते हैं) आपके वेब सेवा को तेजी से लिखने में सक्षम बनाती है, जो एक स्टार्टअप के रूप में एक प्रमुख पहलू है जिस पर आपको एक प्रोग्रामिंग भाषा में ध्यान देना चाहिए।
- जावास्क्रिप्ट: ओह नहीं ... किसने सोचा होगा ... 2015 में भी कोई भी वेबसाइट जावास्क्रिप्ट के बिना बनाना असंभव था। ;)
वेबसेवाओं के लिए पायथन मेरी पसंदीदा भाषा है। (मैं यहां पायथन क्यों नहीं है और बेहतर है के बारे में अपने विचार छोड़ देता हूं। यह एक और ब्लॉग लेख भर देगा।) केवल एक कमी है जिसे आपको काउंटर करना होता है और वह है सभी निर्भरताओं के साथ कोड को विश्वासपूर्वक शिप करने की संभावना, जो विशेष रूप से महत्वपूर्ण होती है जब लोग आपके सॉफ़्टवेयर को स्थानीय स्तर पर इंस्टॉल करते हैं और समर्थन मांगते हैं अगर उन्हें समस्या होती है। (गति के मामले में, जो अन्य लोग यहां जोड़ सकते हैं, इससे कोई फर्क नहीं पड़ता। पायथन काफी तेज है।)
फ्रेमवर्क्स
- Django: "यह सोलो डेवलपर्स के लिए सुपर पावर की तरह है" (अगर मैं यहां एंथनी एन. सिमंस को उद्धृत कर सकता हूं)। इकोसिस्टम के साथ यह लगभग सभी समस्याओं का समाधान करता है जिससे आप सामना कर सकते हैं। ऑथेंटिकेशन, टेम्पलेट्स, ईमेल, डेटाबेस माइग्रेशन, TOTP, ... बस कुछ नाम रखने के लिए।
- Django Rest Framework: यह वर्तमान में सभी APIs को पावर कर रहा है और बहुत अच्छा काम कर रहा है। विभिन्न परतें (सिरियलाइज़ेशन, ऑथेंटिकेशन, परमिशन, व्यूज़) आपके कोड को बेहद साफ रखती हैं।
- React: मैंने हाल ही में नियमित वेबक्लाइंट को रिएक्ट में माइग्रेट किया। पुराना वेब क्लाइंट (कृपया याद रखें कि इसे 2015 में शुरू किया गया था) एंगुलरजेएस में लिखा गया था और इसे पुराने क्लाइंट के साथ पीछे की ओर संगत बनाए रखना एक मुश्किल काम था, उदाहरण के लिए उपयोगकर्ता की सभी पाथ्स नहीं बदलनी चाहिए, क्योंकि उन्होंने अपने दस्तावेज़ में लिंक को बुकमार्क कर रखा हो सकता है या तथाकथित लिंक साझाओं का उपयोग कर सकते हैं। इसके अलावा लोग अपने लोगो और अन्य ब्रांडिंग के साथ कस्टम ब्रांडिंग का उपयोग करते थे जहां सिस्टम पर पाथ्स नहीं बदलनी चाहिए।
- webpack: मैं इसे यहां उल्लेख करना चाहता था, क्योंकि यह वर्तमान में एकमात्र हिस्सा है जिससे मैं खुश नहीं हूं। यह धीमा, कठिन है, सीखना कठिन है ... एकमात्र फायदा यह है कि आप कभी फंसे नहीं होते। किसी भी समस्या का सामना करना हो, पहले से ही Stackoverflow पर सवाल पूछा गया है और आपको समाधान मिल जाता है।
- Gatsby: कंपनी और उत्पाद के लिए हमारे स्टैटिक वेबसाइट्स को पावर कर रहा है। पहले के समय में मैंने वर्डप्रेस का उपयोग किया, फिर भी अपडेट्स और वेबसाइट के समझौता किए जाने के निरंतर डर (और संभावित नकारात्मक प्रचार) ने मुझे गैत्सबी में स्विच किया। अब तक पीछे मुड़कर नहीं देखा।
- Vuepress: सबसे बेहतरीन डॉक्यूमेंटेशन मैनेजमेंट सिस्टम जो मैं पा सका। यह स्टैटिक वेबसाइट्स में संकलित होता है, आधुनिक दिखता है और वर्तमान में Psono के डॉक्यूमेंटेशन को पावर करता है।
- Material UI: फ्रंटेंड को पावर करने वाला मुख्य लाइब्रेरी है। यह बेहद फीचर-रिच है, रिएक्ट के साथ अच्छा तालमेल बिठाती है और पुरानी बूटस्ट्रैप पर आधारित थिम्स के विपरीत काफी आधुनिक दिखती है।
निश्चित रूप से और भी बहुत सारे हैं जिन्हें यहां उल्लेख किया जाना चाहिए, फिर भी ये मेरी राय में "सबसे महत्वपूर्ण" हैं।
डेटाबेस
यहां तक कि Django कई डेटाबेस का समर्थन करता है, मैं बहुत जल्दी इस सवाल का सामना कर रहा था कि क्या मैं सभी Django के डेटाबेस का समर्थन करना चाहता हूं या केवल एक विशेष डेटाबेस का समर्थन करना चाहता हूं। इस सवाल का जड़ था कि मैं डेटाबेस में नेस्टेड ट्री स्ट्रक्चर्स को स्टोर कर रहा था। इसलिए कई रूट्स और साझा शाखाओं के साथ पेड़। इनकी कुशलता से क्वेरी करना महत्वपूर्ण था, इसलिए सभी उपलब्ध विकल्पों की खोज के बाद मैंने Postgre के ltree एक्सटेंशन के साथ जाने का निर्णय लिया।
अगर आप कुछ भी डेवलप करना चाहते हैं और इसे अकेले चलाना चाहते हैं, तो इसे क्लाउड में भरोसेमंद, क्लाउड प्रदाता द्वारा प्रबंधित होना चाहिए। आप शायद भी विक्रेता लॉक-इन नहीं चाहते होंगे, इसलिए कुछ भी क्लाउड विशिष्ट नहीं, जो आपके विकल्पों को काफी हद तक सीमित करता है।
मेरा निर्णय:
- Postgres: आपके पास चुनने के लिए दो ओपन सोर्स डेटाबेस हैं। MariaDB या Postgres। मैं हमेशा Maria के साथ जाने की योजना बना रहा था (मुख्य रूप से Maria DB के गलेरा क्लस्टर के कारण, उनमें से एक प्रेरित "युवा डेवलपर को हाइपर ग्रोथ की योजना बनानी चाहिए" कहानियां ;D) लेकिन लाइटरी एक्सटेंशनों की कमी के कारण मेरे हाथ मजबूर थे। आजकल पोस्टग्रस शार्डिंग विकल्पों में सभी विकास के साथ मैंने अब तक इस फैसले पर कभी पछ्तावा नहीं किया।
- Redis: बड़ी इंस्टॉलेशन्स के लिए कैश के रूप में उपयोग करने की योजना बनाई गई है। यहाँ भी आप Redis या Memcache का चयन कर सकते हैं। दोनों उत्कृष्ट हैं, लेकिन मुख्य रूप से Redis प्रोटोकॉल के आजकल कैशिंग के लिए डिफेक्टो स्टैंडर्ड होने के कारण मैं Redis के साथ गया। Redis के साथ मैंने अब तक एकमात्र कमी यह अनुभव की है कि यह सिंगल थ्रेडेड होता है।
इंफ्रास्ट्रक्चर
Psono पर निर्भर इंफ्रास्ट्रक्चर का एक छोटा सा अवलोकन:
- Gitlab: Gitlab Psono की सभी ऑटोमेशन को पावर कर रहा है। उल्लेखनीय हर चीज़ Psono में स्वचालित है जो कि एक प्रमुख पहलू है कि मैं कैसे रिलीज़ और पूरे Psono इकोसिस्टम को बनाए रख सकता हूं। 2015 में हर ओपन सोर्स प्रोजेक्ट गिटहब पर चल रहा था, लेकिन Gitlab (और अब भी) सिर्फ इतना शक्तिशाली और फीचरवाइज बेहतर (गिटहब की खोज कार्यक्षमता को छोड़कर) था। Gitlab बिल्ड, रिलीज़, हर सॉफ़्टवेयर के भेद्यता स्कैन को पावर करता है जिसे हम उपयोग करते हैं।
- Cloudflare: शायद पिछले 10 वर्षों में मुझे प्रभावित करने वाली सबसे नवोन्मेषी कंपनी। यह कहना उचित है कि आजकल Cloudflare इंटरनेट को पावर कर रहा है। यह मुझे भरोसेमंद नामसर्वर्स, TLS, एक उपयुक्त CDN, और एडवांस्ड फीचर्स जैसे उनके एज वर्कर के साथ प्रदान करता है। DDoS सुरक्षा और WAF कार्यक्षमता एक निश्चित अतिरिक्त प्रदान करती हैं, जो एक पासवर्ड मैनेजर के रूप में महत्वपूर्ण है। मुझे उनके SSL को सेवा के रूप में इस्तेमाल करने की सुविधा पसंद है ताकि SaaS ग्राहक अपने स्वयं के डोमेन को कॉन्फ़िगर कर सकें, फिर भी Cloudflare के एंटरप्राइज स्तर की पेमेन्ट दीवार बहुत कठिन है। मैं अब भी आशा करता हूं कि वे इसे कहीं एक स्वतंत्र प्लगइन के रूप में जारी करेंगे जिसे कोई खरीद सकता है।
- namecheap: डोमेन और SSL प्रमाणपत्रों के लिए मेरा गो-टू समाधान।
- Google Cloud Run: सभी बैकएंड सर्वर Google Cloud Run पर चलते हैं, जो अत्यधिक लागत प्रभावी और भरोसेमंद होते हैं जब आप सेवाओं का बेड़ा लॉन्च करना चाहते हैं। एक बार जब आपका स्टैक चल गया तो यह एक बेहतरीन काम करता है। उनकी शीर्ष पायदान एपीआई/क्लाइ एकीकरण यहां एक पूर्ण प्लस है। इसमें कुछ कमियां हैं, जैसे कि Google से समर्थन की कमी या यह खतरा कि Google किसी बिंदु पर निर्णय ले सकता है कि क्लाउड सेवा प्रदाता के रूप में #3 होना उचित नहीं है और वे उत्पाद को रद्द कर सकते हैं।
- Artifactory: मेरी बिल्ड पाइपलाइन को npm आउटेज और मेरी बिल्ड आर्टिफैक्ट्स को स्टोर करता है (जो 2015 में गिटलैब में बंडल नहीं था)
- Docker Hub: सभी डॉकर कंटेनर स्टोर करता है और कुछ अतिरिक्त सुरक्षा स्कैन और मेरे कंटेनरों के वितरण करता है।
- Mailgun: सभी ईमेल्स हैंडल करता है। ज्यादातर ईमेल समाधान प्रदाताओं के विपरीत, Mailgun के पास उपयुक्त लॉगिंग और विश्लेषण कार्यक्षमता है। उनका समर्थन शीर्ष पायदान है। एकमात्र समस्या यह है कि उनके ईमेल कभी-कभी स्पैम इनबॉक्स में भेजे जाते हैं (यहां तक कि एसपीएफ, डीएमएआरसी और इसी तरह सभी जगह होने के बावजूद), फिर भी इसके अलावा वे एक बेहतरीन काम कर रहे हैं।
- Poeditor: सभी अनुवादों को संभालता है। अच्छी बात यह है कि योगदानकर्ता एक्सेस का अनुरोध कर सकते हैं, यदि आप बाहरी लोगों से अपने प्रोजेक्ट को अनुवाद करने में मदद करना चाहते हैं तो यह महत्वपूर्ण है। उनका समर्थन अद्भुत है और आपको बेहद तेज़ प्रतिक्रियाएं मिलती हैं।
- Docker: पूरे प्रोजेक्ट के लिए सबसे अच्छे फैसलों में से एक। खासकर जब से मैं पायथन का उपयोग कर रहा हूं और सभी पायथन / ओएस लाइब्रेरी निर्भरताओं के साथ काम करने वाले पायथन कोड को भेजना कठिन है। अगर चीजों को ग्राहक के बॉन प्रीमाइज़ पर चलना है और यह आवश्यक है कि वह सिस्टम को अपडेट और बनाए रख सके। Docker हमें ऐसा करने की अनुमति देता है और मुझे इंस्टॉल किए गए पैकेजों का पूर्ण नियंत्रण देता है जो कम से कम से 70% समर्थन मुद्दों को हल करता है (जबकि 20% नई समस्याओं को शुरू करता है क्योंकि लोग Docker के लिए उपयोग नहीं किए गए हैं ;D)
मॉनिटरिंग
इसलिए चीजें गलत हो सकती हैं और आपको यह जानना जरूरी है कि ऐसा कब होता है और समस्या में कुछ अंतर्दृष्टि प्राप्त करते हैं। यही वह जगह है जहां ये उपकरण उपयोगी होते हैं:
- Google Cloud logging: अगर आप Google पर हैं तो आपका प्राकृतिक समाधान
- Sentry: मेरी नंबर एक त्रुटि रिपोर्ट समाधान। एक बार जब आप इसे आजमाते हैं तो आप इसे कभी भी याद नहीं करना चाहेंगे। मुझे सभी त्रुटियों में आवश्यक अंतर्दृष्टि देता है।
- Uptimerobot: मेरे विभिन्न सेवाओं के हेल्थचेक को कॉल करता है और अगर कुछ भी डाउन होता है तो मुझे अलर्ट करता है। Psono के लिए सार्वजनिक स्थिति पृष्ठ वैसे यहां पाया जा सकता है https://stats.psono.com/, जो कि इस चीज़ के लिए मॉनिटर की गई सेवाओं का सिर्फ एक छोटा हिस्सा है, फिर भी उम्मीद है कि सिस्टम की विश्वसनीयता को थोड़ा प्रदर्शित कर सके।
डेवलपमेंट इंफ्रास्ट्रक्चर
मेरा स्थानीय डेवलपमेंट स्टैक कैसा दिखता है इसका एक छोटा अवलोकन:
- Windows with WSL: शायद मुझे इसके लिए काफी आलोचना मिल रही है, फिर भी हां मैं विंडोज पर चल रहा हूं। पिछले वर्षों में मेरे पास हमेशा कहीं एक लिनक्स वीएम होता था जिससे मैं डेवलपमेंट के लिए कनेक्ट होता था, फिर भी आजकल यह WSL द्वारा पावर होता है। मुझे दोनों दुनियाओं का सबसे अच्छा मिलता है।
- Pycharm / Webstorm: मैं Jetbrain IDEs का उपयोग कर रहा हूं। रिमोट डेवलपमेंट की कार्यक्षमता मेरे डेवलपमेंट वर्कफ़्लो के लिए महत्वपूर्ण है और यह "बैटरियों शामिल" दर्शन मुझसे अच्छी तरह से मेल खाती है। कभी-कभी मेरे पास लगभग 20 प्रोजेक्ट खुले होते हैं जिनके लिए पर्याप्त RAM वाली उपयुक्त हार्डवेयर की आवश्यकता होती है। वीएसकोड आजकल एक अच्छा विकल्प लगता है, फिर भी पिछले कुछ वर्षों में Jetbrains का उपयोग करने के बाद नई चीजें सीखना हमेशा कुछ मानसिक ताकत की आवश्यकता होती है जिसे मैं वर्तमान में इस पर निवेश करने के लिए नहीं तैयार हूं। मैं कहूंगा कि हर किसी को कुछ ऐसा उपयोग करना चाहिए जिसके लिए वह आसान समझें।
समर्थन
उन लोगों के समर्थन को संभालने के लिए निश्चित रूप से कुछ उपकरणों की आवश्यकता होती है जो उत्पाद का उपयोग कर रहे हैं:
- Freshdesk: एक सामान्य ईमेल टिकट सॉफ्टवेयर। यह मुझे विभिन्न ग्राहक अनुरोधों पर नज़र रखने में मदद करता है। पहले के समय में इसने एक अच्छे नि:शुल्क स्तरीय प्रदान किया, जो विशेष रूप से संस्थापक चरण में महत्वपूर्ण है।
- Discord: कुछ लोग चैट को प्राथमिकता दे सकते हैं या एक अधिक सीधा बातचीत / सहायता की आवश्यकता हो सकती है। यही जगह डिस्कॉर्ड उपयोगी होती है।
अन्य
कुछ अन्य उपकरण भी हैं जिन्हें मैं उल्लेख करना चाहता था, जो अन्य लोगों के लिए सहायक हो सकते हैं। खासकर बैंकों के लिए जो जर्मनी में अपना बिजनेस चलाना चाहते हैं:
- Odoo: सबसे अच्छा ERP सिस्टम। इसका ओपन सोर्स संस्करण मुफ़्त है और इसे पायथन और कुछ XML ज्ञान के साथ आसानी से विस्तारित किया जा सकता है। यह अनुकूलन और कस्टम एपीआई के साथ एकीकरण विकल्प शीर्ष श्रेणी के हैं।
- Holvi: हमारा मुख्य बैंक खाता। जर्मनी में, आपको एक बैंक की आवश्यकता होती है जो आपको एक फाउंडर अकाउंट सेट अप करने की अनुमति देता है, जर्मन में "ग्रुंडरकंटो", इसलिए एक बैंक खाता जो एक कंपनी से बंधा होता है जो अभी तक पूरी तरह से पंजीकृत नहीं है और जहां आप प्रारंभिक नकदी स्थानांतरित कर सकते हैं जो कि कंपनी को पंजीकृत करने के लिए आवश्यक है। एक छोटा सा चिकन एग समस्या। और बड़े बैंक जो इसकी अनुमति देते हैं वे आम तौर पर एक दशक और एक हाथ का खर्च होता है। पंजीकरण प्रक्रिया भी काफी सहज काम करती थी। एकमात्र कमी अंतर्राष्ट्रीय भुगतान के लिए समर्थन की कमी है, फिर यही जगह अगली सेवा उपयोगी होती है।
- Wise: हमारा दूसरा बैंक