paint-brush
एक पारंपरिक वेब ऐप को पोस्टग्रेज डेटाबेस से कनेक्ट करनाद्वारा@ockam
320 रीडिंग
320 रीडिंग

एक पारंपरिक वेब ऐप को पोस्टग्रेज डेटाबेस से कनेक्ट करना

द्वारा Ockam8m2023/08/31
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

जानें कि एक पारंपरिक वेब ऐप को पोस्टग्रेज़ डेटाबेस से कैसे जोड़ा जाए, जो डिज़ाइन द्वारा सुरक्षित है और इसके लिए न्यूनतम/कोई कोड परिवर्तन और कोई फ़ायरवॉल प्रबंधन की आवश्यकता नहीं है
featured image - एक पारंपरिक वेब ऐप को पोस्टग्रेज डेटाबेस से कनेक्ट करना
Ockam HackerNoon profile picture
0-item


ओकाम एंड-टू-एंड एन्क्रिप्शन, पारस्परिक प्रमाणीकरण, कुंजी प्रबंधन, क्रेडेंशियल प्रबंधन और प्राधिकरण नीति प्रवर्तन को बड़े पैमाने पर व्यवस्थित करने के लिए रस्ट लाइब्रेरीज़, कमांड लाइन टूल्स और प्रबंधित क्लाउड सेवाओं का एक सूट है। ओकाम का अंत-से-अंत सुरक्षित चैनल एप्लिकेशन स्तर पर सभी डेटा-इन-मोशन की प्रामाणिकता, अखंडता और गोपनीयता की गारंटी देता है।


यदि आप अपना डेटा किसी रिलेशनल डेटाबेस, NoSQL , ग्राफ़ डेटाबेस, या कुछ इसी तरह संग्रहीत करते हैं, तो वह डेटा संभवतः निजी है। और आप शायद इसे इंटरनेट पर उजागर नहीं करना चाहेंगे। तो आप इसे एक निजी सबनेट के अंदर रखकर इस समस्या का समाधान कर सकते हैं। हालाँकि, अब आपको अन्य मशीनों को डेटाबेस से कनेक्शन खोलने की अनुमति देने के लिए नेटवर्क एक्सेस कंट्रोल सूचियों, सुरक्षा समूहों या रूट तालिकाओं को प्रबंधित करना होगा। यह बहुत अधिक उपरि है।


ओकैम के साथ, नेटवर्क प्रशासकों को नेटवर्क एक्सेस कंट्रोल सूचियों, सुरक्षा समूहों या रूट तालिकाओं को अपडेट करने की आवश्यकता नहीं है। ओकाम विशेषता-आधारित एक्सेस कंट्रोल के माध्यम से आपकी सेवाओं पर सूक्ष्म नियंत्रण लागू करता है। और आप भी कर सकते हैं एक बाहरी पहचान प्रदाता के साथ एकीकृत करें आपकी सेवाओं तक कौन पहुंच सकता है, इसे प्रतिबंधित करने के लिए ओक्टा की तरह।


इस ब्लॉग पोस्ट में, हम ओकम कमांड लाइन इंटरफ़ेस, ockam का पता लगाएंगे और देखेंगे कि हम एक पारंपरिक वेब ऐप को पोस्टग्रेएसक्यूएल डेटाबेस से न्यूनतम / बिना किसी कोड परिवर्तन के कैसे कनेक्ट कर सकते हैं। हम एक बहुत ही बुनियादी पायथन फ्लास्क ऐप बनाएंगे जो बस PostgreSQL डेटाबेस में एक काउंटर को बढ़ाएगा। फिर हम ओकम सुरक्षित चैनल के माध्यम से एप्लिकेशन और डेटाबेस के बीच कनेक्शन को आगे बढ़ाएंगे।


हमारी यात्रा

आरंभ करने से पहले, आइए उन चरणों पर एक नज़र डालें जिन्हें हम इस ब्लॉग पोस्ट में निष्पादित करेंगे।

हमारी यात्रा


  1. ओकैम एप्लिकेशन इंस्टॉल करने और ओकैम प्रोजेक्ट बनाने के लिए ockam enroll उपयोग करें। यह पहली शर्त है.


  2. PostgreSQL डेटाबेस सेट करें। यह दूसरी शर्त है. फिर डेटाबेस सर्वर पर एक ओकम "आउटलेट" कॉन्फ़िगर करें। हम नीचे "डेटाबेस कनेक्ट करें" अनुभाग में इसके बारे में अधिक जानेंगे।


  3. वेब ऐप (पायथन फ्लास्क) सेट करें। यह तीसरी शर्त है. फिर पायथन ऐप से एक ओकम "इनलेट" कॉन्फ़िगर करें। हम नीचे "वेब ऐप कनेक्ट करें" अनुभाग में इसके बारे में अधिक जानेंगे।


आवश्यक शर्तें

आगे बढ़ने के लिए, कृपया नीचे सूचीबद्ध सभी आवश्यक शर्तें स्थापित करना सुनिश्चित करें।


  1. ओकाम कमांड
    • इसे brew के माध्यम से इंस्टॉल करने के लिए brew install build-trust/ockam/ockam चलाएं। फिर आप अपने टर्मिनल में ockam CLI ऐप चला सकेंगे।


  2. पायथन, और लाइब्रेरीज़: फ़्लैश, psycopg2
    • इसे brew के माध्यम से स्थापित करने के लिए brew install python चलाएँ। फिर आप अपने टर्मिनल में python3 कमांड चला सकेंगे।

    • निर्भरताएँ ( Flask , psycopg2 ) कैसे प्राप्त करें, इस पर निर्देश दिए गए हैं पायथन कोड नीचे अनुभाग.


  3. पोस्टग्रेस्क्ल
    • brew install postgresql@15 brew के माध्यम से चलाएं। फिर आप अपनी मशीन पर 5432 के डिफ़ॉल्ट पोर्ट पर PostgreSQL डेटाबेस सर्वर चलाने में सक्षम होंगे। कृपया यह सुनिश्चित करें कि आप brew के निर्देशों का पालन करें और PostgreSQL को अपने पथ में जोड़ें।

    • PostgreSQL सर्वर शुरू करने के लिए brew services start postgresql@15 चलाएँ।

    • फिर आप डेटाबेस उपयोगकर्ता postgres के लिए एक नया पासवर्ड सेट कर सकते हैं। इस पासवर्ड को password पर सेट करें. नीचे दिया गया पायथन कोड db ड्राइवर के लिए कनेक्शन स्ट्रिंग के रूप में postgres:password@localhost का उपयोग करता है।


      नीचे दिए गए निर्देश आपको Linux और macOS पर ऐसा करने की अनुमति देते हैं:


      • टर्मिनल में postgres उपयोगकर्ता के रूप में स्थानीय रूप से डेटाबेस में लॉगिन करने के लिए sudo -u postgres psql --username postgres --password --dbname template1 चलाएं।

      • फिर इसे REPL में टाइप करें: ALTER USER postgres PASSWORD 'password'; , और अंत में exit टाइप करें।



वेब ऐप - पायथन कोड

पायथन फ्लास्क वेब ऐप PostgreSQL डेटाबेस में एक काउंटर बढ़ाता है। संपूर्ण ऐप एक फ़ाइल में फ़िट हो जाता है.


अपनी मशीन पर एक main.py फ़ाइल बनाएं और नीचे दिए गए कोड को कॉपी करके उसमें पेस्ट करें।


 import os import psycopg2 from flask import Flask CREATE_TABLE = ( "CREATE TABLE IF NOT EXISTS events (id SERIAL PRIMARY KEY, name TEXT);" ) INSERT_RETURN_ID = "INSERT INTO events (name) VALUES (%s) RETURNING id;" app = Flask(__name__) pg_port = os.environ['APP_PG_PORT'] # 5432 is the default port url = "postgres://postgres:password@localhost:%s/"%pg_port connection = psycopg2.connect(url) @app.route("/") def hello_world(): with connection: with connection.cursor() as cursor: cursor.execute(CREATE_TABLE) cursor.execute(INSERT_RETURN_ID, ("",)) id = cursor.fetchone()[0] return "I've been visited {} times".format(id), 201



इस स्क्रिप्ट में, हम डेटाबेस से कनेक्शन स्थापित करने के लिए "postgres://postgres:password@localhost:%s/"%pg_port उपयोग करते हैं।


  • pg_port इसका मान पर्यावरण चर APP_PG_PORT से मिलता है।

  • पायथन स्क्रिप्ट चलाने से पहले हम पर्यावरण चर APP_PG_PORT को 5432 पर सेट करेंगे (निर्देश नीचे दिए गए हैं)।

  • तो डेटाबेस कनेक्शन स्ट्रिंग बस localhost:5432 को इंगित करती है।


कृपया pg_port Python वेरिएबल और APP_PG_PORT पर्यावरण वेरिएबल को नोट कर लें। उत्पादन में, हम आमतौर पर पोर्ट को एक पर्यावरण चर से लोड करते हैं और यह स्रोत में हार्डकोड नहीं होता है।


वेब ऐप चलाएँ

वेब ऐप चलाने के लिए नीचे दिए गए निर्देशों का पालन करें।


  1. सबसे पहले, आवश्यक पायथन निर्भरताएँ जोड़ना सुनिश्चित करें:

     # Install flask. pip3 install flask # Install psycopg2. pip3 install psycopg2-binary


  1. फिर Flask ऐप ( main.py ) को इसके साथ शुरू करें:

     export APP_PG_PORT=5432 flask --app main run


  1. अंत में, वेब ब्राउज़र में यह URL खोलें: http://localhost:5000/


ओकाम स्थापित करें

अब जब हमने अपना वेब ऐप और डेटाबेस सेट कर लिया है तो आइए आगे यह करें:


  1. मिश्रण में ओकम मिलाएं।

  2. हमारे APP_PG_PORT पर्यावरण चर को अपडेट करें ताकि यह एक नए पोर्ट से कनेक्ट हो ( 5432 नहीं, जहां PostgreSQL सर्वर चलता है)।


सबसे पहले, ockam enroll चलाएं। सुनिश्चित करें कि आपने ऊपर आवश्यक शर्तें अनुभाग में वर्णित अनुसार ओकैम सीएलआई पहले ही स्थापित कर लिया है।


टर्मिनल विंडो में, इस कमांड को चलाएँ और नामांकन प्रक्रिया (ओकम ऑर्केस्ट्रेटर में) को पूरा करने के लिए संकेतों का पालन करें।

 ockam enroll


ockam enroll कमांड यही करता है:

  • यह जाँचता है कि ओकाम ऑर्केस्ट्रेटर के साथ सफल नामांकन के बाद सब कुछ सही ढंग से स्थापित किया गया है।
  • यह ओकाम ऑर्केस्ट्रेटर में आपके लिए एक स्पेस और प्रोजेक्ट बनाता है और आपके default प्रोजेक्ट में /project/default पर एक एंड-टू-एंड एन्क्रिप्टेड रिले का प्रावधान करता है।


डेटाबेस कनेक्ट करें

इसके बाद, आइए एक tcp-outlet स्थापित करें जो हमें पोर्ट 5432 पर पोस्टग्रेएसक्यूएल सर्वर पर कच्चा टीसीपी ट्रैफिक भेजने की अनुमति देता है। फिर हमारे डिफ़ॉल्ट ऑर्केस्ट्रेटर प्रोजेक्ट में एक रिले बनाएं। ऐसा करने के लिए, इन आदेशों को अपने टर्मिनल में चलाएँ।

 export PG_PORT=5432 ockam tcp-outlet create --to $PG_PORT ockam relay create


टिप्पणियाँ:

  • हम यहां PG_PORT पर्यावरण चर का उपयोग करते हैं, न कि APP_PG_PORT (जो हमारे वेब ऐप में उपयोग किया जाता है) का उपयोग करते हैं। यह 5432 के डिफ़ॉल्ट PostgreSQL पोर्ट की ओर इशारा करता है। नीचे दिए गए अनुभाग में हम APP_PG_PORT को एक भिन्न मान में बदल देंगे।
  • हम अगले अनुभाग में संबंधित tcp-inlet बनाएंगे।

रिले आपको दूरस्थ निजी नेटवर्क में संचालित सेवाओं के साथ एंड-टू-एंड प्रोटोकॉल स्थापित करने की अनुमति देता है। वे दूरस्थ सेवा (इंटरनेट जैसे शत्रुतापूर्ण नेटवर्क) पर बंदरगाहों को उजागर करने की आवश्यकता को समाप्त करते हैं।


वेब ऐप कनेक्ट करें

अंत में, आइए एक स्थानीय tcp-inlet सेटअप करें ताकि हम अग्रेषित होने से पहले पोर्ट 5433 पर कच्चा टीसीपी ट्रैफ़िक प्राप्त कर सकें।

 export OCKAM_PORT=5433 ockam tcp-inlet create --from $OCKAM_PORT


टिप्पणियाँ:

  • नया पर्यावरण चर $OCKAM_PORT एक नए पोर्ट 5433 की ओर इशारा करता है।
  • यह वह पोर्ट है जिस पर tcp-inlet सुनेगा। और यह डिफ़ॉल्ट PostgreSQL पोर्ट से अलग है।

टीसीपी इनलेट यह परिभाषित करने का एक तरीका है कि नोड अपने कनेक्शन को कहां सुनता है। और फिर उसे उस ट्रैफ़िक को कहां अग्रेषित करना चाहिए। एक इनलेट और आउटलेट एक पोर्टल बनाने के लिए मिलकर काम करते हैं।


इसके बाद, नीचे दिए गए आदेशों के साथ अपना वेब ऐप फिर से शुरू करें।


 export APP_PG_PORT=$OCKAM_PORT flask --app main run


अंत में, अपने वेब ब्राउज़र http://localhost:5000/ से फिर से इस URL से कनेक्ट करें।


  1. हमने $APP_PG_PORT $OCKAM_PORT ( 5433 ) के समान मान में बदल दिया है। हमारा वेब ऐप ( main.py स्क्रिप्ट) सीधे असुरक्षित डेटाबेस सर्वर (पोर्ट 5432 पर) से कनेक्ट नहीं होता है। यह अब सुरक्षित चैनल 🔐 से होकर गुजरता है।

  2. आपके एप्लिकेशन में शून्य कोड परिवर्तन के साथ, काउंटर पहले की तरह बढ़ता रहेगा। लेकिन वेब ऐप अब ओकैम सिक्योर चैनल 🎉 के माध्यम से डेटाबेस के साथ संचार करता है।


एकाधिक मशीनें

आप इस उदाहरण का विस्तार भी कर सकते हैं और PostgreSQL सेवा को डॉकर कंटेनर या पूरी तरह से अलग मशीन में स्थानांतरित कर सकते हैं। एक बार नोड्स पंजीकृत हो जाने के बाद ( ockam enroll चलने के बाद), यह डेमो काम करना जारी रखेगा, बिना किसी एप्लिकेशन कोड में बदलाव के और पोस्टग्रेएसक्यूएल पोर्ट को सीधे इंटरनेट पर उजागर करने की कोई आवश्यकता नहीं है।


साथ ही, आप वेब ऐप और डेटाबेस को विभिन्न मशीनों पर चला सकते हैं। यह करने के लिए:


  1. डेटाबेस को होस्ट करने वाली मशीन के आईपी पते पर main.py स्क्रिप्ट में localhost बदलें।

  2. दोनों मशीनों (वेब ऐप मशीन और डेटाबेस सर्वर मशीन) पर ockam enroll चलाएँ।


अन्य आदेशों का अन्वेषण करें

अब जब आपने यह उदाहरण पूरा कर लिया है, तो यहां कुछ आदेश दिए गए हैं जिन्हें आप आज़माकर देख सकते हैं कि वे क्या करते हैं। आप हमेशा इसका विवरण देख सकते हैं कि वे क्या करते हैं नियमावली . जब आप इनमें से प्रत्येक को आज़माएँ, तो कृपया उन चीज़ों पर नज़र रखें जो आपने इस अभ्यास में बनाई होंगी।


  • ockam node list आज़माएं। क्या आप वे नोड्स देखते हैं जो आपने इस अभ्यास में बनाए हैं?
  • ockam node --help आज़माएं। आपके लिए आदेशों से परिचित होने के लिए ये छोटे उदाहरण हैं।
  • ockam node show web आज़माएं। क्या आप इस अभ्यास में बनाया गया tcp-inlet देखते हैं?
  • ockam node show db आज़माएं। क्या आप इस अभ्यास में बनाया गया tcp-outlet देखते हैं?
  • ockam identity list आज़माएं। क्या आप इस अभ्यास में बनाई गई पहचान देखते हैं?