1. परिचय
पिछले अपडेट की तारीख: 01-11-2024
हम किसी पुराने PHP ऐप्लिकेशन को Google Cloud पर कैसे अपग्रेड करें?
(📽️ इस कोडलैब के बारे में सात मिनट का शुरुआती वीडियो देखें)
ऐसा अक्सर होता है कि लेगसी ऐप्लिकेशन, ऑन-प्रिमाइसेस पर चल रहे हों और उन्हें अप-टू-डेट करने की ज़रूरत हो. इसका मतलब है कि उन्हें बड़े पैमाने पर इस्तेमाल किया जा सकता है, सुरक्षित बनाया जा सकता है, और अलग-अलग एनवायरमेंट में डिप्लॉय किया जा सकता है.
इस वर्कशॉप में, आपको यह जानकारी मिलेगी:
- PHP ऐप्लिकेशन को कंटेनर में बदलें.
- मैनेज की गई डेटाबेस सेवा ( Cloud SQL) पर माइग्रेट करें.
- Cloud Run पर डिप्लॉय करें. यह GKE/Kubernetes का ज़ीरो-ऑप्स विकल्प है.
- पहचान और ऐक्सेस मैनेजमेंट (आईएएम) और Secret Manager की मदद से, ऐप्लिकेशन को सुरक्षित करें.
- Cloud Build की मदद से, CI/CD पाइपलाइन तय करें. Cloud Build को, GitHub या GitLab जैसी लोकप्रिय Git सेवा देने वाली कंपनियों के प्लैटफ़ॉर्म पर होस्ट की गई आपकी Git रिपो से कनेक्ट किया जा सकता है. साथ ही, इसे मुख्य ब्रांच में पुश करने पर ट्रिगर किया जा सकता है.
- ऐप्लिकेशन की इमेज को Cloud Storage पर होस्ट करें. इसे माउंट करने की प्रोसेस के ज़रिए पूरा किया जाता है. साथ ही, ऐप्लिकेशन में बदलाव करने के लिए किसी कोड की ज़रूरत नहीं होती.
- Gemini के ज़रिए जेन एआई की सुविधा उपलब्ध कराई गई है. इसे Cloud Functions (serverless) के ज़रिए मैनेज किया जाता है.
- एसएलओ और नए सिरे से बनाए गए ऐप्लिकेशन को ऑपरेट करने के बारे में जानें.
यह तरीका अपनाकर, अपने PHP ऐप्लिकेशन को धीरे-धीरे आधुनिक बनाया जा सकता है. इससे ऐप्लिकेशन की स्केलेबिलिटी, सुरक्षा, और डिप्लॉयमेंट फ़्लेक्सिबिलिटी को बेहतर बनाया जा सकता है. इसके अलावा, Google Cloud पर माइग्रेट करने से आपको इसके बेहतर इंफ़्रास्ट्रक्चर और सेवाओं का फ़ायदा मिलता है. इससे यह पक्का किया जा सकता है कि आपका ऐप्लिकेशन, क्लाउड-नेटिव एनवायरमेंट में आसानी से काम करे.
हमें लगता है कि इन आसान चरणों को पूरा करने के बाद, आपको जो जानकारी मिलेगी उसे अलग-अलग भाषाओं/स्टैक और इस्तेमाल के अलग-अलग उदाहरणों के साथ, अपने ऐप्लिकेशन और संगठन के लिए इस्तेमाल किया जा सकता है.
ऐप्लिकेशन के बारे में जानकारी
जिस ऐप्लिकेशन ( कोड, एमआईटी लाइसेंस के तहत) को आपको फ़ोर्क करना है वह MySQL ऑथेंटिकेशन वाला एक बेसिक PHP 5.7 ऐप्लिकेशन है. ऐप्लिकेशन का मुख्य मकसद एक ऐसा प्लैटफ़ॉर्म उपलब्ध कराना है जहां लोग फ़ोटो अपलोड कर सकें. साथ ही, एडमिन के पास आपत्तिजनक इमेज को टैग करने की सुविधा हो. ऐप्लिकेशन में दो टेबल होती हैं:
- उपयोगकर्ता पर क्लिक करें. यह एडमिन के साथ पहले से कंपाइल किया गया होता है. नए लोग रजिस्टर कर सकते हैं.
- इमेज. इसमें कुछ सैंपल इमेज शामिल होती हैं. लॉग इन किए हुए उपयोगकर्ता, नई तस्वीरें अपलोड कर सकते हैं. हम यहां कुछ मैजिक जोड़ेंगे.
आपका लक्ष्य
हमें पुराने ऐप्लिकेशन को Google Cloud में इस्तेमाल करने के लिए, उसे आधुनिक बनाना है. हम इसकी सेवाओं और टूल का इस्तेमाल करेंगे. इससे हमें इन कामों में मदद मिलेगी: स्केलेबिलिटी को बेहतर बनाना, सुरक्षा को बेहतर बनाना, बुनियादी ढांचे के मैनेजमेंट को अपने-आप होने की सुविधा के साथ इंटिग्रेट करना, और इमेज प्रोसेसिंग, मॉनिटरिंग, और डेटा स्टोरेज जैसी बेहतर सुविधाओं को इंटिग्रेट करना. इसके लिए, हम Cloud SQL, Cloud Run, Cloud Build, Secret Manager जैसी सेवाओं का इस्तेमाल करेंगे.

सबसे अहम बात यह है कि हम इसे चरण-दर-चरण करना चाहते हैं, ताकि आप यह जान सकें कि हर चरण के पीछे क्या सोच है. आम तौर पर, हर चरण अगले चरणों के लिए नई संभावनाएं खोलता है (उदाहरण: मॉड्यूल 2 -> 3 और 6 -> 7).
क्या आपको अब भी यकीन नहीं हो रहा है? YouTube पर यह सात मिनट का वीडियो देखें.
आपको इन चीज़ों की ज़रूरत होगी
- इंटरनेट से कनेक्ट किया गया ब्राउज़र वाला कंप्यूटर.
- GCP के कुछ क्रेडिट. इसके लिए, अगला चरण देखें.
- आपको Cloud Shell का इस्तेमाल करना होगा. इसमें पहले से इंस्टॉल की गई वे सभी कमांड शामिल होती हैं जिनकी आपको ज़रूरत होगी. साथ ही, इसमें एक आईडीई भी होता है.
- GitHub खाता. आपको इसकी ज़रूरत इसलिए होती है, ताकि आप अपने गिट रिपो के साथ ओरिजनल कोड 🧑🏻💻 gdgpescara/app-mod-workshop को ब्रांच कर सकें. अपनी CI/CD पाइपलाइन (ऑटोमैटिक कमिट -> बिल्ड -> डिप्लॉय) बनाने के लिए यह ज़रूरी है
उदाहरण के तौर पर दिए गए समाधान यहां देखे जा सकते हैं:
- लेखक का रेपो: https://github.com/Friends-of-Ricc/app-mod-workshop
- हर चैप्टर के लिए,
.solutions/फ़ोल्डर में मौजूद ओरिजनल वर्कशॉप रेपो.
इस वर्कशॉप को Cloud Shell (ब्राउज़र पर) में पूरा करने के लिए डिज़ाइन किया गया है.
हालांकि, इसे अपने लोकल कंप्यूटर से भी आज़माया जा सकता है.
2. क्रेडिट सेट अप और फ़ोर्क

GCP क्रेडिट रिडीम करना और GCP एनवायरमेंट सेट अप करना [ज़रूरी नहीं]
इस वर्कशॉप को चलाने के लिए, आपके पास कुछ क्रेडिट वाला बिलिंग खाता होना चाहिए. अगर आपके पास पहले से ही बिलिंग की सुविधा है, तो इस चरण को छोड़ा जा सकता है.
अपने GCP क्रेडिट से लिंक करने के लिए, एक नया Google Gmail खाता (*) बनाएं. अपने इंस्ट्रक्टर से GCP क्रेडिट रिडीम करने का लिंक मांगें या यहां दिए गए लिंक का इस्तेमाल करें: bit.ly/PHP-Amarcord-credits .
नए बनाए गए खाते से साइन इन करें और निर्देशों का पालन करें.

(
) मुझे बिलकुल नए Gmail खाते की ज़रूरत क्यों है?*
हमने देखा है कि कुछ लोग कोडलैब को पूरा नहीं कर पाए, क्योंकि उनके खाते (खास तौर पर ऑफ़िस या स्कूल वाले ईमेल) में पहले से GCP का ऐक्सेस था. साथ ही, संगठन की नीतियों की वजह से, वे कोडलैब को पूरा नहीं कर पाए. हमारा सुझाव है कि आप नया Gmail खाता बनाएं या ऐसे मौजूदा Gmail खाते (gmail.com) का इस्तेमाल करें जिसका इस्तेमाल पहले कभी GCP के लिए न किया गया हो.
क्रेडिट रिडीम करने के लिए, बटन पर क्लिक करें.

यहां दिए गए फ़ॉर्म में अपना नाम और उपनाम डालें. साथ ही, नियम और शर्तों से सहमत हों.
बिलिंग खाता यहां दिखने में कुछ सेकंड लग सकते हैं: https://console.cloud.google.com/billing
इसके बाद, Google Cloud Console खोलें और सबसे ऊपर बाईं ओर मौजूद ड्रॉपडाउन मेन्यू में, प्रोजेक्ट चुनने वाले विकल्प पर क्लिक करके नया प्रोजेक्ट बनाएं. इस ड्रॉपडाउन मेन्यू में "कोई संगठन नहीं" दिखता है. नीचे देखें

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

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

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

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

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

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

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

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

इसे विज़ुअल तरीके से भी किया जा सकता है. इसके लिए, "फ़ोल्डर खोलें" पर क्लिक करें और फ़ोल्डर चुनें. यह फ़ोल्डर, आपके होम फ़ोल्डर में app-mod-workshop के तौर पर मौजूद हो सकता है.
3. पहला मॉड्यूल: SQL इंस्टेंस बनाना
Google Cloud SQL इंस्टेंस बनाना
हमारा PHP ऐप्लिकेशन, MySQL डेटाबेस से कनेक्ट होगा. इसलिए, हमें इसे Google Cloud पर रेप्लिकेट करना होगा, ताकि माइग्रेशन आसानी से हो सके. Cloud SQL, आपकी ज़रूरतों के हिसाब से सबसे सही विकल्प है. इसकी मदद से, क्लाउड में पूरी तरह से मैनेज किया गया MySQL डेटाबेस चलाया जा सकता है. इसके लिए, यह तरीका अपनाएं:
- Cloud SQL पेज पर जाएं: https://console.cloud.google.com/sql/instances
- "Create Instance" पर क्लिक करें
- अगर ज़रूरी हो, तो एपीआई चालू करें. इसमें कुछ सेकंड लग सकते हैं.
- MySQL चुनें.
- (हम आपको सबसे सस्ता वर्शन उपलब्ध कराने की कोशिश कर रहे हैं, ताकि यह लंबे समय तक चले):
- वर्शन: Enterprise
- प्रीसेट: development (हमने Sandbox का इस्तेमाल किया, लेकिन यह हमारे लिए काम नहीं किया)
- Mysql Ver: 5.7 (वाह, पुराने दिनों की यादें!)
- उदाहरण के लिए आईडी:
appmod-phpappचुनें. अगर इसे बदला जाता है, तो आने वाले समय में स्क्रिप्ट और समाधानों को भी इसके हिसाब से बदलना न भूलें. - पासवर्ड: अपनी पसंद का कोई भी पासवर्ड डालें. हालांकि, इसे CLOUDSQL_INSTANCE_PASSWORD के तौर पर नोट कर लें
- क्षेत्र: इसे वही रखें जो आपने ऐप्लिकेशन के बाकी हिस्से के लिए चुना है. उदाहरण के लिए, मिलान =
europe-west8 - ज़ोन के हिसाब से उपलब्धता: सिंगल ज़ोन (हम डेमो के लिए पैसे बचा रहे हैं)
Cloud SQL डेटाबेस को डिप्लॉय करने के लिए, 'इंस्टेंस बनाएं' बटन पर क्लिक करें; ⌛ इसमें करीब 10 मिनट लगते हैं⌛. इस दौरान, दस्तावेज़ पढ़ना जारी रखें. इसके अलावा, अगले मॉड्यूल ("अपने PHP ऐप्लिकेशन को कंटेनर में बदलें") को हल करना शुरू किया जा सकता है, क्योंकि पहले हिस्से में इस मॉड्यूल की कोई निर्भरता नहीं है (जब तक कि डीबी कनेक्शन ठीक नहीं हो जाता).
ध्यान दें. इस इंस्टेंस का शुल्क, आपको हर दिन ~7 डॉलर देना होगा. वर्कशॉप के बाद, इसे बंद करना न भूलें.
Cloud SQL में image_catalog DB और उपयोगकर्ता बनाना
ऐप्लिकेशन प्रोजेक्ट में db/ फ़ोल्डर होता है. इसमें दो SQL फ़ाइलें होती हैं:
- 01_schema.sql : इसमें SQL कोड होता है. इसका इस्तेमाल, दो टेबल बनाने के लिए किया जाता है. इन टेबल में उपयोगकर्ता और इमेज का डेटा होता है.
- 02_seed.sql: इसमें पहले से बनाई गई टेबल में डेटा डालने के लिए एसक्यूएल कोड होता है.
image_catalog डेटाबेस बनने के बाद, इन फ़ाइलों का इस्तेमाल किया जाएगा. इसके लिए, यह तरीका अपनाएं:
- अपना इंस्टेंस खोलें और डेटाबेस टैब पर क्लिक करें:
- "डेटाबेस बनाएं" पर क्लिक करें
- इसे
image_catalog(PHP ऐप्लिकेशन कॉन्फ़िगरेशन में दिए गए नाम के मुताबिक) नाम दें.

इसके बाद, हम डेटाबेस उपयोगकर्ता बनाते हैं. इससे हम image_catalog डेटाबेस में पुष्टि कर सकते हैं.
- अब उपयोगकर्ता टैब पर क्लिक करें
- "उपयोगकर्ता खाता जोड़ें" पर क्लिक करें.
- उपयोगकर्ता: आइए, एक बनाएं:
- उपयोगकर्ता नाम:
appmod-phpapp-user - पासवर्ड: कोई ऐसा पासवर्ड चुनें जिसे याद रखना आसान हो या "जनरेट करें" पर क्लिक करें
- "किसी भी होस्ट को अनुमति दें (%)" को चालू रखें.
- जोड़ें पर क्लिक करें.
डीबी को जाने-माने आईपी के लिए खोलें.
ध्यान दें कि Cloud SQL में सभी डेटाबेस ‘आइसोलेटेड' होते हैं. आपको साफ़ तौर पर एक नेटवर्क सेट अप करना होगा, ताकि उसे ऐक्सेस किया जा सके.
- अपने इंस्टेंस पर क्लिक करें
- मेन्यू "कनेक्शन" खोलें
- "नेटवर्किंग" टैब पर क्लिक करें.
- "अनुमति वाले नेटवर्क" में जाकर, पर क्लिक करें. अब कोई नेटवर्क (यानी कि सबनेट) जोड़ें.
- फ़िलहाल, ऐप्लिकेशन को काम करने देने के लिए, हम तुरंत लागू होने वाली असुरक्षित सेटिंग चुनते हैं. हालांकि, बाद में आपको इसे उन आईपी पतों तक सीमित करना पड़ सकता है जिन पर आपको भरोसा है:
- नाम: "दुनिया में हर कोई - असुरक्षित".
- नेटवर्क: "
0.0.0.0/0"(ध्यान दें: यह असुरक्षित हिस्सा है!) - 'हो गया' पर क्लिक करें
- 'सेव करें' पर क्लिक करें.
आपको कुछ ऐसा दिखेगा:

ध्यान दें. इस समाधान से, वर्कशॉप को O(hours) में पूरा किया जा सकता है. हालांकि, प्रोडक्शन के लिए अपने समाधान को सुरक्षित बनाने के लिए, सुरक्षा से जुड़ा दस्तावेज़ देखें!
अब डेटाबेस कनेक्शन की जांच करने का समय आ गया है!
आइए, देखते हैं कि हमने पहले जो image_catalog उपयोगकर्ता बनाया था वह काम करता है या नहीं.
इंस्टेंस में "Cloud SQL Studio" को ऐक्सेस करें. इसके बाद, डेटाबेस, उपयोगकर्ता, और पासवर्ड डालें, ताकि पुष्टि की जा सके. ऐसा नीचे दिखाए गए तरीके से करें:

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

इसे आज़माने के लिए, एडिटर में यह कोड चलाएं: select * from images;
साथ ही, Cloud SQL इंस्टेंस का सार्वजनिक आईपी पता नोट करना न भूलें. आपको इसकी ज़रूरत बाद में पड़ेगी. आईपी पाने के लिए, खास जानकारी पेज पर जाकर, Cloud SQL इंस्टेंस के मुख्य पेज पर जाएं. (खास जानकारी > इस इंस्टेंस से कनेक्ट करें > सार्वजनिक आईपी पता).
4. दूसरा मॉड्यूल: अपने PHP ऐप्लिकेशन को कंटेनर में बदलना

हमें इस ऐप्लिकेशन को क्लाउड के लिए बनाना है.
इसका मतलब है कि कोड को किसी तरह की ZIP फ़ाइल में पैकेज करना. इसमें क्लाउड में कोड चलाने के लिए ज़रूरी सभी जानकारी होती है.
इसे पैकेज करने के कुछ तरीके हैं:
- Docker. यह बहुत लोकप्रिय है, लेकिन इसे सही तरीके से सेट अप करना काफ़ी मुश्किल है.
- Buildpacks. यह कम लोकप्रिय है, लेकिन इसमें यह अनुमान लगाने की सुविधा होती है कि क्या बनाना है और क्या चलाना है. अक्सर यह काम कर जाता है!
इस वर्कशॉप के हिसाब से, हम यह मानकर चलेंगे कि आपने Docker का इस्तेमाल किया है.
अगर आपने Cloud Shell का इस्तेमाल करने का विकल्प चुना है, तो इसे फिर से खोलें. इसके लिए, Cloud Console में सबसे ऊपर दाईं ओर मौजूद आइकॉन पर क्लिक करें.

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

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_HOSTCloud SQL का सार्वजनिक आईपी पता है. इसे SQL कंसोल में देखा जा सकता है:

DB_NAMEमें कोई बदलाव नहीं होना चाहिए:image_catalogDB_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 पर प्रीव्यू करें (या किसी अन्य पोर्ट के लिए "पोर्ट बदलें") पर क्लिक करें

अपने ब्राउज़र पर नतीजे की जांच करना
अब आपका ऐप्लिकेशन कुछ ऐसा दिखना चाहिए:

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

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

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

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

अपने लोकल डेवलपमेंट एनवायरमेंट टैग पर वापस जाएं और अभी बनाई गई Artifact Registry रिपॉज़िटरी में ऐप्लिकेशन कंटेनर इमेज को पुश करें. इसके लिए, यहां दी गई कमांड पूरी करें.
- docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
- docker push TARGET_IMAGE[:TAG]
नतीजा, इस स्क्रीनशॉट की तरह दिखना चाहिए.

बधाई हो 🎉🎉🎉, अब अगले लेवल पर जाएं. इससे पहले, दो मिनट का समय निकालकर, अपलोड/लॉगिन/लॉग आउट करने की कोशिश करें. साथ ही, ऐप्लिकेशन के एंडपॉइंट के बारे में जानें. आपको इनकी ज़रूरत बाद में पड़ेगी.
संभावित गड़बड़ियां
अगर आपको कंटेनर बनाने से जुड़ी गड़बड़ियां मिलती हैं, तो गड़बड़ी के बारे में बताने और उसे ठीक करने के लिए, 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. तीसरा मॉड्यूल: ऐप्लिकेशन को Cloud Run पर डिप्लॉय करना

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 कमांड का इस्तेमाल किया जाता है. अपने लक्ष्य को हासिल करने के लिए, कई विकल्प सेट किए जा सकते हैं. यहां दिए गए विकल्प, कम से कम सेट किए जाने चाहिए. इन्हें कमांड लाइन के ज़रिए सेट किया जा सकता है. इसके अलावा, टूल आपसे इंटरैक्टिव प्रॉम्प्ट के ज़रिए भी इनकी जानकारी मांग सकता है:
- Cloud Run सेवा का नाम, जिसे आपको अपने ऐप्लिकेशन के लिए डिप्लॉय करना है. Cloud Run सेवा आपको एक यूआरएल देगी, जो आपके ऐप्लिकेशन के लिए एंडपॉइंट उपलब्ध कराता है.
- Google Cloud Region जहां आपका ऐप्लिकेशन चलेगा. (
--regionREGION) - कंटेनर इमेज, जो आपके ऐप्लिकेशन को रैप करती है.
- एनवायरमेंट वैरिएबल, जिनका इस्तेमाल आपके ऐप्लिकेशन को एक्ज़ीक्यूट करने के दौरान करना होता है.
- Allow-Unauthenticated फ़्लैग, जो सभी को बिना किसी और पुष्टि के आपके ऐप्लिकेशन को ऐक्सेस करने की अनुमति देता है.
इस विकल्प को अपनी कमांड लाइन पर लागू करने का तरीका जानने के लिए, दस्तावेज़ देखें. इसके अलावा, संभावित समाधान के लिए नीचे स्क्रोल करें.
इसे लागू होने में कुछ मिनट लगेंगे. अगर सब कुछ सही है, तो आपको Google Cloud Console में कुछ ऐसा दिखेगा.


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

बिना किसी तर्क के"gcloud run deploy"
आपने देखा होगा कि gcloud run deploy आपसे सही सवाल पूछता है और आपके छोड़े गए खाली जगहों को भरता है. यह शानदार है!
हालांकि, कुछ मॉड्यूल में हम इस कमांड को Cloud Build ट्रिगर में जोड़ने वाले हैं. इसलिए, हम इंटरैक्टिव सवालों के जवाब नहीं दे सकते. हमें निर्देश में मौजूद हर विकल्प को भरना होगा. इसलिए, आपको गोल्डन gcloud run deploy --option1 blah --foo bar --region your-fav-region बनाना है. आप इसे कैसे करते हैं?
- जब तक gcloud सवाल पूछना बंद न कर दे, तब तक दूसरे, तीसरे, और चौथे चरण को दोहराएं:
- [LOOP]
gcloud run deployके साथ अब तक मिले विकल्प - [LOOP] सिस्टम, विकल्प X के लिए पूछता है
- [LOOP] सार्वजनिक दस्तावेज़ों में खोजो कि सीएलआई में X को कैसे सेट अप किया जाता है. इसके लिए, जोड़ने का विकल्प
--my-option [my-value]इस्तेमाल करो. - अब चरण 2 पर वापस जाएं. हालांकि, अगर gcloud बिना किसी और सवाल के पूरा हो जाता है, तो ऐसा करने की ज़रूरत नहीं है.
- This gcloud run deploy BLAH BLAH BLAH rocks! कमांड को कहीं सेव करें. आपको Cloud Build के चरण के लिए इसकी ज़रूरत बाद में पड़ेगी!
इस समस्या को हल करने का तरीका यहां दिया गया है. दस्तावेज़ यहां हैं.
बधाई हो 🎉🎉🎉 आपने Google Cloud में अपना ऐप्लिकेशन डिप्लॉय कर लिया है. यह मॉडर्नाइज़ेशन का पहला चरण है.
6. मॉड्यूल 4: Secret Manager की मदद से पासवर्ड को सुरक्षित रखना

पिछले चरण में, हमने 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
अब आपको ये फ़ायदे मिलेंगे:
- आपका ऐप्लिकेशन, आपके ENV से वैरिएबल को डाइनैमिक तौर पर पढ़ेगा
- आपने सुरक्षा को बेहतर बनाया है, क्योंकि आपने अपने कोड से डेटाबेस का पासवर्ड हटा दिया है)
अब Cloud Run पर नया वर्शन डिप्लॉय किया जा सकता है. आइए, यूज़र इंटरफ़ेस पर जाएं और एनवायरमेंट वैरिएबल को मैन्युअल तरीके से सेट करें:
- https://console.cloud.google.com/run पर जाएं
- अपने ऐप्लिकेशन पर क्लिक करें
- "बदलाव करें और नई रीविज़न को डिप्लॉय करें" पर क्लिक करें
- पहले टैब "कंटेनर" पर, सबसे नीचे मौजूद टैब "वैरिएबल और सीक्रेट" पर क्लिक करें
- "+ वैरिएबल जोड़ें" पर क्लिक करें और सभी ज़रूरी वैरिएबल जोड़ें. आपको कुछ ऐसा दिखेगा:


क्या यह सही है? नहीं. आपका पास अब भी ज़्यादातर ऑपरेटर को दिखता है. 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 सेक्शन में ढूंढें. इसे नीचे दिए गए स्क्रीनशॉट में दिखाया गया है.

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

- अब "सीक्रेट बनाएं" पर क्लिक करें: इसे हम 'तर्कसंगत' कहते हैं:
- नाम:
php-amarcord-db-pass - सीक्रेट वैल्यू: ‘आपके डेटाबेस का पासवर्ड' ("फ़ाइल अपलोड करें" वाले हिस्से को अनदेखा करें).
- इस सीक्रेट लिंक को एनोटेट करें. यह
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" का इस्तेमाल करें. साथ ही, सबसे नए वर्शन का इस्तेमाल करें.

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

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

अहम जानकारी: डेवलपर कंसोल (यूज़र इंटरफ़ेस) में, अनुमति से जुड़ी समस्याओं के बारे में आसानी से पता लगाया जा सकता है. अपनी क्लाउड इकाइयों के सभी लिंक को एक्सप्लोर करने के लिए समय निकालें!
7. पांचवां मॉड्यूल: Cloud Build की मदद से CI/CD सेट अप करना

सीआई/सीडी पाइपलाइन क्यों?
अब तक, आपने gcloud run deploy को कई बार टाइप किया होगा. ऐसा हो सकता है कि आपने एक ही सवाल का जवाब बार-बार दिया हो.
क्या gcloud run deploy की मदद से, अपने ऐप्लिकेशन को मैन्युअल तरीके से डिप्लॉय करने से परेशान हैं? क्या यह बेहतर नहीं होगा कि जब भी आप अपनी Git रिपॉज़िटरी में कोई नया बदलाव करें, तो आपका ऐप्लिकेशन अपने-आप डिप्लॉय हो जाए?
CI/CD पाइपलाइन का इस्तेमाल करने के लिए, आपको इन दो चीज़ों की ज़रूरत होगी:
- निजी Git रिपॉज़िटरी: अच्छी बात यह है कि आपने दूसरे चरण में, वर्कशॉप रिपॉज़िटरी को अपने GitHub खाते में पहले ही फ़ोर्क कर लिया होगा. अगर ऐसा नहीं है, तो वापस जाएं और उस चरण को पूरा करें. आपकी फ़ोर्क की गई रिपॉज़िटरी ऐसी दिखनी चाहिए:
https://github.com/<YOUR_GITHUB_USER>/app-mod-workshop - Cloud Build. यह बेहतरीन और किफ़ायती सेवा, आपको हर चीज़ के लिए बिल्ड ऑटोमेशन कॉन्फ़िगर करने की सुविधा देती है: Terraform, डॉकर वाले ऐप्लिकेशन वगैरह..
इस सेक्शन में, Cloud Build को सेट अप करने के बारे में बताया जाएगा.
Cloud Build का इस्तेमाल शुरू करें!
हम इस काम के लिए Cloud Build का इस्तेमाल करेंगे:
- Dockerfile की मदद से सोर्स बनाएं. इसे "बड़ी .zip फ़ाइल" के तौर पर समझें. इसमें इसे बनाने और चलाने के लिए ज़रूरी सभी चीज़ें (आपका "बिल्ड आर्टफ़ैक्ट") शामिल होती हैं.
- इस आर्टफ़ैक्ट को Artifact Registry (AR) में पुश करें.
- इसके बाद, "php-amarcord" ऐप्लिकेशन के लिए, AR से Cloud Run में डिप्लॉयमेंट जारी करें
- इससे मौजूदा ऐप्लिकेशन का एक नया वर्शन ("बदलाव") बन जाएगा. इसे नए कोड वाली लेयर के तौर पर देखा जा सकता है. अगर पुश सफल होता है, तो हम इसे नए वर्शन पर ट्रैफ़िक को डाइवर्ट करने के लिए कॉन्फ़िगर करेंगे.
यहां मेरे php-amarcord ऐप्लिकेशन के कुछ बिल्ड का उदाहरण दिया गया है:

हम यह सब कैसे करते हैं?
- एक बेहतरीन YAML फ़ाइल बनाकर:
cloudbuild.yaml - Cloud Build ट्रिगर बनाकर.
- Cloud Build यूज़र इंटरफ़ेस (यूआई) के ज़रिए, हमारी github repo से कनेक्ट करके.
ट्रिगर बनाएं (और रिपॉज़िटरी कनेक्ट करें)
- https://console.cloud.google.com/cloud-build/triggers पर जाएं
- "ट्रिगर बनाएं" पर क्लिक करें.
- कंपाइल करें:
- नाम: ऐसा नाम जो आपके लिए सही हो, जैसे कि
on-git-commit-build-php-app - इवेंट: पुश टू ब्रांच
- सोर्स: "नई रिपॉज़िटरी कनेक्ट करें"

- इससे दाईं ओर एक विंडो खुलेगी: "कनेक्ट रिपॉज़िटरी"
- सोर्स उपलब्ध कराने वाली कंपनी: "Github" (पहली)
- "जारी रखें"
- 'Authenticate' पर क्लिक करने से, GitHub पर एक विंडो खुलेगी. इसमें आपको क्रॉस-ऑथेंटिकेट करने का विकल्प मिलेगा. निर्देशों का पालन करें और धैर्य बनाए रखें. अगर आपके पास कई रिपॉज़िटरी हैं, तो इसमें कुछ समय लग सकता है.
- "Select repo" अपना खाता/repo चुनें और "I understand..." वाले हिस्से पर सही का निशान लगाएं.
- अगर आपको यह गड़बड़ी मिली है: GitHub ऐप्लिकेशन, आपकी किसी भी रिपॉज़िटरी पर इंस्टॉल नहीं है, तो "Google Cloud Build इंस्टॉल करें" पर क्लिक करें और निर्देशों का पालन करें.
कनेक्ट करें पर क्लिक करें
- बिंगो! आपकी रेपो अब कनेक्ट हो गई है.
- ट्रिगर वाले हिस्से पर वापस जाएं....
- कॉन्फ़िगरेशन: अपने-आप पता लगाया गया (*)
- ऐडवांस: सेवा खाता "[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
- "पसंदीदा सेवा खाते के तौर पर सेट करें" पर भी सही का निशान लगाएं

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

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

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

अन्य फ़ाइलों के बीच git add clodubuild.yaml करना न भूलें. ऐसा न करने पर, यह काम नहीं करेगा.
डीप बनाम शैलो "dev/prod parity" [ज़रूरी नहीं]
अगर आपने मॉडल वर्शन को यहां से कॉपी किया है, तो आपके पास DEV और PROD के दो एक जैसे वर्शन होंगे. यह तरीका काफ़ी अच्छा है और The Twelve-Factor App के नियम 10 के मुताबिक है.
हालांकि, हम दो अलग-अलग वेब एंडपॉइंट का इस्तेमाल कर रहे हैं, ताकि ऐप्लिकेशन एक ही डेटाबेस की ओर इशारा करे. यह वर्कशॉप के लिए काफ़ी है. हालांकि, असल ज़िंदगी में आपको प्रॉपर प्रॉड एनवायरमेंट बनाने के लिए कुछ समय देना होगा. इसका मतलब है कि आपके पास दो डेटाबेस (एक डेवलपमेंट के लिए और एक प्रोडक्शन के लिए) होने चाहिए. साथ ही, आपको यह भी चुनना होगा कि आपदा से उबरने / ज़्यादा उपलब्धता के लिए, उन्हें कहां रखा जाए. यह इस वर्कशॉप के दायरे से बाहर है, लेकिन इस पर विचार किया जा सकता है.
अगर आपके पास प्रोडक्शन का "डीप" वर्शन बनाने का समय है, तो कृपया उन सभी संसाधनों को ध्यान में रखें जिनकी आपको डुप्लीकेट बनाने के लिए ज़रूरत है. जैसे:
- Cloud SQL डेटाबेस (और शायद SQL इंस्टेंस).
- GCS बकेट
- Cloud फ़ंक्शन.
- डेवलपमेंट के दौरान, Gemini 1.5 Flash को मॉडल के तौर पर इस्तेमाल किया जा सकता है. यह सस्ता और तेज़ है. इसके अलावा, Gemini 1.5 Pro को भी इस्तेमाल किया जा सकता है. यह ज़्यादा बेहतर है.
आम तौर पर, जब भी ऐप्लिकेशन में कोई बदलाव किया जाता है, तो यह सोच-विचार करना ज़रूरी होता है कि क्या प्रोडक्शन में भी यही वैल्यू होनी चाहिए या नहीं? अगर ऐसा नहीं होता है, तो फिर से कोशिश करें. हालांकि, Terraform के साथ यह काम बहुत आसान हो जाता है. इसमें अपने संसाधनों के सफ़िक्स के तौर पर, अपने एनवायरमेंट (-dev, -prod) को इंजेक्ट किया जा सकता है.
8. छठा मॉड्यूल: Google Cloud Storage पर माइग्रेट करना

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

फ़िलहाल, ऐप्लिकेशन की स्थिति को डॉकर कंटेनर में सेव किया जाता है. अगर मशीन खराब हो जाती है, ऐप्लिकेशन क्रैश हो जाता है या आपने नया वर्शन पुश किया है, तो नया वर्शन शेड्यूल किया जाएगा. इसमें खाली स्टोरेज होगा: 🙈
इस समस्या को कैसे ठीक किया जा सकता है? इसके लिए कई तरीके हैं.
- इमेज को डीबी में सेव करें. मैंने अपने पिछले PHP ऐप्लिकेशन के साथ ऐसा ही किया था. यह सबसे आसान तरीका है, क्योंकि इससे ऐप्लिकेशन में कोई जटिलता नहीं आती. हालांकि, इससे आपके डेटाबेस में लोड और इंतज़ार का समय बढ़ जाता है!
- अपने Cloud Run ऐप्लिकेशन को स्टोरेज के हिसाब से बेहतर समाधान पर माइग्रेट करें: GCE + परसिस्टेंट डिस्क? शायद GKE + स्टोरेज? ध्यान दें: कंट्रोल बढ़ने से, काम करने की तेज़ी कम हो जाती है.
- GCS पर जाएं. Google Cloud Storage, Google Cloud के सभी प्रॉडक्ट के लिए सबसे बेहतरीन स्टोरेज उपलब्ध कराता है. साथ ही, यह क्लाउड के लिए सबसे सही समाधान है. हालांकि, इसके लिए हमें PHP लाइब्रेरी का इस्तेमाल करना होगा. क्या हमारे पास GCS के लिए PHP 5.7 लाइब्रेरी हैं? क्या
PHP 5.7,Composerके साथ काम करता है? ऐसा लगता है कि Composer के साथ काम करने वाला सबसे पुराना वर्शन PHP 5.3.2 है. - क्या डॉकर साइडकार का इस्तेमाल किया जा सकता है?
- इसके अलावा, GCS Cloud Run वॉल्यूम माउंट का इस्तेमाल किया जा सकता है. यह बहुत अच्छा लग रहा है.
🤔 स्टोरेज माइग्रेट करना (ओपन एंडेड)
[ओपन एंडेड] इस एक्सरसाइज़ में, हम चाहते हैं कि आप अपनी इमेज को इस तरह से मूव करने का कोई तरीका ढूंढें कि वह किसी तरह से सेव हो जाए.
स्वीकार्यता जांच
मुझे आपको इसका समाधान नहीं बताना है, लेकिन मुझे यह चाहिए:
newpic.jpgअपलोड करें. यह आपको ऐप्लिकेशन में दिखता है.- ऐप्लिकेशन को नए वर्शन पर अपग्रेड किया जाता है.
newpic.jpgअब भी मौजूद है और दिख रहा है.
💡 संभावित समाधान (GCS Cloud Run वॉल्यूम माउंट)
यह एक बहुत ही बेहतरीन समाधान है. इससे हमें कोड में कोई बदलाव किए बिना, फ़ाइल अपलोड करने की सुविधा मिलती है. हालांकि, इमेज का ब्यौरा दिखाने के लिए कोड में बदलाव करना पड़ता है. यह बहुत आसान है और सिर्फ़ इमेज को बेहतर दिखाने के लिए किया जाता है.
इससे आपको Cloud Run से GCS में कोई फ़ोल्डर माउंट करने की अनुमति मिलनी चाहिए. इसलिए:
- GCS पर अपलोड की गई सभी फ़ाइलें, आपके ऐप्लिकेशन में दिखेंगी.
- आपके ऐप्लिकेशन पर अपलोड किए गए सभी आइटम, असल में GCS पर अपलोड किए जाएंगे
- 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 पर ले जाना है.
यूज़र इंटरफ़ेस (यूआई) से भी ऐसा किया जा सकता है
- "वॉल्यूम" टैब में जाकर, अपने बकेट की ओर इशारा करने वाले वॉल्यूम माउंट बनाएं. इनका टाइप "Cloud Storage बकेट" होना चाहिए. उदाहरण के लिए, "php_uploads" नाम वाला वॉल्यूम माउंट.
- कंटेनर > वॉल्यूम माउंट में जाकर, अभी बनाए गए वॉल्यूम को ऐप्लिकेशन के अनुरोध किए गए वॉल्यूम पॉइंट पर माउंट करें. यह डॉकरफ़ाइल पर निर्भर करता है, लेकिन यह
var/www/html/uploads/जैसा दिख सकता है .
अगर यह काम करता है, तो Cloud Run के नए वर्शन में बदलाव करने पर आपको कुछ ऐसा दिखेगा:

अब नए ऐप्लिकेशन को टेस्ट करें. इसके लिए, /upload.php एंडपॉइंट पर एक नई इमेज अपलोड करें.
GCS पर इमेज बिना किसी रुकावट के दिखनी चाहिए. इसके लिए, PHP की एक भी लाइन लिखने की ज़रूरत नहीं है:

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

अब आपके पास क्लाउड स्टोरेज के साथ, मॉडर्न और नया PHP ऐप्लिकेशन (जैसे कि 2024 Fiat 126) है.
इसका इस्तेमाल किस तरह किया जा सकता है?
ज़रूरी शर्तें
पिछले चैप्टर में, मॉडल के समाधान की मदद से हमने GCS पर इमेज /uploads/ को माउंट किया था. इससे, इमेज स्टोरेज से ऐप्लिकेशन लॉजिक को वास्तविक रूप से अलग किया जा सका.
इस कसरत के लिए, आपको ये काम करने होंगे:
- आपने चैप्टर 6 (स्टोरेज) में दी गई कसरत को पूरा कर लिया हो.
- आपके पास इमेज अपलोड करने के लिए GCS बकेट हो. इसमें लोग आपके ऐप्लिकेशन पर फ़ोटो अपलोड करते हैं और वे फ़ोटो आपकी बकेट में दिखती हैं.
Cloud फ़ंक्शन (Python में) सेट अप करना
क्या आपने कभी सोचा है कि इवेंट-ड्रिवन ऐप्लिकेशन को कैसे लागू किया जाता है? जैसे:
- जब <event> होता है, तब => ईमेल भेजें
- जब <event> होता है => अगर <condition> सही है, तो डेटाबेस को अपडेट करें.
इवेंट कुछ भी हो सकता है. जैसे, BigQuery में उपलब्ध नया रिकॉर्ड, GCS में किसी फ़ोल्डर में बदला गया नया ऑब्जेक्ट या Pub/Sub में किसी कतार में इंतज़ार कर रहा नया मैसेज.
Google Cloud, इस लक्ष्य को हासिल करने के लिए कई तरीकों का इस्तेमाल करता है. खास तौर पर:
- EventArc. GCS इवेंट पाने का तरीका जानें. यह क्लाउड में DAG बनाने और if-then-else के आधार पर कार्रवाइयों को व्यवस्थित करने के लिए बेहतरीन है.
- Cloud Scheduler. उदाहरण के लिए, क्लाउड में रात 12 बजे क्रॉन जॉब के लिए यह बहुत अच्छा है.
- Cloud Workflows. इवेंट आर्क की तरह ही, इसकी मदद से
- Cloud Run Functions (इसे
lambdasके नाम से भी जाना जाता है). - Cloud Composer. यह Apache Airflow का Google वर्शन है. यह DAG के लिए भी बहुत अच्छा है.
इस अभ्यास में, हम Cloud Functions के बारे में जानेंगे, ताकि हमें शानदार नतीजे मिल सकें. साथ ही, हम आपको कुछ वैकल्पिक एक्सरसाइज़ भी देंगे.
ध्यान दें कि सैंपल कोड, .solutions/ में दिया गया है
Cloud फ़ंक्शन (🐍 python) सेट अप करना
हम एक बहुत ही महत्वाकांक्षी GCF बनाने की कोशिश कर रहे हैं.
- जब GCS पर कोई नई इमेज बनाई जाती है.. (ऐसा शायद इसलिए है, क्योंकि किसी व्यक्ति ने इसे ऐप्लिकेशन पर अपलोड किया है. हालांकि, इसके और भी कारण हो सकते हैं)
- .. Gemini को कॉल करके, इमेज के बारे में जानकारी पाएं और इमेज के बारे में टेक्स्ट में जानकारी पाएं .. (MIME की जांच करना और यह पक्का करना अच्छा होगा कि यह इमेज है, न कि PDF, MP3 या टेक्स्ट)
- .. और इस जानकारी के साथ डेटाबेस को अपडेट करें. (इसके लिए,
descriptionटेबल मेंdescriptionकॉलम जोड़ने के लिए, DB को पैच करना पड़ सकता है).images
description इमेज में जोड़ने के लिए DB को पैच करें
- Cloud SQL Studio खोलें:

- Images DB के लिए अपना उपयोगकर्ता नाम और पासवर्ड डालें
- इस SQL को इंजेक्ट करें. इससे इमेज के ब्यौरे के लिए एक कॉलम जुड़ जाएगा:
ALTER TABLE images ADD COLUMN description TEXT;

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

Gemini f(x) लिखें
ध्यान दें. इस फ़ंक्शन को Gemini Code Assist की मदद से बनाया गया था.
ध्यान दें. इस फ़ंक्शन को बनाते समय, आपको IAM की अनुमति से जुड़ी गड़बड़ियां मिल सकती हैं. इनमें से कुछ गड़बड़ियों के बारे में, "संभावित गड़बड़ियां" पैराग्राफ़ में बताया गया है.
- एपीआई चालू करना
- https://console.cloud.google.com/functions/list पर जाएं
- "फ़ंक्शन बनाएं" पर क्लिक करें
- एपीआई विज़र्ड से एपीआई चालू करें:

जीसीएफ़ को यूज़र इंटरफ़ेस (यूआई) या कमांड लाइन से बनाया जा सकता है. यहां हम कमांड लाइन का इस्तेमाल करेंगे.
संभावित कोड .solutions/ में देखा जा सकता है
- अपना कोड होस्ट करने के लिए एक फ़ोल्डर बनाएं. उदाहरण के लिए, "gcf/". फ़ोल्डर में जाएं.
requirements.txtफ़ाइल बनाने के लिए:
google-cloud-storage
google-cloud-aiplatform
pymysql
- 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
- फ़ंक्शन को पुश करें. इस तरह की स्क्रिप्ट का इस्तेमाल किया जा सकता है: 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 टैब को भी ज़रूर देखें.

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

और यह काम करता है! हम उस ब्यौरे को दिखाने के लिए, फ़्रंटएंड को भी अपडेट कर सकते हैं.
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 की मदद से तैयार किया गया बेहतर यूज़र इंटरफ़ेस (यूआई) भी दिखता है. यह कुछ इस तरह दिख सकता है:

नतीजे
आपको GCS पर नए ऑब्जेक्ट के लिए ट्रिगर किया गया Cloud फ़ंक्शन मिला है. यह फ़ंक्शन, इमेज के कॉन्टेंट को इंसानों की तरह एनोटेट कर सकता है. साथ ही, डेटाबेस को अपने-आप अपडेट कर सकता है. वाह!
आगे क्या करना है? इन दोनों सुविधाओं को पाने के लिए, इसी तर्क का इस्तेमाल किया जा सकता है.
[ज़रूरी नहीं] 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: "Pescara, Lungomare"
आम तौर पर, N नतीजों के लिए N फ़ंक्शन का इस्तेमाल करना बेहतर होता है. हालांकि, एक ऐसा फ़ंक्शन बनाना जो 10 काम करता हो, बहुत फ़ायदेमंद होता है. इसका तरीका जानने के लिए, Riccardo का यह लेख पढ़ें.
संभावित गड़बड़ियां (ज़्यादातर IAM / अनुमतियों से जुड़ी)
इस समाधान को बनाते समय, मुझे IAM की अनुमतियों से जुड़ी कुछ समस्याएं आईं. मैं उन्हें यहां जोड़ूंगा, ताकि आपको इन गड़बड़ियों के बारे में पता चल सके और इन्हें ठीक करने के कुछ आइडिया मिल सकें.
गड़बड़ी: सेवा खाते के लिए ज़रूरी अनुमतियां नहीं हैं
- ध्यान दें कि GCS बकेट को सुनने वाले GCF फ़ंक्शन को डिप्लॉय करने के लिए, आपको उस सेवा खाते के लिए सही अनुमतियां सेट अप करनी होंगी जिसका इस्तेमाल इस काम के लिए किया जा रहा है. जैसा कि इस इमेज में दिखाया गया है:

आपको EventArc API भी चालू करने पड़ सकते हैं. ऐसा करने से, ये एपीआई कुछ मिनटों में पूरी तरह से उपलब्ध हो जाएंगे.
गड़बड़ी: Cloud Run invoker मौजूद नहीं है
- GCF की अनुमतियां देने के लिए यूज़र इंटरफ़ेस (यूआई) से मिली एक और टिप्पणी यह है ( Cloud Run Invoker की भूमिका):

इस गड़बड़ी को ठीक करने के लिए, इमेज में दिए गए निर्देश को चलाएं. यह निर्देश, 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 में फिर से रैम जोड़ें. यूज़र इंटरफ़ेस (यूआई) में इसे आसानी से किया जा सकता है. यहां एक संभावित टक्कर दिखाई गई है:

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

इस समस्या को ठीक करना आसान है. इसके लिए, IAM पर जाएं और अपने सेवा खाते को "Pub/Sub पब्लिशर" की भूमिका दें.
गड़बड़ी: Vertex AI का इस्तेमाल नहीं किया गया है
अगर आपको यह गड़बड़ी मिलती है, तो:
Permission Denied: 403 Vertex AI API has not been used in project YOUR_PROJECT before or it is disabled. इसे चालू करने के लिए, https://console.developers.google.com/apis/api/aiplatform.googleapis.com/overview?project=YOR_PROJECT पर जाएं
आपको सिर्फ़ Vertex AI API चालू करने होंगे. सभी ज़रूरी एपीआई चालू करने का सबसे आसान तरीका यह है:
- https://console.cloud.google.com/vertex-ai
- "सुझाए गए सभी एपीआई चालू करें" पर क्लिक करें.

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

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

यह लेखक का पसंदीदा विषय है, क्योंकि रिकार्डो Google Cloud के एसआरई / DevOps विभाग में काम करते हैं.
(ओपन-एंडेड) इस ऐप्लिकेशन के लिए एसएलआई और एसएलओ बनाओ
अगर आपको यह पता ही नहीं चल पा रहा है कि कोई ऐप्लिकेशन कब काम नहीं कर रहा है, तो वह ऐप्लिकेशन कितना अच्छा है?
एसएलओ क्या होता है?
ओह! Google ने एसएलओ का आविष्कार किया! इसके बारे में ज़्यादा जानने के लिए, हम आपको यह लेख पढ़ने का सुझाव देते हैं:
- SRE Book - chapter 2 - Implementing SLOs. ( 👉 SREbooks के बारे में ज़्यादा जानकारी)
- एसएलओ की कला ( शानदार वीडियो). यह ट्रेनिंग, अपनी सेवा के लिए सही एसएलओ बनाने के बारे में ज़्यादा जानने के लिए बहुत अच्छी है.
- Coursera पर SRE कोर्स. मैंने इसमें योगदान दिया है!
पहला चरण: उपलब्धता से जुड़ा एसएलआई/एसएलओ बनाना
आइए, उपलब्धता के एसएलओ से शुरुआत करते हैं. यह सबसे आसान है और शायद सबसे ज़रूरी चीज़ है जिसे आपको मेज़र करना है.
अच्छी बात यह है कि Cloud Run में, पहले से ही एसएलओ की सुविधा उपलब्ध है. इसके लिए, Istio का इस्तेमाल किया जाता है.
ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने के बाद, इसे आसानी से किया जा सकता है. इसमें सिर्फ़ 30 सेकंड लगते हैं.
- Cloud Run पेज पर जाएं.
- अपने ऐप्लिकेशन पर क्लिक करें/उसे चुनें.
SLOsटैब चुनें.- "+ SLO बनाएं" पर क्लिक करें.
- उपलब्धता, अनुरोध पर उपलब्ध है
- जारी रखें
- कैलेंडर के मुताबिक हर महीने / 99%.
- "एसएलओ बनाएं" पर क्लिक करें.

दूसरा चरण: इस एसएलओ के लिए सूचनाएं पाने की सुविधा सेट अप करना
हमारा सुझाव है कि आप दो सूचनाएं बनाएं:
- एक कम बर्नरेट ("स्लोबर्न") वाला, जो आपको ईमेल से सूचना देगा (कम प्राथमिकता वाले टिकट जैसा).
- ज़्यादा बर्नरेट ("फ़ास्टबर्न") वाला एक, ताकि आपको एसएमएस के ज़रिए सूचना दी जा सके (ज़्यादा प्राथमिकता वाले टिकट / पेजर की तरह काम करता है)
पहले वाले SLO tab पर जाएं.
यह दो बार करें:

- "एसएलओ सूचना बनाएं" पर क्लिक करें. यह दाईं ओर मौजूद, प्लस के निशान वाला 🔔 बटन है
- लुकबैक अवधि, खर्च की दर का थ्रेशोल्ड:
- [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 का इस्तेमाल दो वर्शन में किया जा सकता है:
- Vertex AI. "Enterprise way" को आपके GCP के साथ जोड़ा गया है. इसके बारे में हमने सातवें चैप्टर (GCF+Gemini) में बताया है. सभी पुष्टि अपने-आप हो जाती है और सेवाएं आपस में आसानी से कनेक्ट हो जाती हैं.
- 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 का जवाब बिलकुल सही था. इसका मतलब है कि मुझे उसमें कोई बदलाव नहीं करना पड़ा:

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

ध्यान दें: कोड को इमेज के तौर पर चिपकाया गया है, क्योंकि हम आपको कोड लेने के लिए बढ़ावा नहीं देना चाहते. इसके बजाय, हम चाहते हैं कि Gemini आपके लिए कोड लिखे. इसके लिए, आपको अपने क्रिएटिव यूज़र इंटरफ़ेस (यूआई)/फ़्रंटएंड की सीमाओं के बारे में बताना होगा. हमारा भरोसा करें, इसके बाद आपको बहुत छोटे-मोटे बदलाव करने होंगे.
सुरक्षा
इस चार घंटे की वर्कशॉप में, इस ऐप्लिकेशन को सुरक्षित करने के बारे में नहीं बताया जाएगा. ऐसा इसलिए, क्योंकि इसमें एक से दो घंटे और लग जाएंगे.
हालांकि, यह विषय बहुत अहम है! हमने SECURITY में कुछ आइडिया इकट्ठा किए हैं.
12. बधाई हो!
बधाई हो 🎉🎉🎉 , आपने Google Cloud की मदद से अपने लेगसी PHP ऐप्लिकेशन को अपग्रेड कर लिया है.

इस कोडलैब में, आपने इनके बारे में जानकारी पाई:
- Google Cloud SQL में डेटाबेस को डिप्लॉय करने का तरीका और अपने मौजूदा डेटाबेस को इसमें माइग्रेट करने का तरीका.
- Docker और Buildpacks की मदद से, अपने PHP ऐप्लिकेशन को कंटेनर में बदलने और उसकी इमेज को Google Cloud Artifact Registry में सेव करने का तरीका
- कंटेनर में मौजूद ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने और उसे Cloud SQL के साथ चलाने का तरीका
- Google Secret Manager का इस्तेमाल करके, संवेदनशील कॉन्फ़िगरेशन पैरामीटर (जैसे कि डीबी पासवर्ड) को गोपनीय तरीके से सेव/इस्तेमाल करने का तरीका
- Google Cloud Build की मदद से, CI/CD पाइपलाइन को कैसे सेट अप करें, ताकि GitHub रिपॉज़िटरी में कोड पुश करने पर, आपका PHP ऐप्लिकेशन अपने-आप बन जाए और डिप्लॉय हो जाए.
- अपने ऐप्लिकेशन के संसाधनों को "क्लाउडिफ़ाई" करने के लिए, Cloud Storage का इस्तेमाल कैसे करें
- ऐप्लिकेशन कोड में बदलाव किए बिना, Google Cloud पर बेहतरीन वर्कफ़्लो बनाने के लिए, सर्वरलेस टेक्नोलॉजी का इस्तेमाल कैसे करें.
- किसी काम के लिए, Gemini की मल्टीमॉडल सुविधाओं का इस्तेमाल करें.
- Google Cloud में एसआरई के सिद्धांतों को लागू करना
Google Cloud की मदद से ऐप्लिकेशन को मॉडर्न बनाने के लिए, यह एक अच्छी शुरुआत है!
🔁 सुझाव, राय या शिकायत
अगर आपको इस वर्कशॉप के बारे में कुछ बताना है, तो यह फ़ीडबैक फ़ॉर्म भरें.
हम आपके सुझावों और राय का स्वागत करते हैं. साथ ही, हमें उन कोड के लिए पीआरs भी भेजें जिन पर आपको गर्व है.
🙏 धन्यवाद
लेखक, Datatonic के Mirko Gilioli और Maurizio Ipsale को लेख लिखने और समाधान की जांच करने में मदद करने के लिए धन्यवाद देना चाहता है.
