यदि आप अपना डेटा किसी रिलेशनल डेटाबेस, NoSQL , ग्राफ़ डेटाबेस, या कुछ इसी तरह संग्रहीत करते हैं, तो वह डेटा संभवतः निजी है। और आप शायद इसे इंटरनेट पर उजागर नहीं करना चाहेंगे। तो आप इसे एक निजी सबनेट के अंदर रखकर इस समस्या का समाधान कर सकते हैं। हालाँकि, अब आपको अन्य मशीनों को डेटाबेस से कनेक्शन खोलने की अनुमति देने के लिए नेटवर्क एक्सेस कंट्रोल सूचियों, सुरक्षा समूहों या रूट तालिकाओं को प्रबंधित करना होगा। यह बहुत अधिक उपरि है।
ओकैम के साथ, नेटवर्क प्रशासकों को नेटवर्क एक्सेस कंट्रोल सूचियों, सुरक्षा समूहों या रूट तालिकाओं को अपडेट करने की आवश्यकता नहीं है। ओकाम विशेषता-आधारित एक्सेस कंट्रोल के माध्यम से आपकी सेवाओं पर सूक्ष्म नियंत्रण लागू करता है। और आप भी कर सकते हैं
इस ब्लॉग पोस्ट में, हम ओकम कमांड लाइन इंटरफ़ेस, ockam
का पता लगाएंगे और देखेंगे कि हम एक पारंपरिक वेब ऐप को पोस्टग्रेएसक्यूएल डेटाबेस से न्यूनतम / बिना किसी कोड परिवर्तन के कैसे कनेक्ट कर सकते हैं। हम एक बहुत ही बुनियादी पायथन फ्लास्क ऐप बनाएंगे जो बस PostgreSQL डेटाबेस में एक काउंटर को बढ़ाएगा। फिर हम ओकम सुरक्षित चैनल के माध्यम से एप्लिकेशन और डेटाबेस के बीच कनेक्शन को आगे बढ़ाएंगे।
आरंभ करने से पहले, आइए उन चरणों पर एक नज़र डालें जिन्हें हम इस ब्लॉग पोस्ट में निष्पादित करेंगे।
ओकैम एप्लिकेशन इंस्टॉल करने और ओकैम प्रोजेक्ट बनाने के लिए ockam enroll
उपयोग करें। यह पहली शर्त है.
PostgreSQL डेटाबेस सेट करें। यह दूसरी शर्त है. फिर डेटाबेस सर्वर पर एक ओकम "आउटलेट" कॉन्फ़िगर करें। हम नीचे "डेटाबेस कनेक्ट करें" अनुभाग में इसके बारे में अधिक जानेंगे।
वेब ऐप (पायथन फ्लास्क) सेट करें। यह तीसरी शर्त है. फिर पायथन ऐप से एक ओकम "इनलेट" कॉन्फ़िगर करें। हम नीचे "वेब ऐप कनेक्ट करें" अनुभाग में इसके बारे में अधिक जानेंगे।
आगे बढ़ने के लिए, कृपया नीचे सूचीबद्ध सभी आवश्यक शर्तें स्थापित करना सुनिश्चित करें।
इसे brew
के माध्यम से इंस्टॉल करने के लिए brew install build-trust/ockam/ockam
चलाएं। फिर आप अपने टर्मिनल में ockam
CLI ऐप चला सकेंगे।
इसे brew
के माध्यम से स्थापित करने के लिए brew install python
चलाएँ। फिर आप अपने टर्मिनल में python3
कमांड चला सकेंगे।
निर्भरताएँ ( Flask
, psycopg2
) कैसे प्राप्त करें, इस पर निर्देश दिए गए हैं
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
पर्यावरण वेरिएबल को नोट कर लें। उत्पादन में, हम आमतौर पर पोर्ट को एक पर्यावरण चर से लोड करते हैं और यह स्रोत में हार्डकोड नहीं होता है।
वेब ऐप चलाने के लिए नीचे दिए गए निर्देशों का पालन करें।
सबसे पहले, आवश्यक पायथन निर्भरताएँ जोड़ना सुनिश्चित करें:
# Install flask. pip3 install flask # Install psycopg2. pip3 install psycopg2-binary
फिर Flask
ऐप ( main.py
) को इसके साथ शुरू करें:
export APP_PG_PORT=5432 flask --app main run
http://localhost:5000/
।अब जब हमने अपना वेब ऐप और डेटाबेस सेट कर लिया है तो आइए आगे यह करें:
मिश्रण में ओकम मिलाएं।
हमारे 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 से कनेक्ट करें।
हमने $APP_PG_PORT
$OCKAM_PORT
( 5433
) के समान मान में बदल दिया है। हमारा वेब ऐप ( main.py
स्क्रिप्ट) सीधे असुरक्षित डेटाबेस सर्वर (पोर्ट 5432
पर) से कनेक्ट नहीं होता है। यह अब सुरक्षित चैनल 🔐 से होकर गुजरता है।
आपके एप्लिकेशन में शून्य कोड परिवर्तन के साथ, काउंटर पहले की तरह बढ़ता रहेगा। लेकिन वेब ऐप अब ओकैम सिक्योर चैनल 🎉 के माध्यम से डेटाबेस के साथ संचार करता है।
आप इस उदाहरण का विस्तार भी कर सकते हैं और PostgreSQL सेवा को डॉकर कंटेनर या पूरी तरह से अलग मशीन में स्थानांतरित कर सकते हैं। एक बार नोड्स पंजीकृत हो जाने के बाद ( ockam enroll
चलने के बाद), यह डेमो काम करना जारी रखेगा, बिना किसी एप्लिकेशन कोड में बदलाव के और पोस्टग्रेएसक्यूएल पोर्ट को सीधे इंटरनेट पर उजागर करने की कोई आवश्यकता नहीं है।
साथ ही, आप वेब ऐप और डेटाबेस को विभिन्न मशीनों पर चला सकते हैं। यह करने के लिए:
डेटाबेस को होस्ट करने वाली मशीन के आईपी पते पर main.py
स्क्रिप्ट में localhost
बदलें।
दोनों मशीनों (वेब ऐप मशीन और डेटाबेस सर्वर मशीन) पर ockam enroll
चलाएँ।
अब जब आपने यह उदाहरण पूरा कर लिया है, तो यहां कुछ आदेश दिए गए हैं जिन्हें आप आज़माकर देख सकते हैं कि वे क्या करते हैं। आप हमेशा इसका विवरण देख सकते हैं कि वे क्या करते हैं
ockam node list
आज़माएं। क्या आप वे नोड्स देखते हैं जो आपने इस अभ्यास में बनाए हैं?ockam node --help
आज़माएं। आपके लिए आदेशों से परिचित होने के लिए ये छोटे उदाहरण हैं।ockam node show web
आज़माएं। क्या आप इस अभ्यास में बनाया गया tcp-inlet
देखते हैं?ockam node show db
आज़माएं। क्या आप इस अभ्यास में बनाया गया tcp-outlet
देखते हैं?ockam identity list
आज़माएं। क्या आप इस अभ्यास में बनाई गई पहचान देखते हैं?