ऐप्लिकेशन को मॉड करने से जुड़ी वर्कशॉप

1. परिचय

पिछले अपडेट की तारीख: 01-11-2024

हम किसी पुराने PHP ऐप्लिकेशन को Google Cloud पर कैसे मॉडर्नाइज़ करें?

(📽️ इस कोडलैब के बारे में सात मिनट का शुरुआती वीडियो देखें)

ऐसा अक्सर होता है कि लेगसी ऐप्लिकेशन, कंपनी की इमारत में चल रहे हों और उन्हें अप-टू-डेट करने की ज़रूरत हो. इसका मतलब है कि उन्हें बड़े पैमाने पर इस्तेमाल किया जा सकता है, वे सुरक्षित हैं, और उन्हें अलग-अलग एनवायरमेंट में डिप्लॉय किया जा सकता है.

इस वर्कशॉप में, आपको यह जानकारी मिलेगी:

  1. PHP ऐप्लिकेशन को कंटेनर में बदलें.
  2. मैनेज की गई डेटाबेस सेवा ( Cloud SQL) पर माइग्रेट करें.
  3. Cloud Run पर डिप्लॉय करें. यह GKE/Kubernetes का ज़ीरो-ऑप्स विकल्प है.
  4. पहचान और ऐक्सेस मैनेजमेंट (आईएएम) और Secret Manager की मदद से, ऐप्लिकेशन को सुरक्षित करें.
  5. Cloud Build की मदद से, सीआई/सीडी पाइपलाइन तय करें. Cloud Build को, GitHub या GitLab जैसी लोकप्रिय Git सेवा देने वाली कंपनियों पर होस्ट की गई आपकी Git रिपॉज़िटरी से कनेक्ट किया जा सकता है. साथ ही, इसे मुख्य ब्रांच में पुश करने पर ट्रिगर किया जा सकता है.
  6. ऐप्लिकेशन की इमेज को Cloud Storage पर होस्ट करें. इसे माउंट करने की प्रोसेस के ज़रिए पूरा किया जाता है. इसके लिए, ऐप्लिकेशन में कोड की ज़रूरत नहींं है.
  7. Cloud Functions (serverless) के ज़रिए, Gemini की मदद से Gen AI की सुविधा लॉन्च की गई.
  8. एसएलओ के बारे में जानें और नए तरीके से बनाए गए ऐप्लिकेशन को ऑपरेट करें.

यह तरीका अपनाकर, अपने PHP ऐप्लिकेशन को धीरे-धीरे आधुनिक बनाया जा सकता है. इससे ऐप्लिकेशन की स्केलेबिलिटी, सुरक्षा, और डिप्लॉयमेंट फ़्लेक्सिबिलिटी को बेहतर बनाया जा सकता है. इसके अलावा, Google Cloud पर माइग्रेट करने से आपको इसके बेहतर इंफ़्रास्ट्रक्चर और सेवाओं का फ़ायदा मिलता है. इससे यह पक्का किया जा सकता है कि आपका ऐप्लिकेशन, क्लाउड-नेटिव एनवायरमेंट में आसानी से काम करे.

हमें लगता है कि इन आसान चरणों को पूरा करने के बाद, आपको जो जानकारी मिलेगी उसे अलग-अलग भाषाओं/स्टैक और इस्तेमाल के अलग-अलग उदाहरणों के साथ, अपने ऐप्लिकेशन और संगठन के लिए इस्तेमाल किया जा सकता है.

ऐप्लिकेशन के बारे में जानकारी

जिस ऐप्लिकेशन ( कोड, एमआईटी लाइसेंस के तहत) को आपको फ़ोर्क करना है वह MySQL ऑथेंटिकेशन के साथ एक बेसिक PHP 5.7 ऐप्लिकेशन है. ऐप्लिकेशन का मुख्य मकसद एक ऐसा प्लैटफ़ॉर्म उपलब्ध कराना है जहां लोग फ़ोटो अपलोड कर सकें. साथ ही, एडमिन के पास आपत्तिजनक इमेज को टैग करने की सुविधा हो. ऐप्लिकेशन में दो टेबल होती हैं:

  • उपयोगकर्ता पर क्लिक करें. यह एडमिन के साथ पहले से कंपाइल किया गया होता है. नए लोग रजिस्टर कर सकते हैं.
  • इमेज. इसमें कुछ सैंपल इमेज शामिल होती हैं. लॉग इन किए गए उपयोगकर्ता, नई तस्वीरें अपलोड कर सकते हैं. हम यहां कुछ मैजिक जोड़ेंगे.

आपका लक्ष्य

हमें पुराने ऐप्लिकेशन को Google Cloud में इस्तेमाल करने के लिए, उसे आधुनिक बनाना है. हम इसके टूल और सेवाओं का इस्तेमाल करके, बढ़ाए जा सकने की योग्यता को बेहतर बनाएंगे, सुरक्षा को बढ़ाएंगे, बुनियादी ढांचे को मैनेज करने की प्रोसेस को ऑटोमेशन में बदल देंगे. साथ ही, Cloud SQL, Cloud Run, Cloud Build, Secret Manager जैसी सेवाओं का इस्तेमाल करके, इमेज प्रोसेसिंग, मॉनिटरिंग, और डेटा स्टोरेज जैसी ऐडवांस सुविधाओं को इंटिग्रेट करेंगे.

445f7a9ae37e9b4d.png

सबसे अहम बात यह है कि हम इसे चरण-दर-चरण करना चाहते हैं, ताकि आप यह जान सकें कि हर चरण के पीछे क्या सोच है. आम तौर पर, हर चरण अगले चरणों के लिए नई संभावनाएं खोलता है (उदाहरण: मॉड्यूल 2 -> 3 और 6 -> 7).

क्या आपको अब भी यकीन नहीं हो रहा है? YouTube पर यह सात मिनट का वीडियो देखें.

आपको इन चीज़ों की ज़रूरत होगी

  • इंटरनेट से कनेक्ट किया गया ब्राउज़र वाला कंप्यूटर.
  • GCP के कुछ क्रेडिट. इसके लिए, अगला चरण देखें.
  • आपको Cloud Shell का इस्तेमाल करना होगा. इसमें पहले से इंस्टॉल की गई वे सभी कमांड शामिल होती हैं जिनकी आपको ज़रूरत होगी. साथ ही, इसमें एक आईडीई भी होता है.
  • GitHub खाता. आपको इसकी ज़रूरत इसलिए है, ताकि आप अपने गिट रिपो के साथ ओरिजनल कोड 🧑🏻‍💻 gdgpescara/app-mod-workshop को ब्रांच कर सकें. अपनी सीआई/सीडी पाइपलाइन (ऑटोमैटिक कमिट -> बिल्ड -> डिप्लॉय) के लिए इसकी ज़रूरत होती है

उदाहरण के तौर पर दिए गए समाधान यहां देखे जा सकते हैं:

इस वर्कशॉप को Cloud Shell (ब्राउज़र पर) में पूरा करने के लिए डिज़ाइन किया गया है.

हालांकि, इसे अपने लोकल कंप्यूटर से भी आज़माया जा सकता है.

2. क्रेडिट सेट अप करना और फ़ोर्क करना

6dafc658860c0ce5.png

GCP क्रेडिट रिडीम करें और GCP एनवायरमेंट सेट अप करें [ज़रूरी नहीं]

इस वर्कशॉप को चलाने के लिए, आपके पास कुछ क्रेडिट वाला बिलिंग खाता होना चाहिए. शुरू करने के लिए, इस कोडलैब के सबसे ऊपर मौजूद बैनर में दिए गए क्रेडिट का इस्तेमाल करें. अगर आपका खाता पहले से ही किसी बिलिंग खाते से कनेक्ट है, तो इस चरण को छोड़ा जा सकता है.

इसके बाद, Google Cloud Console खोलें और सबसे ऊपर बाईं ओर मौजूद ड्रॉपडाउन मेन्यू में, प्रोजेक्ट चुनने वाले विकल्प पर क्लिक करके नया प्रोजेक्ट बनाएं. इस ड्रॉपडाउन मेन्यू में "कोई संगठन नहीं" दिखता है. नीचे देखें

bd7548f78689db0b.png

अगर आपके पास कोई प्रोजेक्ट नहीं है, तो एक नया प्रोजेक्ट बनाएं. इसके लिए, नीचे दिया गया स्क्रीनशॉट देखें. सबसे ऊपर दाएं कोने में, "नया प्रोजेक्ट" विकल्प मौजूद है.

6c82aebcb9f5cd47.png

पक्का करें कि आपने नए प्रोजेक्ट को GCP के बिना शुल्क वाले आज़माने के बिलिंग खाते से लिंक कर दिया हो. इसके लिए, यह तरीका अपनाएं.

f202527d254893fb.png

अब Google Cloud Platform का इस्तेमाल किया जा सकता है. अगर आप नए उपयोगकर्ता हैं या आपको सिर्फ़ क्लाउड एनवायरमेंट में काम करना है, तो Cloud Shell और इसके एडिटर को ऐक्सेस किया जा सकता है. इसके लिए, सबसे ऊपर बाएं कोने में मौजूद इस बटन पर क्लिक करें.

7d732d7bf0deb12e.png

पक्का करें कि सबसे ऊपर बाईं ओर, आपका नया प्रोजेक्ट चुना गया हो:

नहीं चुना गया (खराब):

c2ffd36a781b276a.png

चुना गया (अच्छा):

594563c158f4f590.png

GitHub से ऐप्लिकेशन को फ़ोर्क करना

  1. डेमो ऐप्लिकेशन पर जाएं: https://github.com/gdgpescara/app-mod-workshop
  2. 🍴 फ़ोर्क करें पर क्लिक करें.
  3. अगर आपके पास GitHub खाता नहीं है, तो आपको एक नया खाता बनाना होगा.
  4. अपनी पसंद के मुताबिक बदलाव करें.

734e51bfc29ee5df.png

  1. इनका इस्तेमाल करके, ऐप्लिकेशन कोड क्लोन करें
  2. git clone https://github.com/YOUR-GITHUB-USER/YOUR-REPO-NAME
  1. क्लोन किए गए प्रोजेक्ट फ़ोल्डर को अपने पसंदीदा एडिटर में खोलें. Cloud Shell चुनने पर, नीचे दिखाए गए तरीके से "एडिटर खोलें" पर क्लिक करके ऐसा किया जा सकता है.

40f5977ea4c1d1cb.png

Google Cloud Shell Editor में, आपके पास सभी ज़रूरी चीज़ें हैं. जैसा कि इस इमेज में दिखाया गया है

a4e5ffb3e9a35e84.png

इसे विज़ुअल तरीके से भी किया जा सकता है. इसके लिए, "फ़ोल्डर खोलें" पर क्लिक करें और फ़ोल्डर चुनें. यह फ़ोल्डर, आपके होम फ़ोल्डर में app-mod-workshop के तौर पर मौजूद होता है.

3. पहला मॉड्यूल: SQL इंस्टेंस बनाना

645902e511a432a6.png

Google Cloud SQL इंस्टेंस बनाना

हमारा PHP ऐप्लिकेशन, MySQL डेटाबेस से कनेक्ट होगा. इसलिए, हमें इसे Google Cloud पर रेप्लिकेट करना होगा, ताकि माइग्रेशन आसानी से हो सके. Cloud SQL, आपकी ज़रूरतों के हिसाब से सबसे सही विकल्प है. इसकी मदद से, क्लाउड में पूरी तरह से मैनेज किया गया MySQL डेटाबेस चलाया जा सकता है. इसके लिए, यह तरीका अपनाएं:

  1. Cloud SQL पेज पर जाएं: https://console.cloud.google.com/sql/instances
  2. "Create Instance" पर क्लिक करें
  3. अगर ज़रूरी हो, तो एपीआई चालू करें. इसमें कुछ सेकंड लग सकते हैं.
  4. MySQL चुनें.
  5. (हम आपको सबसे सस्ता वर्शन उपलब्ध कराने की कोशिश कर रहे हैं, ताकि यह लंबे समय तक चले):
  • वर्शन: Enterprise
  • प्रीसेट: development (हमने Sandbox का इस्तेमाल किया, लेकिन यह हमारे लिए काम नहीं किया)
  • Mysql Ver: 5.7 (वाह, यह तो बहुत पुराना वर्शन है!)
  1. उदाहरण के लिए आईडी: appmod-phpapp चुनें. अगर आपने इसे बदला है, तो आने वाले समय में स्क्रिप्ट और समाधानों में भी इसके हिसाब से बदलाव करना न भूलें.
  2. पासवर्ड: अपनी पसंद का कोई भी पासवर्ड डालें. हालांकि, इसे CLOUDSQL_INSTANCE_PASSWORD के तौर पर नोट कर लें
  3. क्षेत्र: इसे वही रखें जो आपने ऐप्लिकेशन के बाकी हिस्से के लिए चुना है. उदाहरण के लिए, मिलान = europe-west8
  4. ज़ोन के हिसाब से उपलब्धता: सिंगल ज़ोन (हम डेमो के लिए पैसे बचा रहे हैं)

Cloud SQL डेटाबेस को डिप्लॉय करने के लिए, 'इंस्टेंस बनाएं' बटन पर क्लिक करें; ⌛ इसमें करीब 10 मिनट लगते हैं⌛. इस दौरान, दस्तावेज़ पढ़ना जारी रखें. साथ ही, अगले मॉड्यूल ("अपने PHP ऐप्लिकेशन को कंटेनर में बदलें") को हल करना शुरू किया जा सकता है, क्योंकि पहले हिस्से में इस मॉड्यूल की कोई निर्भरता नहीं है (जब तक कि डीबी कनेक्शन ठीक न हो जाए).

ध्यान दें. इस इंस्टेंस का शुल्क, आपको हर दिन ~7 डॉलर देना होगा. वर्कशॉप के बाद, इसे बंद करना न भूलें.

Cloud SQL में image_catalog DB और User बनाना

ऐप्लिकेशन प्रोजेक्ट में एक db/ फ़ोल्डर होता है. इसमें दो SQL फ़ाइलें होती हैं:

  1. 01_schema.sql : इसमें दो टेबल बनाने के लिए एसक्यूएल कोड होता है. इन टेबल में उपयोगकर्ता और इमेज का डेटा होता है.
  2. 02_seed.sql: इसमें पहले से बनाई गई टेबल में डेटा डालने के लिए एसक्यूएल कोड होता है.

image_catalog डेटाबेस बनने के बाद, इन फ़ाइलों का इस्तेमाल किया जाएगा. इसके लिए, यह तरीका अपनाएं:

  1. अपना इंस्टेंस खोलें और डेटाबेस टैब पर क्लिक करें:
  2. "डेटाबेस बनाएं" पर क्लिक करें
  3. इसे image_catalog कहा जाता है (जैसे, PHP ऐप्लिकेशन कॉन्फ़िगरेशन में).

997ef853e5ebd857.png

इसके बाद, हम डेटाबेस उपयोगकर्ता बनाते हैं. इससे हम image_catalog डेटाबेस में पुष्टि कर सकते हैं.

  1. अब उपयोगकर्ता टैब पर क्लिक करें
  2. "उपयोगकर्ता खाता जोड़ें" पर क्लिक करें.
  3. उपयोगकर्ता: आइए, एक बनाएं:
  • उपयोगकर्ता नाम: appmod-phpapp-user
  • पासवर्ड: कोई ऐसा पासवर्ड चुनें जिसे याद रखना आसान हो या "जनरेट करें" पर क्लिक करें
  • "किसी भी होस्ट को अनुमति दें (%)" को चालू रखें.
  1. जोड़ें पर क्लिक करें.

डीबी को जाने-माने आईपी के लिए खोलें.

ध्यान दें कि Cloud SQL में सभी डेटाबेस ‘आइसोलेटेड' होते हैं. आपको साफ़ तौर पर एक नेटवर्क सेट अप करना होगा, ताकि उसे ऐक्सेस किया जा सके.

  1. अपने इंस्टेंस पर क्लिक करें
  2. मेन्यू "कनेक्शन" खोलें
  3. "नेटवर्किंग" टैब पर क्लिक करें.
  4. "अनुमति वाले नेटवर्क" में जाकर, पर क्लिक करें. अब कोई नेटवर्क (यानी कि सबनेट) जोड़ें.
  • फ़िलहाल, ऐप्लिकेशन को काम करने देने के लिए, हम तुरंत काम करने वाली असुरक्षित सेटिंग चुनते हैं. हालांकि, बाद में आपको इसे उन आईपी पतों तक सीमित करना पड़ सकता है जिन पर आपको भरोसा है:
  • नाम: "दुनिया में हर कोई - असुरक्षित".
  • नेटवर्क: "0.0.0.0/0" (ध्यान दें: यह असुरक्षित हिस्सा है!)
  • 'हो गया' पर क्लिक करें
  1. 'सेव करें' पर क्लिक करें.

आपको कुछ ऐसा दिखेगा:

5ccb9062a7071964.png

ध्यान दें. इस समाधान से, वर्कशॉप को O(hours) में पूरा किया जा सकता है. हालांकि, प्रोडक्शन के लिए अपने समाधान को सुरक्षित बनाने के लिए, सुरक्षा से जुड़ा दस्तावेज़ देखें!

अब डेटाबेस कनेक्शन की जांच करने का समय है!

आइए, देखते हैं कि हमने पहले जो image_catalog उपयोगकर्ता बनाया था वह काम करता है या नहीं.

इंस्टेंस में "Cloud SQL Studio" को ऐक्सेस करें. इसके बाद, डेटाबेस, उपयोगकर्ता, और पासवर्ड डालें, ताकि पुष्टि की जा सके. इसे नीचे दिखाया गया है:

d56765c6154c11a4.png

अब SQL एडिटर खोलें और अगले सेक्शन पर जाएं.

कोडबेस से डेटाबेस इंपोर्ट करना

एसक्यूएल एडिटर का इस्तेमाल करके, डेटा के साथ image_catalog टेबल इंपोर्ट करें. रेपो में मौजूद फ़ाइलों ( 01_schema.sql और फिर 02_seed.sql) से SQL कोड कॉपी करें. इसके बाद, उन्हें एक के बाद एक करके क्रम से लागू करें.

इसके बाद, आपको image_catalog में दो टेबल दिखेंगी. ये टेबल, users और images हैं. इन्हें यहां दिखाया गया है:

65ba01e4c6c2dac0.png

इसे आज़माने के लिए, एडिटर में यह कोड चलाएं: select * from images;

साथ ही, Cloud SQL इंस्टेंस का सार्वजनिक आईपी पता नोट करना न भूलें. आपको इसकी ज़रूरत बाद में पड़ेगी. आईपी पाने के लिए, खास जानकारी पेज पर जाकर, Cloud SQL इंस्टेंस के मुख्य पेज पर जाएं. (खास जानकारी > इस इंस्टेंस से कनेक्ट करें > सार्वजनिक आईपी पता).

4. दूसरा मॉड्यूल: अपने PHP ऐप्लिकेशन को कंटेनर में बदलना

e7f0e9979d8805f5.png

हमें इस ऐप्लिकेशन को क्लाउड के लिए बनाना है.

इसका मतलब है कि कोड को किसी तरह की ZIP फ़ाइल में पैकेज करना. इसमें क्लाउड में कोड चलाने के लिए ज़रूरी सभी जानकारी होती है.

इसे पैकेज करने के कुछ तरीके हैं:

  • Docker. यह बहुत लोकप्रिय है, लेकिन इसे सही तरीके से सेट अप करना काफ़ी मुश्किल है.
  • Buildpacks. यह कम लोकप्रिय है, लेकिन इसमें यह अनुमान लगाने की सुविधा होती है कि क्या बनाना है और क्या चलाना है. अक्सर यह काम कर जाता है!

इस वर्कशॉप के हिसाब से, हम यह मानकर चलेंगे कि आपने Docker का इस्तेमाल किया है.

अगर आपने Cloud Shell का इस्तेमाल करने का विकल्प चुना है, तो अब इसे फिर से खोलें. इसके लिए, Cloud Console में सबसे ऊपर दाईं ओर मौजूद आइकॉन पर क्लिक करें.

ec6a6b90b39e03e.png

इससे पेज के सबसे नीचे एक शेल खुलेगा. आपको सेट-अप चरण में कोड को फ़ोर्क करना होगा.

6999b906c0dedeb7.png

Docker

अगर आपको कंट्रोल चाहिए, तो यह आपके लिए सही समाधान है. यह तब काम आता है, जब आपको कुछ खास लाइब्रेरी कॉन्फ़िगर करनी हों और कुछ ऐसी चीज़ें डालनी हों जो साफ़ तौर पर न दिखें. जैसे, अपलोड में chmod, आपके ऐप्लिकेशन में नॉन-स्टैंडर्ड एक्ज़ीक्यूटेबल वगैरह.

हमें अपने कंटेनर वाले ऐप्लिकेशन को Cloud Run पर डिप्लॉय करना है. इसलिए, यहां दिया गया दस्तावेज़ देखें. इसे PHP 8 से PHP 5.7 में कैसे बैक पोर्ट किया जाएगा? इसके लिए, Gemini का इस्तेमाल किया जा सकता है. इसके अलावा, पहले से तैयार इस वर्शन का इस्तेमाल किया जा सकता है:

# Use the official PHP image: https://hub.docker.com/_/php
FROM php:5.6-apache

# Configure PHP for Cloud Run.
# Precompile PHP code with opcache.
# Install PHP's extension for MySQL
RUN docker-php-ext-install -j "$(nproc)" opcache mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql

RUN set -ex; \
  { \
    echo "; Cloud Run enforces memory & timeouts"; \
    echo "memory_limit = -1"; \
    echo "max_execution_time = 0"; \
    echo "; File upload at Cloud Run network limit"; \
    echo "upload_max_filesize = 32M"; \
    echo "post_max_size = 32M"; \
    echo "; Configure Opcache for Containers"; \
    echo "opcache.enable = On"; \
    echo "opcache.validate_timestamps = Off"; \
    echo "; Configure Opcache Memory (Application-specific)"; \
    echo "opcache.memory_consumption = 32"; \
  } > "$PHP_INI_DIR/conf.d/cloud-run.ini"

# Copy in custom code from the host machine.
WORKDIR /var/www/html

COPY . .

# Setup the PORT environment variable in Apache configuration files: https://cloud.google.com/run/docs/reference/container-contract#port
ENV PORT=8080

# Tell Apache to use 8080 instead of 80.
RUN sed -i 's/80/${PORT}/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf

# Note: This is quite insecure and opens security breaches. See last chapter for hardening ideas.
# Uncomment at your own risk:
#RUN chmod 777 /var/www/html/uploads/

# Configure PHP for development.
# Switch to the production php.ini for production operations.
# RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# https://github.com/docker-library/docs/blob/master/php/README.md#configuration
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

# Expose the port
EXPOSE 8080

Dockerfile का नया वर्शन यहां उपलब्ध है.

अपने ऐप्लिकेशन को स्थानीय तौर पर टेस्ट करने के लिए, हमें config.php फ़ाइल में इस तरह से बदलाव करना होगा कि हमारा PHP ऐप्लिकेशन, Google CloudSQL पर उपलब्ध MYSQL db से कनेक्ट हो जाए. आपने पहले जो जानकारी सेट अप की है उसके आधार पर, यहां दी गई जानकारी भरें:

<?php
// Database configuration
$db_host = '____________';
$db_name = '____________';
$db_user = '____________';
$db_pass = '____________';

try {
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Errore di connessione: " . $e->getMessage());
}

session_start();
?>
  • DB_HOST Cloud SQL का सार्वजनिक आईपी पता है. इसे SQL कंसोल में देखा जा सकता है:

bd27071bf450a8d0.png

  • DB_NAME में कोई बदलाव नहीं होना चाहिए: image_catalog
  • DB_USER की वैल्यू appmod-phpapp-user होनी चाहिए
  • DB_PASS वह आइटम है जिसे आपने चुना है. इसे सिंगल कोट में सेट अप करें और ज़रूरत के हिसाब से एस्केप करें.

इसके अलावा, Gemini की मदद से, कुछ 🇮🇹 इटैलियन टेक्स्ट को अंग्रेज़ी में अनुवाद करें!

ठीक है, अब आपके पास Dockerfile है और आपने अपने PHP ऐप्लिकेशन को अपने डेटाबेस से कनेक्ट करने के लिए कॉन्फ़िगर कर लिया है. अब इसे आज़माएं!

अगर आपने अब तक Docker इंस्टॉल नहीं किया है, तो इसे इंस्टॉल करें ( लिंक). अगर Cloud Shell का इस्तेमाल किया जा रहा है, तो इसकी ज़रूरत नहीं है.

अब सही docker build और run कमांड का इस्तेमाल करके, कंटेनर में मौजूद PHP ऐप्लिकेशन को बनाएं और चलाएं.

# Build command - don't forget the final . This works if Dockerfile is inside the code folder:
$ docker build -t my-php-app-docker .   

# Local Run command: most likely ports will be 8080:8080
$ docker run -it -p <CONTAINER_PORT>:<LOCAL_MACHINE_PORT> my-php-app-docker

अगर सब कुछ ठीक से काम कर रहा है, तो लोकल होस्ट से कनेक्ट होने पर आपको यह वेब पेज दिखेगा! अब आपका ऐप्लिकेशन पोर्ट 8080 पर चल रहा है. "वेब प्रीव्यू" आइकॉन (आंख वाला ब्राउज़र) पर क्लिक करें. इसके बाद, पोर्ट 8080 पर प्रीव्यू करें (या किसी अन्य पोर्ट के लिए "पोर्ट बदलें") पर क्लिक करें

33a24673f4550454.png

अपने ब्राउज़र पर नतीजे की जांच करना

अब आपका ऐप्लिकेशन कुछ ऐसा दिखना चाहिए:

2718ece96b1f18b6.png

अगर आपने Admin/admin123 से लॉगिन किया है, तो आपको कुछ ऐसा दिखेगा.

68b62048c2e86aea.png

बहुत बढ़िया!!! इटैलियन टेक्स्ट के अलावा, यह काम कर रहा है! 🎉🎉🎉

अगर डॉकराइज़ेशन सही है, लेकिन डीबी क्रेडेंशियल गलत हैं, तो आपको कुछ ऐसा दिख सकता है:

e22f45b79bab86e1.png

फिर से कोशिश करें, आप काफ़ी करीब हैं!

Artifact Registry में सेव किया जा रहा है [ज़रूरी नहीं]

अब तक, आपके पास कंटेनर में मौजूद एक ऐसा PHP ऐप्लिकेशन होना चाहिए जिसे क्लाउड पर डिप्लॉय किया जा सके. इसके बाद, हमें क्लाउड में एक जगह चाहिए, जहां हम अपनी Docker इमेज को सेव कर सकें. साथ ही, उसे Cloud Run जैसी Google Cloud सेवाओं पर डिप्लॉय करने के लिए उपलब्ध करा सकें. स्टोरेज के इस समाधान को Artifact Registry कहा जाता है. यह Google Cloud की पूरी तरह से मैनेज की जाने वाली सेवा है. इसे ऐप्लिकेशन आर्टफ़ैक्ट को सेव करने के लिए डिज़ाइन किया गया है. इसमें Docker कंटेनर इमेज, Maven पैकेज, npm मॉड्यूल वगैरह शामिल हैं.

आइए, सही बटन का इस्तेमाल करके Google Cloud Artifact Registry में एक रिपॉज़िटरी बनाएं.

e1123f0c924022e6.png

आर्टफ़ैक्ट सेव करने के लिए, कोई मान्य नाम, फ़ॉर्मैट, और क्षेत्र चुनें.

4e516ed209c470ee.png

अपनी लोकल डेवलपमेंट एनवायरमेंट टैग पर वापस जाएं और ऐप्लिकेशन कंटेनर इमेज को अभी बनाई गई Artifact Registry रिपॉज़िटरी में पुश करें. इसके लिए, यहां दी गई कमांड पूरी करें.

  • docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • docker push TARGET_IMAGE[:TAG]

नतीजा, इस स्क्रीनशॉट की तरह दिखना चाहिए.

1e498feb4e88be9f.png

बधाई हो 🎉🎉🎉, अब अगले लेवल पर जाएं. इससे पहले, दो मिनट का समय निकालकर, अपलोड/लॉगिन/लॉग आउट करने की कोशिश करें. साथ ही, ऐप्लिकेशन के एंडपॉइंट के बारे में जानें. आपको इनकी ज़रूरत बाद में पड़ेगी.

संभावित गड़बड़ियां

अगर आपको कंटेनर बनाने से जुड़ी गड़बड़ियां मिलती हैं, तो गड़बड़ी को ठीक करने और उसके बारे में जानकारी पाने के लिए Gemini का इस्तेमाल करें. इसके लिए, यह जानकारी दें:

  • आपका मौजूदा Dockerfile
  • मिली हुई गड़बड़ी
  • [ज़रूरत पड़ने पर] एक्ज़ीक्यूट किया जा रहा PHP कोड.

अपलोड करने की अनुमतियां. /upload.php एंडपॉइंट का इस्तेमाल करके, कोई फ़ोटो अपलोड करने की कोशिश करें. आपको नीचे दी गई गड़बड़ी का मैसेज दिख सकता है. अगर ऐसा है, तो आपको Dockerfile में कुछ chmod/chown ठीक करने होंगे.

चेतावनी: move_uploaded_file(uploads/image (3).png): failed to open stream: Permission denied in /var/www/html/upload.php on line 11

PDOException "could not find driver" (या "Errore di connessione: could not find driver"). पक्का करें कि आपके Dockerfile में, DB से कनेक्ट करने के लिए mysql (pdo_mysql) के लिए सही PDO लाइब्रेरी मौजूद हों. यहां दिए गए समाधानों से प्रेरणा लें.

आपके अनुरोध को बैकएंड पर फ़ॉरवर्ड नहीं किया जा सका. पोर्ट 8080 पर मौजूद सर्वर से कनेक्ट नहीं किया जा सका. इसका मतलब है कि शायद आपने गलत पोर्ट को ऐक्सेस करने की अनुमति दी है. पक्का करें कि आपने उस पोर्ट को ऐक्सेस करने की अनुमति दी हो जिससे Apache/Nginx कॉन्टेंट दिखा रहे हैं. यह कोई सामान्य समस्या नहीं है. अगर हो सके, तो उस पोर्ट को 8080 पर सेट करें. इससे Cloud Run का इस्तेमाल करना आसान हो जाता है. अगर आपको पोर्ट 80 का इस्तेमाल जारी रखना है (उदाहरण के लिए, Apache को इसकी ज़रूरत है), तो इसे चलाने के लिए किसी दूसरे निर्देश का इस्तेमाल करें:

$ docker run -it -p 8080:80 # force 80

# Use the PORT environment variable in Apache configuration files.

# https://cloud.google.com/run/docs/reference/container-contract#port

RUN sed -i 's/80/${PORT}/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf

5. मॉड्यूल 3: ऐप्लिकेशन को Cloud Run पर डिप्लॉय करना

9ffca42774f6c5d1.png

Cloud Run क्यों?

यह एक अच्छा सवाल है! कुछ साल पहले, आपने Google App Engine को चुना होगा.

आसान शब्दों में कहें, तो Cloud Run में आज नया टेक्नोलॉजी स्टैक है. इसे डिप्लॉय करना आसान है और यह सस्ता है. साथ ही, जब इसका इस्तेमाल नहीं किया जाता, तो यह 0 तक स्केल डाउन हो जाता है. यह किसी भी स्टेटलेस कंटेनर को चलाने की सुविधा देता है. साथ ही, इसे Google Cloud की अलग-अलग सेवाओं के साथ इंटिग्रेट किया जा सकता है. इसलिए, यह कम से कम ओवरहेड और ज़्यादा से ज़्यादा परफ़ॉर्मेंस के साथ माइक्रोसेवाओं और आधुनिक ऐप्लिकेशन को डिप्लॉय करने के लिए सबसे सही है.

खास तौर पर, Cloud Run एक ऐसा प्लैटफ़ॉर्म है जिसे Google Cloud पूरी तरह से मैनेज करता है. इसकी मदद से, बिना सर्वर वाले एनवायरमेंट में स्टेटलेस कंटेनर वाले ऐप्लिकेशन चलाए जा सकते हैं. यह सभी इन्फ़्रास्ट्रक्चर को अपने-आप मैनेज करता है. साथ ही, आने वाले ट्रैफ़िक के हिसाब से इसे स्केल करता है. जब कोई गतिविधि नहीं होती है, तो यह अपने-आप कम हो जाता है. इससे लागत कम होती है और यह ज़्यादा असरदार होता है. Cloud Run, किसी भी भाषा या लाइब्रेरी के साथ काम करता है. हालांकि, इसके लिए ज़रूरी है कि उसे कंटेनर में पैकेज किया गया हो. इससे डेवलपमेंट में काफ़ी आसानी होती है. यह Google Cloud की अन्य सेवाओं के साथ आसानी से इंटिग्रेट हो जाता है. साथ ही, सर्वर इन्फ़्रास्ट्रक्चर को मैनेज किए बिना माइक्रोसेवाएं, एपीआई, वेबसाइटें, और इवेंट-ड्रिवन ऐप्लिकेशन बनाने के लिए सही है.

ज़रूरी शर्तें

इस टास्क को पूरा करने के लिए, आपके कंप्यूटर पर gcloud इंस्टॉल होना चाहिए. अगर ऐसा नहीं होता है, तो यहां दिए गए निर्देश देखें. हालांकि, अगर Google Cloud Shell का इस्तेमाल किया जा रहा है, तो आपको कुछ भी करने की ज़रूरत नहीं है.

सुविधा को डिप्लॉय करने से पहले...

अगर आपको अपने लोकल एनवायरमेंट में काम करना है, तो Google Cloud से पुष्टि कराने के लिए, यहां दिया गया तरीका अपनाएं

  • $ gcloud auth login –update-adc # not needed in Cloud Shell

इससे आपके ब्राउज़र पर OAuth लॉगिन के ज़रिए आपकी पुष्टि हो जाएगी. पक्का करें कि आपने Chrome में उसी उपयोगकर्ता खाते (जैसे, vattelapesca@gmail.com) से लॉग इन किया हो जिससे Google Cloud में लॉग इन किया गया है और बिलिंग की सुविधा चालू है.

Cloud Run API को चालू करने के लिए, यह कमांड चलाएं:

  • $ gcloud services enable run.googleapis.com cloudbuild.googleapis.com

इस समय, सब कुछ Cloud Run पर डिप्लॉय करने के लिए तैयार है.

gcloud की मदद से, अपने ऐप्लिकेशन को Cloud Run पर डिप्लॉय करना

Cloud Run पर ऐप्लिकेशन डिप्लॉय करने की अनुमति देने वाला कमांड gcloud run deploy है. अपने लक्ष्य को हासिल करने के लिए, कई विकल्प सेट किए जा सकते हैं. यहां दिए गए विकल्प, कम से कम सेट किए जाने चाहिए. इन्हें कमांड लाइन के ज़रिए सेट किया जा सकता है. इसके अलावा, टूल आपसे इंटरैक्टिव प्रॉम्प्ट के ज़रिए भी इनकी जानकारी मांग सकता है:

  1. Cloud Run सेवा का नाम, जिसे आपको अपने ऐप्लिकेशन के लिए डिप्लॉय करना है. Cloud Run सेवा आपको एक यूआरएल देगी, जो आपके ऐप्लिकेशन के लिए एंडपॉइंट उपलब्ध कराता है.
  2. Google Cloud Region जहां आपका ऐप्लिकेशन चलेगा. (--region REGION)
  3. कंटेनर इमेज, जो आपके ऐप्लिकेशन को रैप करती है.
  4. एनवायरमेंट वैरिएबल, जिनका इस्तेमाल आपके ऐप्लिकेशन को एक्ज़ीक्यूट करने के दौरान करना होता है.
  5. Allow-Unauthenticated फ़्लैग, जो सभी को बिना किसी और पुष्टि के आपके ऐप्लिकेशन को ऐक्सेस करने की अनुमति देता है.

इस विकल्प को अपनी कमांड लाइन पर लागू करने का तरीका जानने के लिए, दस्तावेज़ देखें. इसके अलावा, संभावित समाधान के लिए नीचे की ओर स्क्रोल करें.

इसे लागू होने में कुछ मिनट लगेंगे. अगर सब कुछ सही है, तो आपको Google Cloud Console में कुछ ऐसा दिखेगा.

ef1029fb62f8de81.pngf7191d579c21ca3e.png

Cloud Run से मिले यूआरएल पर क्लिक करें और अपने ऐप्लिकेशन को टेस्ट करें. पुष्टि हो जाने के बाद, आपको कुछ ऐसा दिखेगा.

d571a90cd5a373f9.png

बिना किसी तर्क के"gcloud run deploy" कमांड का इस्तेमाल करना

आपने देखा होगा कि gcloud run deploy आपसे सही सवाल पूछता है और आपके छोड़े गए खाली जगहों को भरता है. यह शानदार है!

हालांकि, कुछ मॉड्यूल में हम इस कमांड को Cloud Build ट्रिगर में जोड़ने वाले हैं. इसलिए, हम इंटरैक्टिव सवाल नहीं पूछ सकते. हमें निर्देश में मौजूद हर विकल्प को भरना होगा. इसलिए, आपको गोल्डन gcloud run deploy --option1 blah --foo bar --region your-fav-region बनाना है. आप इसे कैसे करते हैं?

  1. gcloud के सवाल पूछना बंद करने तक, दूसरे, तीसरे, और चौथे चरण को दोहराएं:
  2. [LOOP] अब तक gcloud run deploy विकल्प मिले
  3. [LOOP] सिस्टम, विकल्प X के लिए पूछता है
  4. [LOOP] सार्वजनिक दस्तावेज़ों में खोजो कि सीएलआई में X को कैसे सेट अप किया जाता है. इसके लिए, --my-option [my-value] जोड़ने का विकल्प इस्तेमाल करो.
  5. अब दूसरे चरण पर वापस जाएं. हालांकि, अगर gcloud बिना किसी और सवाल के पूरा हो जाता है, तो ऐसा करने की ज़रूरत नहीं है.
  6. This gcloud run deploy BLAH BLAH BLAH rocks! कमांड को कहीं सेव करें. आपको Cloud Build के चरण के लिए इसकी ज़रूरत बाद में पड़ेगी!

इस समस्या को हल करने का तरीका यहां दिया गया है. दस्तावेज़ यहां हैं.

बधाई हो 🎉🎉🎉 आपने Google Cloud में अपना ऐप्लिकेशन डिप्लॉय कर लिया है. यह मॉडर्नाइज़ेशन का पहला चरण है.

6. मॉड्यूल 4: Secret Manager की मदद से पासवर्ड को सुरक्षित रखना

95cd57b03b4e3c73.png

पिछले चरण में, हमने Cloud Run में अपने ऐप्लिकेशन को डिप्लॉय और उसे सफलतापूर्वक चलाया था. हालांकि, हमने सुरक्षा से जुड़े एक गलत तरीके का इस्तेमाल किया है: कुछ सीक्रेट को क्लियरटेक्स्ट में उपलब्ध कराना.

पहला तरीका: ENV का इस्तेमाल करने के लिए config.php फ़ाइल अपडेट करें

आपने शायद ध्यान दिया हो कि हमने config.php फ़ाइल में, डीबी पासवर्ड को सीधे तौर पर कोड में डाल दिया है. यह जांच करने के लिए ठीक है कि ऐप्लिकेशन काम कर रहा है या नहीं. हालांकि, प्रोडक्शन एनवायरमेंट में इस तरह के कोड का इस्तेमाल नहीं किया जा सकता. पासवर्ड (और डीबी कनेक्शन के अन्य पैरामीटर) को डाइनैमिक तरीके से पढ़ा जाना चाहिए और रनटाइम के दौरान ऐप्लिकेशन को उपलब्ध कराया जाना चाहिए. config.php फ़ाइल में बदलाव करें, ताकि यह ENV वैरिएबल से डीबी पैरामीटर पढ़ सके. अगर ऐसा नहीं होता है, तो आपको डिफ़ॉल्ट वैल्यू सेट करनी चाहिए. अगर ENV लोड नहीं होता है, तो यह तरीका काम आता है. इससे पेज के आउटपुट में यह पता चल जाएगा कि डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जा रहा है या नहीं. खाली जगहों को भरें और config.php में मौजूद कोड को बदलें.

<?php
// Database configuration with ENV variables. Set default values as well 
$db_host = getenv('DB_HOST') ?: 'localhost';
$db_name = getenv('DB_NAME') ?: 'image_catalog';
$db_user = getenv('DB_USER') ?: 'appmod-phpapp-user';
$db_pass = getenv('DB_PASS') ?: 'wrong_password';
// Note getenv() is PHP 5.3 compatible
try {
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Errore di connessione: " . $e->getMessage());
}

session_start();
?>

आपका ऐप्लिकेशन कंटेनर में है. इसलिए, आपको ऐप्लिकेशन को ईएनवी वैरिएबल देने का तरीका बताना होगा. ऐसा कुछ तरीकों से किया जा सकता है:

  • build के समय, Dockerfile पर. अपनी पिछली Dockerfile में, ENV DB_VAR=ENV_VAR_VALUE सिंटैक्स का इस्तेमाल करके चार पैरामीटर जोड़ें. इससे डिफ़ॉल्ट वैल्यू सेट अप हो जाएंगी. हालांकि, रनटाइम के दौरान इन्हें बदला जा सकता है. उदाहरण के लिए, ‘DB_NAME' और ‘DB_USER' को सिर्फ़ यहां सेट किया जा सकता है.
  • रन टाइम पर. Cloud Run के लिए इन वैरिएबल को सेट अप किया जा सकता है. इन्हें सीएलआई या यूज़र इंटरफ़ेस (यूआई) से सेट अप किया जा सकता है. यह जगह, अपने सभी चार वैरिएबल डालने के लिए सही है. हालांकि, अगर आपको Dockerfile में सेट किए गए डिफ़ॉल्ट वैरिएबल रखने हैं, तो ऐसा करने की ज़रूरत नहीं है.

लोकलहोस्ट में, आपको अपने ENV वैरिएबल को .env फ़ाइल में रखना पड़ सकता है. इसके लिए, solutions फ़ोल्डर देखें.

यह भी पक्का करें कि .env को आपके .gitignore में जोड़ा गया हो : आपको अपने सीक्रेट को Github पर पुश नहीं करना है!

echo .env >> .gitignore

इसके बाद, इंस्टेंस को स्थानीय तौर पर टेस्ट किया जा सकता है:

docker run -it -p 8080:8080 --env-file .env my-php-app-docker

अब आपने ये काम कर लिए हैं:

  1. आपका ऐप्लिकेशन, आपके ENV से वैरिएबल को डाइनैमिक तौर पर पढ़ेगा
  2. आपने सुरक्षा को बेहतर बनाया है, क्योंकि आपने अपने कोड से डेटाबेस का पासवर्ड हटा दिया है)

अब Cloud Run पर नई रीविज़न डिप्लॉय की जा सकती है. आइए, यूज़र इंटरफ़ेस पर जाएं और एनवायरमेंट वैरिएबल को मैन्युअल तरीके से सेट करें:

  • https://console.cloud.google.com/run पर जाएं
  • अपने ऐप्लिकेशन पर क्लिक करें
  • "बदलाव करें और नया वर्शन डिप्लॉय करें" पर क्लिक करें
  • पहले टैब "कंटेनर" पर, सबसे नीचे मौजूद टैब "वैरिएबल और सीक्रेट" पर क्लिक करें
  • "+ वैरिएबल जोड़ें" पर क्लिक करें और सभी ज़रूरी वैरिएबल जोड़ें. आपको कुछ ऐसा दिखेगा:

7a5fbfa448544d3.pngf2780c35585388ca.png

क्या यह सही है? नहीं. आपका PASS अब भी ज़्यादातर ऑपरेटर को दिखता है. Google Cloud Secret Manager का इस्तेमाल करके, इस जोखिम को कम किया जा सकता है.

दूसरा वर्शन: Secret Manager

आपके पासवर्ड, आपके कोड से हट गए हैं: बधाई हो! लेकिन रुकिए - क्या हम अब सुरक्षित हैं?

आपके पासवर्ड अब भी उन सभी लोगों को दिखते हैं जिनके पास Google Cloud Console का ऐक्सेस है. दरअसल, Cloud Run की YAML फ़ाइल को ऐक्सेस करके, इसे वापस पाया जा सकता है. इसके अलावा, अगर Cloud Run के नए वर्शन में बदलाव करने या उसे डिप्लॉय करने की कोशिश की जाती है, तो पासवर्ड, वैरिएबल और सीक्रेट सेक्शन में दिखता है. इसे यहां दिए गए स्क्रीनशॉट में देखा जा सकता है.

Google Cloud Secret Manager, संवेदनशील जानकारी को मैनेज करने के लिए एक सुरक्षित और केंद्रीकृत सेवा है. जैसे, एपीआई कुंजियां, पासवर्ड, सर्टिफ़िकेट, और अन्य सीक्रेट.

इसकी मदद से, सीक्रेट को सेव, मैनेज, और ऐक्सेस किया जा सकता है. इसके लिए, आपको बेहतर अनुमतियां और मज़बूत एन्क्रिप्शन मिलता है. Secret Manager को Google Cloud के Identity and Access Management (IAM) के साथ इंटिग्रेट किया गया है. इससे यह कंट्रोल किया जा सकता है कि कौनसे उपयोगकर्ता, खास सीक्रेट को ऐक्सेस कर सकते हैं. इससे डेटा की सुरक्षा और कानूनी नियमों का पालन करने में मदद मिलती है.

यह सीक्रेट को अपने-आप रोटेट करने और वर्शन बनाने की सुविधा भी देता है. इससे सीक्रेट के लाइफ़साइकल को मैनेज करना आसान हो जाता है. साथ ही, Google Cloud की सेवाओं में मौजूद ऐप्लिकेशन की सुरक्षा बेहतर हो जाती है.

Secret Manager को ऐक्सेस करने के लिए, हैमबर्गर मेन्यू से Security सेवाओं पर जाएं. इसके बाद, इसे Data Protection सेक्शन में ढूंढें. इसे नीचे दिए गए स्क्रीनशॉट में दिखाया गया है.

6df83a1c3cb757f6.png

यहां दी गई इमेज के मुताबिक, Secret Manager API को चालू करें.

a96c312e2c098db1.png

  • अब "सीक्रेट बनाएं" पर क्लिक करें: इसे हम इस तरह से कॉल करते हैं:
  • नाम: php-amarcord-db-pass
  • सीक्रेट वैल्यू: ‘your DB password' ("upload file" वाले हिस्से को अनदेखा करें).
  • इस सीक्रेट लिंक को एनोटेट करें. यह projects/123456789012/secrets/php-amarcord-db-pass की तरह दिखना चाहिए. यह आपके सीक्रेट के लिए यूनीक पॉइंटर है. यह Terraform, Cloud Run वगैरह के लिए होता है. यह नंबर, आपका यूनीक प्रोजेक्ट नंबर होता है.

अहम जानकारी: अपने सीक्रेट के लिए, नाम रखने के एक ही तरीके का इस्तेमाल करें. इसके लिए, बाएं से दाएं की ओर जाएं. उदाहरण के लिए: cloud-devrel-phpamarcord-dbpass

  • संगठन (कंपनी के साथ)
  • टीम (संगठन के अंदर)
  • ऐप्लिकेशन (टीम के अंदर)
  • वैरिएबल का नाम (ऐप्लिकेशन में)

इससे आपको एक ही ऐप्लिकेशन के सभी सीक्रेट ढूंढने के लिए, आसान रेगुलर एक्सप्रेशन (रेगुलर एक्सप्रेशन) मिल जाएंगे.

Cloud Run का नया वर्शन बनाना

अब हमारे पास नया सीक्रेट है. इसलिए, हमें DB_PASS ENV वैरिएबल को हटाना होगा और उसकी जगह नया सीक्रेट इस्तेमाल करना होगा. इसलिए:

  • Google Cloud Console का इस्तेमाल करके, Cloud Run को ऐक्सेस करना
  • ऐप्लिकेशन चुनें.
  • "बदलाव करें और नई रीविज़न डिप्लॉय करें" पर क्लिक करें
  • "वैरिएबल और सीक्रेट" टैब ढूंढें.
  • DB_PASS ENV वैरिएबल को रीसेट करने के लिए, "+ किसी सीक्रेट का रेफ़रंस दें" बटन का इस्तेमाल करें.
  • रेफ़र किए गए सीक्रेट के लिए, एक ही "DB_PASS" का इस्तेमाल करें. साथ ही, सबसे नए वर्शन का इस्तेमाल करें.

9ed4e35be7654dcb.png

इसके बाद, आपको यह गड़बड़ी दिखेगी

da0ccd7af39b04ed.png

इसे ठीक करने का तरीका जानें. इस समस्या को हल करने के लिए, आपको IAM और एडमिन सेक्शन को ऐक्सेस करना होगा. इसके बाद, अनुमतियां देने की सेटिंग में बदलाव करना होगा. डीबग करने का आनंद लें!

समस्या का पता लगाने के बाद, Cloud Run पर वापस जाएं और नया वर्शन फिर से डिप्लॉय करें. नतीजा इस इमेज जैसा दिखना चाहिए:

e89f9ca780169b6b.png

अहम जानकारी: Developer Console (यूज़र इंटरफ़ेस) में, अनुमतियों से जुड़ी समस्याओं के बारे में आसानी से पता लगाया जा सकता है. अपनी क्लाउड इकाइयों के सभी लिंक देखने के लिए समय निकालें!

7. मॉड्यूल 5: Cloud Build की मदद से सीआई/सीडी सेट अप करना

ba49b033c11be94c.png

सीआई/सीडी पाइपलाइन क्यों?

अब तक, आपने gcloud run deploy को कई बार टाइप कर लिया होगा. ऐसा हो सकता है कि आपने एक ही सवाल का जवाब बार-बार दिया हो.

क्या आपको gcloud run deploy कमांड का इस्तेमाल करके, अपने ऐप्लिकेशन को मैन्युअल तरीके से डिप्लॉय करने में परेशानी हो रही है? क्या यह बेहतर नहीं होगा कि जब भी आप अपनी Git रिपॉज़िटरी में कोई नया बदलाव करें, तो आपका ऐप्लिकेशन अपने-आप डिप्लॉय हो जाए?

CI/CD पाइपलाइन का इस्तेमाल करने के लिए, आपको इन दो चीज़ों की ज़रूरत होगी:

  1. निजी Git रिपॉज़िटरी: अच्छी बात यह है कि आपने दूसरे चरण में, वर्कशॉप रिपॉज़िटरी को अपने GitHub खाते में पहले ही फ़ोर्क कर लिया होगा. अगर ऐसा नहीं है, तो वापस जाएं और उस चरण को पूरा करें. आपकी फ़ोर्क की गई रिपॉज़िटरी ऐसी दिखनी चाहिए: https://github.com/<YOUR_GITHUB_USER>/app-mod-workshop
  2. Cloud Build. यह बेहतरीन और किफ़ायती सेवा, आपको हर चीज़ के लिए बिल्ड ऑटोमेशन कॉन्फ़िगर करने की सुविधा देती है: Terraform, डॉकर वाले ऐप्लिकेशन, ..

इस सेक्शन में, Cloud Build को सेट अप करने के बारे में बताया जाएगा.

Cloud Build का इस्तेमाल शुरू करें!

हम इसके लिए Cloud Build का इस्तेमाल करेंगे:

  • अपने सोर्स को (Dockerfile की मदद से) बनाएं. इसे "बड़ी .zip फ़ाइल" के तौर पर समझें. इसमें इसे बनाने और चलाने के लिए ज़रूरी सभी चीज़ें (आपका "बिल्ड आर्टफ़ैक्ट") शामिल होती हैं.
  • इस आर्टफ़ैक्ट को Artifact Registry (AR) में पुश करें.
  • इसके बाद, "php-amarcord" ऐप्लिकेशन के लिए, AR से Cloud Run पर डिप्लॉयमेंट जारी करें
  • इससे मौजूदा ऐप्लिकेशन का एक नया वर्शन ("बदलाव") बन जाएगा. इसे नए कोड वाली लेयर के तौर पर देखा जा सकता है. अगर पुश सफल होता है, तो हम इसे नए वर्शन पर ट्रैफ़िक को डाइवर्ट करने के लिए कॉन्फ़िगर करेंगे.

यहां मेरे php-amarcord ऐप्लिकेशन के कुछ बिल्ड का उदाहरण दिया गया है:

f30f42d4571ad5e2.png

हम यह सब कैसे करते हैं?

  1. एक बेहतरीन YAML फ़ाइल बनाकर: cloudbuild.yaml
  2. Cloud Build ट्रिगर बनाकर.
  3. Cloud Build यूज़र इंटरफ़ेस (यूआई) के ज़रिए, हमारी github repo से कनेक्ट करके.

ट्रिगर बनाना (और रिपॉज़िटरी कनेक्ट करना)

  • https://console.cloud.google.com/cloud-build/triggers पर जाएं
  • "ट्रिगर बनाएं" पर क्लिक करें.
  • कंपाइल करें:
  • नाम: कोई ऐसा नाम जो काम का हो, जैसे कि on-git-commit-build-php-app
  • इवेंट: पुश टू ब्रांच
  • सोर्स: "नई रिपॉज़िटरी कनेक्ट करें" वैकल्पिक लेख
  • इससे दाईं ओर एक विंडो खुलेगी: "कनेक्ट रिपॉज़िटरी"
  • सोर्स उपलब्ध कराने वाली कंपनी: "Github" (पहली)
  • "जारी रखें"
  • 'पुष्टि करें' बटन पर क्लिक करने से, GitHub पर एक विंडो खुलेगी. इसमें आपको पुष्टि करने के लिए कहा जाएगा. फ़्लो को फ़ॉलो करें और धैर्य रखें. अगर आपके पास कई रिपॉज़िटरी हैं, तो इसमें कुछ समय लग सकता है.
  • "Select repo" अपना खाता/रेपो चुनें और "I understand..." वाले हिस्से पर सही का निशान लगाएं.
  • अगर आपको यह गड़बड़ी मिली है: GitHub ऐप्लिकेशन, आपकी किसी भी रिपॉज़िटरी पर इंस्टॉल नहीं है, तो "Google Cloud Build इंस्टॉल करें" पर क्लिक करें और निर्देशों का पालन करें.
  • 23e0e0f1219afea3.pngकनेक्ट करें पर क्लिक करें
  • bafd904ec07122d2.png
  • बिंगो! आपकी रेपो अब कनेक्ट हो गई है.
  • ट्रिगर वाले हिस्से पर वापस जाएं....
  • कॉन्फ़िगरेशन: अपने-आप पता लगाया गया (*)
  • ऐडवांस: सेवा खाता "[PROJECT_NUMBER]- compute@developer.gserviceaccount.com" चुनें
  • xxxxx आपका प्रोजेक्ट आईडी है
  • डिफ़ॉल्ट कंप्यूट सेवा खाता, लैब के लिए सही है. इसका इस्तेमाल प्रोडक्शन में न करें! ( ज़्यादा जानें).
  • बाकी सभी चीज़ों को पहले जैसा ही रहने दें.
  • "बनाएं" बटन पर क्लिक करें.

(*) यह सबसे आसान तरीका है, क्योंकि यह Dockerfile या cloudbuild.yaml की जांच करता है. हालांकि, cloudbuild.yaml की मदद से, यह तय किया जा सकता है कि किस चरण में क्या करना है.

मेरे पास पावर है!

अब, ट्रिगर तब तक काम नहीं करेगा, जब तक Cloud Build सेवा खाते को अनुमति नहीं दी जाती. सेवा खाता क्या होता है? यह एक "रोबोट" का ईमेल पता है. यह आपकी ओर से कोई टास्क पूरा करता है. इस मामले में, यह Cloud में कुछ बनाता है!).

जब तक आप अपने एसए को यह काम करने की अनुमति नहीं देते, तब तक वह एसए नहीं बना पाएगा और उसे डिप्लॉय नहीं कर पाएगा. अच्छी बात यह है कि इसे करना आसान है!

  • "Cloud Build" > " सेटिंग" पर जाएं.
  • "[PROJECT_NUMBER]- compute@developer.gserviceaccount.com" सेवा खाता
  • इन बॉक्स पर सही का निशान लगाएं:
  • Cloud Run
  • Secret Manager
  • सेवा खाते
  • Cloud Build
  • "पसंदीदा सेवा खाते के तौर पर सेट करें" पर भी सही का निशान लगाएं

8715acca72286a46.png

Cloud Build का YAML कहां है?

हमारा सुझाव है कि आप कुछ समय निकालकर, अपना क्लाउड बिल्ड YAML बनाएं.

हालांकि, अगर आपके पास समय नहीं है या आपको समय नहीं निकालना है, तो इस समाधान फ़ोल्डर में कुछ आइडिया पाएं: .solutions

अब GitHub में बदलाव किया जा सकता है. साथ ही, Cloud Build को अपने हिस्से का काम करते हुए देखा जा सकता है.

Cloud Build को सेट अप करना मुश्किल हो सकता है. इस तारीख तक, आपको कुछ और ईमेल मिल सकते हैं:

  • https://console.cloud.google.com/cloud-build/builds;region=global में लॉग की जांच करना
  • आपकी गड़बड़ी का पता लगाया जा रहा है.
  • कोड में बदलाव करना और git commit / git push को फिर से जारी करना.
  • कभी-कभी गड़बड़ी कोड में नहीं, बल्कि किसी कॉन्फ़िगरेशन में होती है. ऐसे में, यूज़र इंटरफ़ेस (क्लाउड बिल्ड > "ट्रिगर" > चलाएं) से नई बिल्ड जारी की जा सकती है

97acd16980a144ab.png

ध्यान दें कि इस समाधान का इस्तेमाल करने पर, आपको कुछ काम अब भी करना होगा. उदाहरण के लिए, आपको नए बनाए गए dev/prod एंडपॉइंट के लिए ENV वैरिएबल सेट करने होंगे:

3da8723e4ff80c0a.png

आप इसे दो तरीकों से कर सकते हैं:

  • यूज़र इंटरफ़ेस के ज़रिए - एनवायरमेंट वैरिएबल को फिर से सेट करके
  • CLI के ज़रिए, आपके लिए "परफ़ेक्ट" स्क्रिप्ट तैयार करके. इसका उदाहरण यहां देखा जा सकता है: gcloud-run-deploy.sh . आपको कुछ चीज़ों में बदलाव करना होगा. जैसे, एंडपॉइंट और प्रोजेक्ट नंबर. आपको अपना प्रोजेक्ट नंबर, Cloud की खास जानकारी में मिल सकता है.

How do i commit code to github?

इस वर्कशॉप में, आपको git push करने का सबसे सही तरीका नहीं सिखाया जाएगा. हालांकि, अगर आपको कोई समस्या आ रही है और आप Cloud Shell में हैं, तो यहां दो तरीके दिए गए हैं:

  1. CLI. स्थानीय तौर पर कोई एसएसएच कुंजी जोड़ें और git@github.com:YOUR_USER/app-mod-workshop.git (http के बजाय) का इस्तेमाल करके कोई रिमोट जोड़ें
  2. VSCode. अगर Cloud Shell एडिटर का इस्तेमाल किया जा रहा है, तो सोर्स कंट्रोल (ctrl-shift-G) टैब का इस्तेमाल करें. इसके बाद, "बदलाव सिंक करें" पर क्लिक करें और निर्देशों का पालन करें. आपको VS Code में अपने GitHub खाते की पुष्टि करनी होगी. इसके बाद, वहां से पुल/पुश करना आसान हो जाएगा.

f0d53f839c7fa3b6.png

याद रखें कि आपको अन्य फ़ाइलों के बीच में git add clodubuild.yaml करना होगा. ऐसा न करने पर, यह काम नहीं करेगा.

"देव/प्रोडक्शन समानता" [ज़रूरी नहीं]के लिए डीप बनाम शैलो

अगर आपने मॉडल वर्शन को यहां से कॉपी किया है, तो आपके पास DEV और PROD के दो एक जैसे वर्शन होंगे. यह बहुत अच्छा है और ट्वेल्व-फ़ैक्टर ऐप्लिकेशन के नियम 10 के मुताबिक है.

हालांकि, हम एक ही डेटाबेस की ओर इशारा करने वाले ऐप्लिकेशन के लिए, दो अलग-अलग वेब एंडपॉइंट का इस्तेमाल कर रहे हैं. यह वर्कशॉप के लिए काफ़ी है. हालांकि, असल ज़िंदगी में आपको प्रॉपर प्रॉडक्शन एनवायरमेंट बनाने के लिए कुछ समय देना होगा. इसका मतलब है कि आपके पास दो डेटाबेस होने चाहिए. एक डेवलपमेंट के लिए और दूसरा प्रोडक्शन के लिए. साथ ही, यह भी तय करना होगा कि आपको आपदा के बाद डेटा की बहाली / ज़्यादा अपटाइम के लिए, उन्हें कहां रखना है. यह इस वर्कशॉप के दायरे से बाहर है, लेकिन इस पर विचार किया जा सकता है.

अगर आपके पास प्रोडक्शन का "डीप" वर्शन बनाने का समय है, तो कृपया उन सभी संसाधनों को ध्यान में रखें जिन्हें आपको डुप्लीकेट करना है. जैसे:

  • Cloud SQL डेटाबेस (और शायद SQL इंस्टेंस).
  • GCS बकेट
  • Cloud फ़ंक्शन.
  • डेवलपमेंट के दौरान, Gemini 1.5 Flash को मॉडल के तौर पर इस्तेमाल किया जा सकता है. यह सस्ता और तेज़ है. इसके अलावा, Gemini 1.5 Pro को भी इस्तेमाल किया जा सकता है. यह ज़्यादा बेहतर है.

आम तौर पर, जब भी ऐप्लिकेशन में कोई बदलाव किया जाता है, तो यह सोच-विचार करें कि क्या प्रोडक्शन में भी यही वैल्यू होनी चाहिए या नहीं? अगर ऐसा नहीं होता है, तो फिर से कोशिश करें. हालांकि, Terraform का इस्तेमाल करके इसे आसानी से किया जा सकता है. इसमें अपने संसाधनों के लिए, एनवायरमेंट (-dev, -prod) को सफ़िक्स के तौर पर जोड़ा जा सकता है.

8. मॉड्यूल 6: Google Cloud Storage पर माइग्रेट करना

a680e0f287dd2dfb.png

डिवाइस का स्टोरेज

dc3a4b8ea92aaef6.png

फ़िलहाल, ऐप्लिकेशन की स्थिति को डॉकर कंटेनर में सेव किया जाता है. अगर मशीन खराब हो जाती है, ऐप्लिकेशन क्रैश हो जाता है या आपने नया बदलाव सबमिट किया है, तो नया बदलाव शेड्यूल किया जाएगा. इसमें नया, खाली स्टोरेज होगा: 🙈

हम इस समस्या को कैसे ठीक करें? इसके लिए कई तरीके हैं.

  1. इमेज को डेटाबेस में सेव करें. मैंने अपने पिछले PHP ऐप्लिकेशन के साथ ऐसा ही किया था. यह सबसे आसान तरीका है, क्योंकि इससे ऐप्लिकेशन में कोई जटिलता नहीं आती. हालांकि, इससे आपके डेटाबेस में लोड और इंतज़ार का समय बढ़ जाता है!
  2. अपने Cloud Run ऐप्लिकेशन को स्टोरेज के हिसाब से बेहतर समाधान पर माइग्रेट करें: GCE + परसिस्टेंट डिस्क? क्या यह GKE + Storage है? ध्यान दें: कंट्रोल बढ़ने से, काम करने की तेज़ी कम हो जाती है.
  3. GCS पर जाएं. Google Cloud Storage, Google Cloud के सभी प्रॉडक्ट के लिए सबसे बेहतरीन स्टोरेज उपलब्ध कराता है. साथ ही, यह क्लाउड के लिए सबसे सही समाधान है. हालांकि, इसके लिए हमें PHP लाइब्रेरी का इस्तेमाल करना होगा. क्या हमारे पास GCS के लिए PHP 5.7 लाइब्रेरी हैं? क्या PHP 5.7, Composer के साथ काम करता है? ऐसा लगता है कि Composer के साथ काम करने वाला PHP 5.3.2 सबसे पुराना वर्शन है.
  4. क्या डॉकर साइडकार का इस्तेमाल किया जा सकता है?
  5. इसके अलावा, GCS Cloud Run वॉल्यूम माउंट का इस्तेमाल करें. यह बहुत अच्छा लग रहा है.

🤔 स्टोरेज माइग्रेट करें (ओपन एंडेड)

[ओपन एंडेड] इस एक्सरसाइज़ में, हम चाहते हैं कि आप अपनी इमेज को इस तरह से ट्रांसफ़र करने का कोई तरीका ढूंढें कि वे किसी तरह से सेव रहें.

स्वीकार्यता की जांच

मुझे आपको इसका समाधान नहीं बताना है, लेकिन मुझे यह चाहिए:

  1. newpic.jpg अपलोड करें. यह आपको ऐप्लिकेशन में दिखता है.
  2. ऐप्लिकेशन को नए वर्शन पर अपग्रेड किया जाता है.
  3. newpic.jpg अब भी मौजूद है और दिख रहा है.

💡 संभावित समाधान (GCS Cloud Run वॉल्यूम माउंट)

यह एक बहुत ही बेहतरीन समाधान है. इससे हमें फ़ाइल अपलोड करने की सुविधा मिलती है. साथ ही, हमें कोड में कोई बदलाव नहीं करना पड़ता. हालांकि, इमेज का ब्यौरा दिखाने के लिए कोड में बदलाव करना पड़ता है, लेकिन यह बहुत आसान है और सिर्फ़ इमेज को बेहतर दिखाने के लिए किया जाता है.

इससे आपको Cloud Run से GCS में कोई फ़ोल्डर माउंट करने की अनुमति मिलनी चाहिए. इसलिए:

  1. GCS पर अपलोड की गई सभी फ़ाइलें, आपके ऐप्लिकेशन में दिखेंगी.
  2. आपके ऐप्लिकेशन पर अपलोड किए गए सभी आइटम, असल में GCS पर अपलोड किए जाएंगे
  3. GCS में अपलोड किए गए ऑब्जेक्ट के साथ मैजिक होगा (अध्याय 7).

ध्यान दें. कृपया FUSE के फ़ाइन प्रिंट को पढ़ें. अगर परफ़ॉर्मेंस से जुड़ी कोई समस्या है, तो यह ठीक नहीं है.

GCS बकेट बनाना

GCS, Google Cloud की स्टोरेज सेवा है. यह कई बार आज़माया जा चुका है. साथ ही, इसका इस्तेमाल हर उस GCP सेवा के लिए किया जाता है जिसे स्टोरेज की ज़रूरत होती है.

ध्यान दें कि Cloud Shell, PROJECT_ID को GOOGLE_CLOUD_PROJECT के तौर पर एक्सपोर्ट करता है:

$ export PROJECT_ID=$GOOGLE_CLOUD_PROJECT

#!/bin/bash

set -euo pipefail

# Your Cloud Run Service Name, eg php-amarcord-dev
SERVICE_NAME='php-amarcord-dev'
BUCKET="${PROJECT_ID}-public-images"
GS_BUCKET="gs://${BUCKET}"

# Create bucket
gsutil mb -l "$GCP_REGION" -p "$PROJECT_ID" "$GS_BUCKET/"

# Copy original pictures there - better if you add an image of YOURS before.
gsutil cp ./uploads/*.png "$GS_BUCKET/"

Cloud Run को कॉन्फ़िगर करें, ताकि वह बकेट को /uploads/ फ़ोल्डर में माउंट कर सके

अब बात करते हैं, सबसे अहम हिस्से की. हम एक वॉल्यूम php_uploads बनाते हैं और Cloud Run को MOUNT_PATH पर FUSE माउंट करने का निर्देश देते हैं (/var/www/html/uploads/ जैसा कुछ):

#!/bin/bash

set -euo pipefail

# .. keep variables from previous script..

# Uploads folder within your docker container.
# Tweak it for your app code.
MOUNT_PATH='/var/www/html/uploads/'

# Inject a volume mount to your GCS bucket in the right folder.
gcloud --project "$PROJECT_ID" beta run services update "$SERVICE_NAME" \
    --region $GCP_REGION \
    --execution-environment gen2 \
    --add-volume=name=php_uploads,type=cloud-storage,bucket="$BUCKET"  \
    --add-volume-mount=volume=php_uploads,mount-path="$MOUNT_PATH"

अब इस चरण को उन सभी एंडपॉइंट के लिए दोहराएं जिन्हें आपको Cloud Storage पर ले जाना है.

यूज़र इंटरफ़ेस (यूआई) से भी ऐसा किया जा सकता है

  1. "वॉल्यूम" टैब में जाकर, अपने बकेट की ओर इशारा करने वाले वॉल्यूम माउंट बनाएं. इनका टाइप "Cloud Storage बकेट" होना चाहिए. उदाहरण के लिए, "php_uploads" नाम वाला वॉल्यूम माउंट.
  2. कंटेनर > वॉल्यूम माउंट में जाकर, अभी बनाए गए वॉल्यूम को उस वॉल्यूम पॉइंट पर माउंट करें जिसका अनुरोध आपके ऐप्लिकेशन ने किया है. यह डॉकरफ़ाइल पर निर्भर करता है, लेकिन यह var/www/html/uploads/ जैसा दिख सकता है .

अगर यह तरीका काम करता है, तो Cloud Run के नए वर्शन में बदलाव करने पर आपको कुछ ऐसा दिखेगा:

6c2bb98fc1b0e077.png

अब नए ऐप्लिकेशन को टेस्ट करें. इसके लिए, /upload.php एंडपॉइंट पर एक नई इमेज अपलोड करें.

PHP की एक भी लाइन लिखे बिना, GCS पर इमेज आसानी से दिखनी चाहिए:

70032b216afee2d7.png

यह क्या हुआ?

कोई बहुत ही शानदार चीज़ हुई है.

पुराना ऐप्लिकेशन, पुराने कोड के साथ अब भी काम कर रहा है. नए और आधुनिक स्टैक की मदद से, हम अपने ऐप्लिकेशन में मौजूद सभी इमेज/पिक्चर को स्टेटफ़ुल क्लाउड बकेट में आसानी से सेव कर सकते हैं. अब क्रिएटर्स तरक्की की नई ऊंचाइयों को छू रहे हैं. वे अब:

  • क्या आपको "खतरनाक" या "नग्नता" वाली इमेज मिलने पर, हर बार ईमेल सूचना चाहिए? PHP कोड में बदलाव किए बिना भी ऐसा किया जा सकता है.
  • क्या आपको हर बार इमेज मिलने पर, Gemini के मल्टीमॉडल मॉडल का इस्तेमाल करके उसके बारे में जानकारी देनी है और उस जानकारी के साथ डीबी को अपलोड करना है? PHP कोड में बदलाव किए बिना भी ऐसा किया जा सकता है. क्या तुम्हें मुझ पर भरोसा नहीं है? सातवें चैप्टर में पढ़ना जारी रखें.

हमने यहां एक बड़ा मौका हासिल किया है.

9. मॉड्यूल 7: Google Gemini की मदद से अपने ऐप्लिकेशन को बेहतर बनाना

c00425f0ad83b32c.png

अब आपके पास क्लाउड स्टोरेज के साथ, मॉडर्न और नया PHP ऐप्लिकेशन (जैसे कि 2024 Fiat 126) है.

इसका इस्तेमाल किस तरह किया जा सकता है?

ज़रूरी शर्तें

पिछले चैप्टर में, मॉडल सॉल्यूशन की मदद से हमने GCS पर इमेज /uploads/ को माउंट किया था. इससे, इमेज स्टोरेज से ऐप्लिकेशन लॉजिक को वास्तविक रूप से अलग किया जा सका.

इस कसरत के लिए, आपको ये काम करने होंगे:

  • छठे चैप्टर (स्टोरेज) में दी गई कसरत पूरी की हो.
  • आपके पास इमेज अपलोड करने के लिए GCS बकेट हो. इसमें लोग आपके ऐप्लिकेशन पर फ़ोटो अपलोड करते हैं और वे फ़ोटो आपकी बकेट में दिखती हैं.

Python में Cloud फ़ंक्शन सेट अप करना

क्या आपने कभी सोचा है कि इवेंट-ड्रिवन ऐप्लिकेशन को कैसे लागू किया जाता है? जैसे:

  • जब <event> होता है, तब => ईमेल भेजें
  • जब <event> होता है => अगर <condition> सही है, तो डेटाबेस को अपडेट करें.

इवेंट कुछ भी हो सकता है. जैसे, BigQuery में उपलब्ध नया रिकॉर्ड, GCS में किसी फ़ोल्डर में बदला गया नया ऑब्जेक्ट या Pub/Sub में किसी कतार में इंतज़ार कर रहा नया मैसेज.

Google Cloud, इस लक्ष्य को हासिल करने के लिए कई तरीकों का इस्तेमाल करता है. खास तौर पर:

  • EventArc. GCS इवेंट पाने का तरीका जानें. DAG बनाने और क्लाउड में if-then-else के आधार पर कार्रवाइयों को व्यवस्थित करने के लिए बेहतरीन टूल.
  • Cloud Scheduler. उदाहरण के लिए, क्लाउड में आधी रात को क्रॉन जॉब के लिए यह बहुत अच्छा है.
  • Cloud Workflows. इवेंट आर्क की तरह ही, यह सुविधा आपको
  • Cloud Run फ़ंक्शन (इसे lambdas के नाम से भी जाना जाता है).
  • Cloud Composer. यह Apache Airflow का Google वर्शन है. यह DAG के लिए भी बहुत अच्छा है.

इस अभ्यास में, हम Cloud Functions के बारे में जानेंगे, ताकि हमें शानदार नतीजे मिल सकें. साथ ही, हम आपको कुछ वैकल्पिक एक्सरसाइज़ भी देंगे.

ध्यान दें कि सैंपल कोड, .solutions/ में दिया गया है

Cloud फ़ंक्शन (🐍 python) सेट अप करना

हम एक बहुत ही महत्वाकांक्षी GCF बनाने की कोशिश कर रहे हैं.

  1. जब GCS पर कोई नई इमेज बनाई जाती है.. (ऐसा हो सकता है कि किसी ने इसे ऐप्लिकेशन पर अपलोड किया हो, लेकिन इसके अलावा और भी वजहें हो सकती हैं)
  2. .. Gemini को कॉल करके, इमेज के बारे में जानकारी पाएं और इमेज के बारे में टेक्स्ट के तौर पर जानकारी पाएं .. (MIME की जांच करना और यह पक्का करना अच्छा होगा कि यह इमेज है, न कि PDF, MP3 या टेक्स्ट)
  3. .. और इस जानकारी के साथ डेटाबेस को अपडेट करें. (इसके लिए, images टेबल में description कॉलम जोड़ने के लिए, DB को पैच करना पड़ सकता है).

description इमेज में जोड़ने के लिए डीबी को पैच करें

  1. Cloud SQL Studio खोलें:

b92b07c4cba658ef.png

  1. Images DB के लिए अपना उपयोगकर्ता नाम और पासवर्ड डालें
  2. इस एसक्यूएल को इंजेक्ट करें. इससे इमेज के ब्यौरे के लिए एक कॉलम जुड़ जाता है:

ALTER TABLE images ADD COLUMN description TEXT;

3691aced78a6389.png

और बिंगो! यह सुविधा काम कर रही है या नहीं, यह देखने के लिए अभी आज़माएं:

SELECT * FROM images;

आपको जानकारी वाला नया कॉलम दिखेगा:

bed69d6ad0263114.png

Gemini f(x) लिखें

ध्यान दें. इस फ़ंक्शन को Gemini Code Assist की मदद से बनाया गया था.

ध्यान दें. इस फ़ंक्शन को बनाते समय, आपको IAM की अनुमति से जुड़ी गड़बड़ियां दिख सकती हैं. इनमें से कुछ गड़बड़ियों के बारे में, "संभावित गड़बड़ियां" पैराग्राफ़ में बताया गया है.

  1. एपीआई चालू करना
  2. https://console.cloud.google.com/functions/list पर जाएं
  3. "फ़ंक्शन बनाएं" पर क्लिक करें
  4. एपीआई विज़र्ड से एपीआई चालू करें:

d22b82658cfd4c48.png

जीसीएफ़ को यूज़र इंटरफ़ेस (यूआई) या कमांड लाइन से बनाया जा सकता है. यहाँ हम कमांड लाइन का इस्तेमाल करेंगे.

संभावित कोड .solutions/ में देखा जा सकता है

  1. अपना कोड होस्ट करने के लिए एक फ़ोल्डर बनाएं. उदाहरण के लिए, "gcf/". फ़ोल्डर में जाएं.
  2. requirements.txt फ़ाइल बनाने के लिए:
google-cloud-storage
google-cloud-aiplatform
pymysql
  1. Python फ़ंक्शन बनाएं. कोड का नमूना यहां दिया गया है: gcf/main.py.
#!/usr/bin/env python

"""Complete this"""

from google.cloud import storage
from google.cloud import aiplatform
import vertexai
from vertexai.generative_models import GenerativeModel, Part
import os
import pymysql
import pymysql.cursors

# Replace with your project ID
PROJECT_ID = "your-project-id"
GEMINI_MODEL = "gemini-1.5-pro-002"
DEFAULT_PROMPT = "Generate a caption for this image: "

def gemini_describe_image_from_gcs(gcs_url, image_prompt=DEFAULT_PROMPT):
    pass

def update_db_with_description(image_filename, caption, db_user, db_pass, db_host, db_name):
    pass

def generate_caption(event, context):
    """
    Cloud Function triggered by a GCS event.
    Args:
        event (dict): The dictionary with data specific to this type of event.
        context (google.cloud.functions.Context): The context parameter contains
                                                event metadata such as event ID
                                                and timestamp.
    """
    pass
  1. फ़ंक्शन को पुश करें. इस तरह की स्क्रिप्ट का इस्तेमाल किया जा सकता है: gcf/push-to-gcf.sh.

ध्यान दें 1. पक्का करें कि ईएनवी को सही वैल्यू के साथ सोर्स किया गया हो या उन्हें सबसे ऊपर जोड़ा गया हो (GS_BUCKET=blah, ..):

नोट 2. इससे सभी लोकल कोड (.) पुश हो जाएंगे. इसलिए, पक्का करें कि आपने अपने कोड को किसी फ़ोल्डर में रखा हो. साथ ही, बड़ी लाइब्रेरी को पुश करने से बचने के लिए, .gcloudignore का इस्तेमाल सही तरीके से किया हो. ( उदाहरण).

#!/bin/bash

set -euo pipefail

# add your logic here, for instance:
source .env || exit 2 

echo "Pushing ☁️ f(x)☁ to 🪣 $GS_BUCKET, along with DB config.. (DB_PASS=$DB_PASS)"

gcloud --project "$PROJECT_ID" functions deploy php_amarcord_generate_caption \
    --runtime python310 \
    --region "$GCP_REGION" \
    --trigger-event google.cloud.storage.object.v1.finalized \
    --trigger-resource "$BUCKET" \
    --set-env-vars "DB_HOST=$DB_HOST,DB_NAME=$DB_NAME,DB_PASS=$DB_PASS,DB_USER=$DB_USER" \
    --source . \
    --entry-point generate_caption \
    --gen2

ध्यान दें: इस उदाहरण में, generate_caption को लागू किया गया तरीका माना जाएगा. साथ ही, Cloud Functions, GCS इवेंट को इससे जुड़ी सभी ज़रूरी जानकारी (बकेट का नाम, ऑब्जेक्ट का नाम वगैरह) के साथ पास करेगा. इस इवेंट के Python डिक्शनरी को डीबग करने के लिए कुछ समय लें.

फ़ंक्शन की जांच करना

यूनिट टेस्ट

फ़ंक्शन में कई गतिविधियां शामिल हैं. आपको सभी सिंगल वैल्यू की जांच करनी पड़ सकती है.

इसका एक उदाहरण gcf/test.py में दिया गया है.

Cloud Functions का यूज़र इंटरफ़ेस (यूआई)

साथ ही, यूज़र इंटरफ़ेस (यूआई) पर अपने फ़ंक्शन को एक्सप्लोर करने के लिए कुछ समय निकालें. हर टैब को एक्सप्लोर करना ज़रूरी है. खास तौर पर, Source (मेरा पसंदीदा), Variables, Trigger, और Logs. गड़बड़ियों को ठीक करने के लिए, आपको Logs टैब में काफ़ी समय बिताना होगा. इस पेज के सबसे नीचे, संभावित गड़बड़ियां भी देखें. साथ ही, Permissions को भी ज़रूर देखें.

cf3ded30d532a2c7.png

E2E टेस्ट

अब इस फ़ंक्शन को मैन्युअल तरीके से टेस्ट करने का समय आ गया है!

  1. अपने ऐप्लिकेशन पर जाएं और लॉग इन करें
  2. कोई फ़ोटो अपलोड करें. ध्यान रखें कि फ़ोटो का साइज़ बहुत बड़ा न हो. हमने देखा है कि बड़ी इमेज अपलोड करने में समस्याएं आती हैं
  3. यूज़र इंटरफ़ेस (यूआई) पर जाकर देखें कि फ़ोटो अपलोड हो गई है या नहीं.
  4. Cloud SQL Studio में जाकर देखें कि ब्यौरा अपडेट हो गया है. लॉग इन करें और यह क्वेरी चलाएं: SELECT * FROM images.

43a680b12dbbdda0.png

और यह काम करता है! हम उस ब्यौरे को दिखाने के लिए, फ़्रंटएंड को भी अपडेट कर सकते हैं.

PHP को अपडेट करें, ताकि [ज़रूरी नहीं]एट्रिब्यूट की वैल्यू दिख सके

हमने यह साबित कर दिया है कि ऐप्लिकेशन काम करता है. हालांकि, यह अच्छा होगा कि उपयोगकर्ता भी उस ब्यौरे को देख सकें.

index.php में जानकारी जोड़ने के लिए, हमें PHP एक्सपर्ट होने की ज़रूरत नहीं है. इस कोड से यह काम होना चाहिए (हां, इसे Gemini ने मेरे लिए भी लिखा है!):

<?php if (!empty($image['description'])): ?>
    <p class="font-bold">Gemini Caption:</p>
    <p class="italic"><?php echo $image['description']; ?></p>
<?php endif; ?>

इस कोड को अपनी पसंद के हिसाब से foreach के अंदर रखें.

अगले चरणों में, हमें Gemini Code Assist की मदद से तैयार किया गया बेहतर यूज़र इंटरफ़ेस (यूआई) भी दिखता है. यह कुछ इस तरह दिख सकता है:

fdc12de0c88c4464.png

नतीजे

आपको GCS पर नए ऑब्जेक्ट के लिए ट्रिगर की गई Cloud Function मिली है. यह इमेज के कॉन्टेंट को एनोटेट कर सकती है. जैसे, कोई व्यक्ति कर सकता है. साथ ही, यह डीबी को अपने-आप अपडेट कर सकती है. वाह!

आगे क्या करना है? इन दोनों सुविधाओं को पाने के लिए, इसी तर्क का इस्तेमाल किया जा सकता है.

[ज़रूरी नहीं] Cloud Functions के बारे में ज़्यादा जानकारी जोड़ें [ओपन एंडेड]

कुछ और सुविधाएं भी उपलब्ध हैं.

📩 ईमेल ट्रिगर

ईमेल ट्रिगर, जो आपको हर बार ईमेल भेजता है, जब कोई व्यक्ति फ़ोटो भेजता है.

  • क्या आपको बहुत ज़्यादा सूचनाएं मिलती हैं? एक और शर्त जोड़ें: कोई बड़ी तस्वीर या ऐसी तस्वीर जिसमें Gemini के कॉन्टेंट में "नग्न/नग्नता/हिंसक" शब्द शामिल हों.
  • इसके लिए, EventArc देखें.

🚫 आपत्तिजनक फ़ोटो की अपने-आप समीक्षा होने की सुविधा

फ़िलहाल, कोई व्यक्ति "आपत्तिजनक" के तौर पर इमेज को फ़्लैग कर रहा है. क्या Gemini को स्पेस को मॉडरेट करने और मुश्किल काम करने के लिए कहा जा सकता है? आपत्तिजनक ट्रिगर कॉन्टेंट को फ़्लैग करने के लिए, एक टेस्ट जोड़ें. साथ ही, डेटाबेस को अपडेट करें. जैसा कि हमने पिछले फ़ंक्शन में सीखा था. इसका मतलब है कि पिछले फ़ंक्शन को लेना, प्रॉम्प्ट को बदलना, और जवाब के आधार पर डीबी को अपडेट करना.

चेतावनी. जनरेटिव एआई से मिलने वाले जवाबों का अनुमान नहीं लगाया जा सकता. पक्का करें कि Gemini से मिलने वाला "क्रिएटिव आउटपुट" "ऑन रेल्स" हो. आपको कोई ऐसा जवाब चाहिए जो एक ही हो. जैसे, 0 से 1 के बीच का कॉन्फ़िडेंस स्कोर, JSON वगैरह. इसे कई तरीकों से हासिल किया जा सकता है. उदाहरण के लिए: * Python लाइब्रेरी pydantic, langchain वगैरह का इस्तेमाल करके. * Gemini के स्ट्रक्चर्ड आउटपुट का इस्तेमाल करके.

सलाह. आपके पास कई फ़ंक्शन हो सकते हैं या एक ऐसा प्रॉम्प्ट हो सकता है जो JSON फ़ॉर्मैट में जवाब देने के लिए कहता हो. यह "Gemini से स्ट्रक्चर्ड आउटपुट पाने की सुविधा" के साथ बहुत अच्छी तरह से काम करता है. जैसे:

इसे जनरेट करने के लिए प्रॉम्प्ट क्या होगा?

{
    "description": "This is the picture of an arrosticino",
    "suitable": TRUE
}

आपको प्रॉम्प्ट में अतिरिक्त फ़ील्ड जोड़ने का विकल्प मिलता है. इससे आपको इस तरह की अहम जानकारी मिल सकती है: क्या इसमें कुछ अच्छा है? क्या यह गलत है? क्या आपको इस जगह के बारे में पता है? क्या कोई टेक्स्ट मौजूद है (ओसीआर की सुविधा का इस्तेमाल करना अब पहले से कहीं ज़्यादा आसान हो गया है):

  • goods: "यह स्वादिष्ट खाना लग रहा है"
  • bads: "ऐसा लगता है कि यह सेहत के लिए अच्छा खाना नहीं है"
  • OCR: "Da consumare preferibilmente prima del 10 Novembre 2024"
  • location: "पेस्कारा, लुंगोमारे"

आम तौर पर, N नतीजों के लिए N फ़ंक्शन का इस्तेमाल करना बेहतर होता है. हालांकि, एक ऐसा फ़ंक्शन बनाना जो 10 काम करता हो, बहुत फ़ायदेमंद होता है. इसका तरीका जानने के लिए, Riccardo का यह लेख पढ़ें.

संभावित गड़बड़ियां (ज़्यादातर IAM / अनुमतियों से जुड़ी गड़बड़ियां)

इस समाधान को बनाते समय, मुझे IAM की अनुमतियों से जुड़ी कुछ समस्याएं आईं. मैं उन्हें यहां जोड़ूंगा, ताकि आपको इन गड़बड़ियों के बारे में पता चल सके और इन्हें ठीक करने के कुछ आइडिया मिल सकें.

गड़बड़ी: सेवा खाते के लिए ज़रूरी अनुमतियां नहीं हैं

  1. ध्यान दें कि GCS बकेट को सुनने वाले GCF फ़ंक्शन को डिप्लॉय करने के लिए, आपको उस सेवा खाते के लिए सही अनुमतियां सेट अप करनी होंगी जिसका इस्तेमाल इस काम के लिए किया जा रहा है. जैसा कि इस इमेज में दिखाया गया है:

22f51012fa6b4a24.png

आपको EventArc API भी चालू करने पड़ सकते हैं. इन्हें पूरी तरह से उपलब्ध होने में कुछ मिनट लगते हैं.

गड़बड़ी: Cloud Run invoker मौजूद नहीं है

  1. GCF की अनुमतियों के लिए यूज़र इंटरफ़ेस (यूआई) से मिली एक और टिप्पणी यह है ( Cloud Run Invoker की भूमिका):

be72e17294f2d3f3.png

इस गड़बड़ी को ठीक करने के लिए, इमेज में दिए गए निर्देश को चलाएं. यह निर्देश, fix-permissions.sh के जैसा है

इस समस्या के बारे में यहां बताया गया है: https://cloud.google.com/functions/docs/securing/authenticating

गड़बड़ी: मेमोरी की सीमा पार हो गई है

पहली बार इसे चलाने पर, मेरे लॉग में यह मैसेज दिख सकता है: "‘Memory limit of 244 MiB exceeded with 270 MiB used. मेमोरी की सीमा बढ़ाएं. इसके लिए, https://cloud.google.com/functions/docs/configuring/memory'" पर जाएं. अपने GCF में फिर से रैम जोड़ें. यूज़र इंटरफ़ेस (यूआई) में ऐसा करना बहुत आसान है. यहां एक संभावित समस्या दी गई है:

bed69d6ad0263114.png

इसके अलावा, MEM/CPU को बढ़ाने के लिए, Cloud Run डिप्लॉयमेंट स्क्रिप्ट को भी ठीक किया जा सकता है. इसमें थोड़ा ज़्यादा समय लगता है.

गड़बड़ी: PubSub पब्लिश किया गया

GCF v1 की मदद से ट्रिगर बनाते समय, यह गड़बड़ी एक बार हुई:

e5c338ee35ad4c24.png

इस समस्या को ठीक करना आसान है. इसके लिए, IAM पर जाएं और अपने सेवा खाते को "Pub/Sub पब्लिशर" की भूमिका दें.

गड़बड़ी: Vertex AI का इस्तेमाल नहीं किया गया है

अगर आपको यह गड़बड़ी मिलती है, तो:

अनुमति नहीं दी गई: 403 Vertex AI API को YOUR_PROJECT में पहले कभी इस्तेमाल नहीं किया गया है या यह बंद है. इसे चालू करने के लिए, https://console.developers.google.com/apis/api/aiplatform.googleapis.com/overview?project=YOR_PROJECT पर जाएं

आपको सिर्फ़ Vertex AI API चालू करने होंगे. ज़रूरी सभी एपीआई चालू करने का सबसे आसान तरीका यह है:

  1. https://console.cloud.google.com/vertex-ai
  2. "सुझाए गए सभी एपीआई चालू करें" पर क्लिक करें.

492f05ac377f3630.png

गड़बड़ी: EventArc ट्रिगर नहीं मिला.

अगर आपको यह मैसेज मिलता है, तो कृपया फ़ंक्शन को फिर से डिप्लॉय करें.

8ec4fc11833d7420.png

गड़बड़ी: 400 सर्विस एजेंट उपलब्ध कराए जा रहे हैं

400 सर्विस एजेंट उपलब्ध कराए जा रहे हैं ( https://cloud.google.com/vertex-ai/docs/general/access-control#service-agents ). Cloud Storage में मौजूद फ़ाइल को पढ़ने के लिए, सर्विस एजेंट ज़रूरी होते हैं. इसलिए, कृपया कुछ मिनट बाद फिर से कोशिश करें.

अगर ऐसा होता है, तो कुछ समय इंतज़ार करें या किसी Googler से पूछें.

10. मॉड्यूल 8: उपलब्धता के एसएलओ बनाना

इस चैप्टर में, हम यह हासिल करने की कोशिश करते हैं:

  1. एसएलआई बनाना
  2. एसएलआई के आधार पर एसएलओ बनाना
  3. एसएलओ के आधार पर सूचनाएं बनाना

f63426182c052123.png

यह लेखक का पसंदीदा विषय है, क्योंकि रिकार्डो Google Cloud के एसआरई / DevOps विभाग में काम करते हैं.

(ओपन-एंडेड) इस ऐप्लिकेशन के लिए एसएलआई और एसएलओ बनाएं

अगर आपको यह पता ही नहीं चल पा रहा है कि कोई ऐप्लिकेशन कब काम नहीं कर रहा है, तो वह ऐप्लिकेशन कितना अच्छा है?

एसएलओ क्या होता है?

ओह! Google ने एसएलओ बनाए हैं! इसके बारे में ज़्यादा जानने के लिए, हम आपको यह सुझाव देते हैं:

पहला चरण: उपलब्धता से जुड़ा एसएलआई/एसएलओ बनाना

आइए, उपलब्धता के एसएलओ से शुरुआत करते हैं. यह सबसे आसान है और शायद सबसे ज़रूरी चीज़ है जिसे आपको मेज़र करना है.

अच्छी बात यह है कि Cloud Run में, पहले से ही एसएलओ की सुविधा उपलब्ध है. इसके लिए, Istio का इस्तेमाल किया जाता है.

ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने के बाद, इसे आसानी से किया जा सकता है. इसमें 30 सेकंड लगते हैं.

  • Cloud Run पेज पर जाएं.
  • अपने ऐप्लिकेशन पर क्लिक करें/उसे चुनें.
  • SLOs टैब चुनें.
  • "+ एसएलओ बनाएं" पर क्लिक करें.
  • उपलब्धता, अनुरोध पर आधारित
  • जारी रखें
  • कैलेंडर के हिसाब से हर महीने / 99%.
  • "एसएलओ बनाएं" पर क्लिक करें.

e471c7ebdc56cdf6.png

दूसरा चरण: इस एसएलओ पर सूचना पाने की सुविधा सेट अप करना

हमारा सुझाव है कि आप दो सूचनाएं बनाएं:

  1. एक कम बर्नरेट ("स्लोबर्न") वाला, जो आपको ईमेल से सूचना देगा (कम प्राथमिकता वाले टिकट जैसा).
  2. एक ऐसा विकल्प जिसमें बैटरी तेज़ी से खत्म होती है ("फ़ास्टबर्न"). इससे आपको एसएमएस के ज़रिए सूचना मिलती है (ज़्यादा प्राथमिकता वाले टिकट / पेजर की तरह काम करता है)

अपने पुराने SLO tab पर जाएं.

यह दो बार करें:

314bfd6b9ef0a260.png

  • "एसएलओ सूचना बनाएं" पर क्लिक करें. यह दाईं ओर मौजूद, प्लस के निशान वाला 🔔 बटन है
  • लुकबैक अवधि, खर्च की दर का थ्रेशोल्ड:
  • [FAST]. पहली बार: 60 मिनट / 10 बार
  • [धीमी]. दूसरा: 720 मिनट / 2 बार
  • सूचना का चैनल: सूचना के चैनल मैनेज करें पर क्लिक करें
  • सबसे पहले, "ईमेल" -> नया जोड़ें -> ..
  • दूसरा, "एसएमएस" -> नया जोड़ें -> फ़ोन पर पुष्टि करें.
  • सलाह: मुझे नाम में इमोजी इस्तेमाल करना पसंद है! यह डेमो के लिए मज़ेदार है.
  • इसके बाद, सबसे ऊपर दाईं ओर मौजूद बड़े X पर क्लिक करें.
  • पहले फ़ोन नंबर (तेज़ी से) और फिर ईमेल पता (धीरे-धीरे) चुनें.
  • कुछ सैंपल दस्तावेज़ जोड़ें. जैसे:
  • [PHP Amarcord] Riccardo told me to type sudo reboot or to check documentation in http://example.com/playbooks/1.php but I guess he was joking.

बिंगो!

आखिरी नतीजा

जब आपके पास एक चालू एसएलओ और उपलब्धता के लिए दो सूचनाएं होंगी, तब हम मान लेंगे कि यह अभ्यास पूरा हो गया है. साथ ही, यह भी ज़रूरी है कि आपको ईमेल और फ़ोन पर सूचनाएं मिल रही हों.

अगर आपको लेटेंसी जोड़नी है, तो ऐसा किया जा सकता है. हम आपको ऐसा करने का सुझाव देते हैं. इसके अलावा, कोई और ज़्यादा जटिल शर्त भी जोड़ी जा सकती है. देरी के लिए, वह समय चुनें जो आपको सही लगे. अगर आपको कोई विकल्प समझ नहीं आ रहा है, तो 200 मि॰से॰ चुनें.

11. अगले चरण

आपने सभी टास्क पूरे कर लिए हैं, तो फिर क्या बाकी है?

कुछ ज़रूरी बातें:

Gemini के साथ गेम खेलना

Gemini का इस्तेमाल दो वर्शन में किया जा सकता है:

  1. Vertex AI. "Enterprise way" को आपके GCP के साथ जोड़ा गया है. इसके बारे में हमने सातवें चैप्टर (GCF+Gemini) में बताया है. सभी पुष्टि अपने-आप हो जाती है और सेवाएं आपस में आसानी से कनेक्ट हो जाती हैं.
  2. Google का एआई. "उपयोगकर्ता के हिसाब से" तरीका. आपको Gemini API का पासकोड यहां से मिलता है. इसके बाद, छोटी-छोटी स्क्रिप्ट बनाना शुरू करें. इन्हें आपके पास मौजूद किसी भी वर्कलोड (मालिकाना हक वाला काम, अन्य क्लाउड, लोकलहोस्ट वगैरह) से जोड़ा जा सकता है. आपको बस अपना एपीआई पासकोड बदलना है और कोड अपने-आप काम करने लगेगा.

हमारा सुझाव है कि आप अपने पालतू प्रोजेक्ट के साथ (2) को एक्सप्लोर करें.

यूज़र इंटरफ़ेस (यूआई) लिफ़्टिंग

मुझे यूज़र इंटरफ़ेस (यूआई) के बारे में ज़्यादा जानकारी नहीं है. लेकिन Gemini ऐसा कर सकता है! सिर्फ़ एक PHP पेज लें और कुछ ऐसा कहें:

I have a VERY old PHP application. I want to touch it as little as possible. Can you help me:

1. add some nice CSS to it, a single static include for tailwind or similar, whatever you prefer
2. Transform the image print with description into cards, which fit 4 per line in the canvas?

Here's the code:

-----------------------------------
[Paste your PHP page, for instance index.php - mind the token limit!]

इसे आसानी से पांच मिनट से भी कम समय में पाया जा सकता है. इसके लिए, आपको सिर्फ़ एक Cloud Build की ज़रूरत होगी! :)

Gemini से मिला जवाब एकदम सही था (इसका मतलब है कि मुझे उसमें कोई बदलाव नहीं करना पड़ा):

8a3d5fe37ec40bf8.png

यहां लेखक के निजी ऐप्लिकेशन में नया लेआउट दिखाया गया है:

81620eb90ae3229a.png

ध्यान दें: कोड को इमेज के तौर पर चिपकाया गया है, क्योंकि हम आपको कोड लेने के लिए बढ़ावा नहीं देना चाहते. इसके बजाय, हम चाहते हैं कि Gemini आपके लिए कोड लिखे. इसके लिए, आपको क्रिएटिव यूज़र इंटरफ़ेस (यूआई)/फ़्रंटएंड से जुड़ी अपनी शर्तें बतानी होंगी. हमारा भरोसा करें, इसके बाद आपको बहुत छोटे-मोटे बदलाव करने होंगे.

सुरक्षा

इस चार घंटे की वर्कशॉप में, इस ऐप्लिकेशन को सुरक्षित करने के बारे में नहीं बताया जाएगा. ऐसा इसलिए, क्योंकि इसमें एक से दो घंटे और लग जाएंगे.

हालांकि, यह विषय बहुत ज़रूरी है! हमने SECURITY में कुछ आइडिया इकट्ठा किए हैं.

12. बधाई हो!

बधाई हो 🎉🎉🎉 , आपने Google Cloud की मदद से अपने लेगसी PHP ऐप्लिकेशन को आधुनिक बना लिया है.

24cb9a39b1841fbd.png

इस कोडलैब में, आपने इन बातों के बारे में जाना:

  • Google Cloud SQL में डेटाबेस को डिप्लॉय करने का तरीका और अपने मौजूदा डेटाबेस को इसमें माइग्रेट करने का तरीका.
  • Docker और Buildpacks की मदद से, अपने PHP ऐप्लिकेशन को कंटेनर में कैसे बदलें और उसकी इमेज को Google Cloud Artifact Registry में कैसे सेव करें
  • कंटेनर में मौजूद ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने और उसे Cloud SQL के साथ चलाने का तरीका
  • Google Secret Manager का इस्तेमाल करके, संवेदनशील कॉन्फ़िगरेशन पैरामीटर (जैसे कि डीबी पासवर्ड) को गोपनीय तरीके से सेव/इस्तेमाल करने का तरीका
  • GitHub repo में कोड पुश करने पर, अपने PHP ऐप्लिकेशन को अपने-आप बनाने और डिप्लॉय करने के लिए, Google Cloud Build के साथ अपनी सीआई/सीडी पाइपलाइन सेट अप करने का तरीका.
  • अपने ऐप्लिकेशन के संसाधनों को "क्लाउड पर ले जाने" के लिए, Cloud Storage का इस्तेमाल कैसे करें
  • अपने ऐप्लिकेशन के कोड में बदलाव किए बिना, Google Cloud पर बेहतरीन वर्कफ़्लो बनाने के लिए, सर्वरलेस टेक्नोलॉजी का इस्तेमाल कैसे करें.
  • Gemini की मल्टीमोडल केपबिलिटी का इस्तेमाल, सही तरीके से करें.
  • Google Cloud में एसआरई के सिद्धांतों को लागू करना

Google Cloud की मदद से ऐप्लिकेशन को मॉडर्न बनाने के लिए, यह एक अच्छी शुरुआत है!

🔁 सुझाव, राय या शिकायत

अगर आपको इस वर्कशॉप के बारे में अपने अनुभव के बारे में बताना है, तो यह फ़ीडबैक फ़ॉर्म भरें.

हम आपके सुझावों और राय का स्वागत करते हैं. साथ ही, हमें उन कोड के लिए पुल अनुरोध भेजें जिन पर आपको गर्व है.

🙏 धन्यवाद

लेखक, Datatonic के Mirko Gilioli और Maurizio Ipsale को लेख लिखने और समाधान की जांच करने में मदद करने के लिए धन्यवाद देना चाहता है.