Skip to content

AWS Lightsail पर Potato तैनात करना

potato deploy से Potato एनोटेशन अध्ययन को $12 प्रति माह में AWS Lightsail पर चलाएँ, क्रेडेंशियल सेट करने से लेकर अंत में एनोटेशन निकालने तक।

potato deploy up --provider aws एक एनोटेशन अध्ययन को AWS Lightsail की एक वर्चुअल मशीन पर $12 प्रति माह की तय कीमत पर चलाता है, और आपके एनोटेटरों को भेजने के लिए एक HTTPS पता देता है। जब तक आपके खाते में Lightsail बंद न हो, AWS पर यही टारगेट इस्तेमाल करें। कीमत में IPv4 पता और 60 GB की डिस्क शामिल है जो रीस्टार्ट के बाद बची रहती है, और Potato को केवल lightsail:* और sts:GetCallerIdentity अनुमतियाँ चाहिए, इसलिए यह सीमित IAM रोल के तहत भी काम करता है। इस पृष्ठ के लिए Potato 2.10 या उसके बाद का संस्करण और ऐसा कॉन्फ़िग चाहिए जिसे आप potato start से चला चुके हों।

AWS क्रेडेंशियल सेट करना

Potato AWS क्रेडेंशियल उसी तरह पढ़ता है जैसे aws कमांड-लाइन टूल पढ़ता है: पहले AWS_ACCESS_KEY_ID और AWS_SECRET_ACCESS_KEY से, फिर AWS_PROFILE से, फिर ~/.aws/credentials और ~/.aws/config से। AWS extra इंस्टॉल करें, AWS CLI से साइन इन करें, और जाँचें कि Potato वही खाता देख रहा है जिसकी आप उम्मीद करते हैं:

bash
pip install 'potato-annotation[deploy-aws]'
aws configure                     # or: aws sso login --profile lab
potato deploy providers --verify

providers --verify हर प्रदाता से पूछता है कि आपके क्रेडेंशियल किसके हैं और जवाब प्रिंट करता है। अगर आपका संस्थान सिंगल साइन-ऑन इस्तेमाल करता है, तो हर तैनाती में --aws-profile lab के साथ प्रोफ़ाइल का नाम दें, और Potato उसे दर्ज कर लेता है ताकि बाद की कमांड उसी खाते का इस्तेमाल करें। Potato AWS क्रेडेंशियल कभी डिस्क पर नहीं लिखता।

अगर आपका IAM उपयोगकर्ता या रोल सीमित है, तो अपने एडमिनिस्ट्रेटर से lightsail:* और sts:GetCallerIdentity माँगें। बाकी दो AWS टारगेट को इनसे ज़्यादा अनुमतियाँ चाहिए। EC2 टारगेट (--provider aws-ec2, लगभग $18 प्रति माह) उन खातों के लिए है जिनमें Lightsail बंद है, और ECS Express टारगेट (--provider aws-ecs) एक ऐसा कंटेनर चलाता है जिसकी डिस्क रीस्टार्ट के बाद नहीं बचती।

तय करना कि कौन साइन इन कर सकता है

potato deploy आपकी साइन-इन सेटिंग्स नहीं बदलता, और Lightsail का पता सार्वजनिक होता है। अगर कॉन्फ़िग किसी को भी रजिस्टर करने देता है, तो नीचे का ड्राई रन चेतावनी D003 दिखाता है, "Anyone who finds the URL can register and annotate." (URL ढूँढने वाला कोई भी व्यक्ति रजिस्टर करके एनोटेट कर सकता है।) क्राउडसोर्स किए गए अध्ययन में खुला पंजीकरण आम तौर पर जान-बूझकर रखा जाता है, क्योंकि प्लेटफ़ॉर्म वर्करों को लिंक पर भेजता है। नामित एनोटेटरों के लिए, तैनात करने से पहले उन्हें allow_all_users: false के साथ user_config.users में सूचीबद्ध करें (पासवर्ड प्रबंधन) या उन्हें Google, GitHub या अपने संस्थान से साइन इन करवाएँ (SSO और OAuth प्रमाणीकरण)।

योजना जाँचना

ड्राई रन के लिए AWS खाते की ज़रूरत नहीं है और यह कुछ नहीं बनाता। यह प्रीफ़्लाइट रिपोर्ट, तैनाती का हर चरण और अनुमानित लागत प्रिंट करता है:

bash
potato deploy up myproject/config.yaml --provider aws --dry-run

डिफ़ॉल्ट तैनाती में योजना us-east-1 में टास्क के नाम पर एक इंस्टेंस बनाती है, जो 2 GB वाले small_3_0 बंडल और Ubuntu 24.04 का इस्तेमाल करता है। यह एक स्टैटिक IP जोड़ती है, ताकि रोकने और फिर शुरू करने के बाद भी पता और उसका प्रमाणपत्र बचे रहें, और केवल पोर्ट 22, 80 और 443 खोलती है। Potato, Caddy वेब सर्वर के पीछे पोर्ट 8000 पर सुनता है, और तैनाती पोर्ट 8000 को कभी नहीं खोलती। Potato इस तैनाती के लिए एक SSH deploy key बनाता है और आपकी अपनी SSH keys का इस्तेमाल नहीं करता।

तीन फ़्लैग डिफ़ॉल्ट बदलते हैं। --region कोई भी Lightsail क्षेत्र लेता है। Potato आइटम सेट को मेमोरी में रखता है, इसलिए 2 GB के लिए बहुत बड़े कॉर्पस को --size medium_3_0 चाहिए, जो $24 प्रति माह में 4 GB देता है। --volume-gb $0.10 प्रति GB प्रति माह पर एक अलग Lightsail डिस्क जोड़ता है और टास्क का डेटा उसी पर रखता है।

तैनात करना

वही कमांड --dry-run के बिना चलाएँ। Potato योजना फिर से दिखाता है और आपकी पुष्टि का इंतज़ार करता है:

bash
potato deploy up myproject/config.yaml --provider aws

इंस्टेंस के बूट होने और Docker इंस्टॉल करने में तैनाती को कई मिनट लगते हैं। अंत में यह URL प्रिंट करती है, यानी स्टैटिक IP पर एक https:// पता, और एडमिन कुंजी फ़ाइल का पाथ, जो आपके कॉन्फ़िग के बगल में .potato/secrets.json है। एडमिन कुंजी /admin पर एडमिन डैशबोर्ड खोलती है। कॉन्फ़िग बदलने के बाद up दोबारा चलाने से नया संस्करण अपलोड होता है और उसी इंस्टेंस पर टास्क रीस्टार्ट होता है।

डोमेन नाम के बिना Let's Encrypt प्रमाणपत्र IP पते के लिए जारी करता है। यह लगभग छह दिन चलता है और अपने आप नवीनीकृत होता है। potato deploy status myproject/config.yaml असफल नवीनीकरण की सूचना देता है, इसलिए अगर अध्ययन बिना निगरानी के चलता है तो इसे हर कुछ दिनों में जाँचें। अपना डोमेन इस्तेमाल करने के लिए स्टैटिक IP की ओर एक DNS A रिकॉर्ड बनाएँ और --domain annotate.example.edu के साथ फिर से तैनात करें।

अध्ययन समाप्त करना

एनोटेशन इंस्टेंस की डिस्क पर हैं, जो रीस्टार्ट और रीबूट के बाद बची रहती है, लेकिन destroy के बाद नहीं। पहले उन्हें अपनी मशीन पर निकालें, जाँचें, और फिर इंस्टेंस हटाएँ:

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull तैनाती का इकट्ठा किया हुआ सब कुछ एक नई potato-pull-<name>-<timestamp> डायरेक्टरी में लिखता है और डेटाबेस को SQLite के backup कमांड से कॉपी करता है। destroy ऐसी तैनाती पर नहीं चलता जिसका कभी pull नहीं हुआ। यह स्टैटिक IP छोड़ देता है, क्योंकि Lightsail किसी इंस्टेंस से न जुड़े स्टैटिक IP का बिल लेता है। --volume-gb के साथ, destroy --keep-data अलग डिस्क को बचाए रखता है।

समस्या निवारण

"AWS rejected the credentials" का मतलब है कि SSO सत्र की समय-सीमा ख़त्म हो गई है या AWS_PROFILE किसी ऐसी प्रोफ़ाइल का नाम देता है जो मौजूद नहीं है। aws sso login चलाएँ और फिर से तैनात करें।

"Lightsail does not sell bundle …" तब दिखता है जब AWS कीमत बदलने के बाद बंडलों के नाम बदल देता है। त्रुटि में अभी बिकने वाले बंडलों की सूची होती है, और --size उनमें से कोई एक लेता है।

पहले कुछ मिनटों तक HTTPS विफल रहता है क्योंकि प्रमाणपत्र का अनुरोध इंस्टेंस तक पहुँच बनने के बाद होता है। potato deploy status प्रमाणपत्र की त्रुटि को बंद पड़े सर्वर से अलग बताता है।

आगे पढ़ें