Teleraform की मदद से, Firebase प्रोजेक्ट और प्रॉडक्ट सेट अप और मैनेज करें

1. शुरुआती जानकारी

लक्ष्य

Terraform का इस्तेमाल करके, Firebase प्रोजेक्ट को सेट अप और मैनेज किया जा सकता है. इसमें प्रोग्राम के हिसाब से इन्फ़्रास्ट्रक्चर और Firebase प्रॉडक्ट का कॉन्फ़िगरेशन भी शामिल है.

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

अगर आपको Terraform की मदद से, Firebase प्रोजेक्ट और प्रॉडक्ट सेट अप और मैनेज करने का तरीका जानना है, तो यह कोडलैब आपके लिए है!

आपको क्या सीखने को मिलेगा

  • Terraform कॉन्फ़िगरेशन फ़ाइल बनाने का तरीका (*.tf)
  • अपने इन्फ़्रास्ट्रक्चर को मैनेज करने के लिए, Terraform CLI कमांड का इस्तेमाल कैसे करें
  • अपने संसाधनों और सेवाओं को अपडेट करने के लिए, कॉन्फ़िगरेशन में बदलाव करने का तरीका
  • अपने कॉन्फ़िगरेशन को किसी असली वेब ऐप्लिकेशन (जिसे Friendly Chat कहा जाता है) पर लागू करने का तरीका
  • अलग-अलग एनवायरमेंट (प्रोडक्शन, स्टेजिंग वगैरह) में पैरलल (और सिंक किए गए) कॉन्फ़िगरेशन को कैसे तय करें

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

इस कोडलैब को पूरा करने के लिए, आपको Terraform और इसकी शब्दावली की बुनियादी जानकारी होनी चाहिए. साथ ही, आपको इन ज़रूरी शर्तों के बारे में भी पता होना चाहिए:

  • Terraform इंस्टॉल करें और उनके आधिकारिक ट्यूटोरियल का इस्तेमाल करके, Terraform के बारे में जानें

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

  • वेब ऐप्लिकेशन के लिए सैंपल कोड - कोडलैब के अगले चरण में इस कोड को डाउनलोड करें
  • पैकेज मैनेजर npm (जो आम तौर पर Node.js के साथ आता है) - इन टूल को इंस्टॉल करें
  • Firebase CLI - इस सीएलआई को इंस्टॉल करें और लॉग इन करें

2. स्टार्टिंग कोड पाना

इस कोडलैब में, Terraform के ज़रिए उपलब्ध कराई गई सुविधाओं को किसी असली वेब ऐप्लिकेशन के साथ टेस्ट किया जा सकता है. हमारा सुझाव है कि आप ऐसा करें, ताकि आपको Terraform के ज़रिए उपलब्ध कराए गए संसाधनों को इस्तेमाल करने के लिए ज़रूरी सभी चरणों के बारे में पता चल सके.

कमांड लाइन से, कोडलैब की GitHub रिपॉज़िटरी को क्लोन करें:

git clone https://github.com/firebase/codelab-friendlychat-web

इसके अलावा, अगर आपने git इंस्टॉल नहीं किया है, तो रिपॉज़िटरी को ZIP फ़ाइल के तौर पर डाउनलोड किया जा सकता है.

3. Terraform कॉन्फ़िगरेशन बनाना

Terraform सेट अप करना

  1. डाउनलोड किए गए सैंपल ऐप्लिकेशन के कोडबेस में, web डायरेक्ट्री के रूट पर जाएं.
  2. उस डायरेक्ट्री के रूट में, main.tf नाम की Terraform कॉन्फ़िगरेशन फ़ाइल बनाएं. इसमें यह शुरुआती सेटअप शामिल करें:

    main.tf
    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 4.0"
        }
      }
    }
    
    # Configure the provider not to use the specified project for quota check.
    # This provider should only be used during project creation and initializing services.
    provider "google-beta" {
      alias                 = "no_user_project_override"
      user_project_override = false
    }
    
    # Configure the provider that uses the new project's quota.
    provider "google-beta" {
      user_project_override = true
    }
    

google-beta सेवा देने वाली हर कंपनी के पास user_project_override नाम का एक एट्रिब्यूट होता है. इससे यह तय होता है कि Terraform से किए जाने वाले ऑपरेशन की कोटा जांच कैसे की जाएगी. ज़्यादातर संसाधनों को उपलब्ध कराने के लिए, आपको user_project_override = true का इस्तेमाल करना चाहिए. इसका मतलब है कि आपको अपने Firebase प्रोजेक्ट के लिए कोटे की जांच करनी चाहिए. हालांकि, अपने नए प्रोजेक्ट को इस तरह से सेट अप करने के लिए कि वह कोटे की जांच कर सके, आपको पहले user_project_override=false का इस्तेमाल करना होगा. Terraform alias सिंटैक्स की मदद से, इस कोडलैब के अगले चरणों में, दोनों प्रोवाइडर सेटअप के बीच अंतर किया जा सकता है.

डायरेक्ट्री में Terraform शुरू करना

पहली बार नया कॉन्फ़िगरेशन बनाने के लिए, कॉन्फ़िगरेशन में बताए गए प्रोवाइडर को डाउनलोड करना ज़रूरी है.

इस इनिशियलाइज़ेशन को करने के लिए, अपनी main.tf कॉन्फ़िगरेशन फ़ाइल की रूट डायरेक्ट्री से यह कमांड चलाएं:

terraform init

4. Terraform की मदद से Firebase प्रोजेक्ट बनाना

"Firebase प्रोजेक्ट बनाने" के लिए, यह याद रखना ज़रूरी है कि हर Firebase प्रोजेक्ट, असल में एक Google Cloud प्रोजेक्ट होता है. इसमें सिर्फ़ Firebase सेवाएं चालू होती हैं.

Google Cloud प्रोजेक्ट और एपीआई के लिए ब्लॉक जोड़ना

  1. सबसे पहले, Google Cloud प्रोजेक्ट को चालू करें.

    अपनी main.tf कॉन्फ़िगरेशन फ़ाइल में, यह रिसॉर्स ब्लॉक जोड़ें.

    आपको अपना प्रोजेक्ट का नाम (जैसे कि "Terraform FriendlyChat Codelab") और प्रोजेक्ट आईडी (जैसे कि "terraform-codelab-your-initials") डालना होगा. ध्यान दें कि name वैल्यू का इस्तेमाल सिर्फ़ Firebase इंटरफ़ेस में किया जाता है. यह उपयोगकर्ताओं को नहीं दिखती. हालांकि, project_id वैल्यू से Google को आपके प्रोजेक्ट की पहचान करने में मदद मिलती है. इसलिए, पक्का करें कि आपने कोई यूनीक वैल्यू दी हो. main.tf
    ...
    
    # Create a new Google Cloud project.
    resource "google_project" "default" {
      provider = google-beta.no_user_project_override
    
      name            = "<PROJECT_NAME_OF_YOUR_PROJECT>"
      project_id      = "<PROJECT_ID_OF_YOUR_PROJECT>"
    
      # Required for the project to display in any list of Firebase projects.
      labels = {
        "firebase" = "enabled"
      }
    }
    
  2. इसके बाद, आपको ज़रूरी एपीआई चालू करने होंगे: Service Usage API और Firebase Management API.

    Firebase कंसोल का इस्तेमाल करके Firebase प्रोजेक्ट बनाते समय, एपीआई चालू करने का काम आम तौर पर बैकग्राउंड में होता है. हालांकि, Terraform को यह काम करने के लिए साफ़ तौर पर निर्देश देना होता है.

    अपनी main.tf कॉन्फ़िगरेशन फ़ाइल में (नए Cloud प्रोजेक्ट को बनाने वाले ब्लॉक के ठीक नीचे), यह संसाधन ब्लॉक जोड़ें:

    main.tf
    ...
    
    # Enable the required underlying Service Usage API.
    resource "google_project_service" "serviceusage" {
      provider = google-beta.no_user_project_override
    
      project = google_project.default.project_id
      service = "serviceusage.googleapis.com"
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enable the required underlying Firebase Management API.
    resource "google_project_service" "firebase" {
      provider = google-beta.no_user_project_override
    
      project = google_project.default.project_id
      service = "firebase.googleapis.com"
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    Service Usage API को चालू करने पर, आपका नया प्रोजेक्ट कोटे की जांच कर पाएगा! इसलिए, इसके बाद संसाधन उपलब्ध कराने और सेवा चालू करने के लिए, आपको user_project_override के साथ सेवा देने वाली कंपनी का इस्तेमाल करना चाहिए. इसके लिए, किसी अन्य नाम की ज़रूरत नहीं है.

Firebase की सेवाएं चालू करने के लिए, कोई ब्लॉक जोड़ना

"Firebase प्रोजेक्ट बनाने" के लिए, सबसे आखिर में प्रोजेक्ट पर Firebase सेवाएं चालू करना ज़रूरी है.

अपनी main.tf कॉन्फ़िगरेशन फ़ाइल में, यहां दिया गया रिसॉर्स ब्लॉक जोड़ें.

जैसा कि ऊपर बताया गया है, ध्यान दें कि यह संसाधन ब्लॉक, with user_project_override प्रोवाइडर का इस्तेमाल कर रहा है. इसके लिए, किसी उपनाम की ज़रूरत नहीं है.

main.tf

...

# Enable Firebase services for the new project created above.
resource "google_firebase_project" "default" {
  provider = google-beta

  project = google_project.default.project_id

  # Wait until the required APIs are enabled.
  depends_on = [
    google_project_service.firebase,
    google_project_service.serviceusage,
  ]
}

ऊपर दिए गए संसाधन ब्लॉक में, आपको depends_on क्लॉज़ दिख सकता है. इससे Terraform को यह पता चलता है कि उसे एपीआई के चालू होने का इंतज़ार करना है. इस क्लॉज़ के बिना, Terraform को डिपेंडेंसी के बारे में पता नहीं चलता. साथ ही, एक साथ कई रिसॉर्स उपलब्ध कराते समय गड़बड़ियां हो सकती हैं.

कॉन्फ़िगरेशन लागू करना

  1. नए संसाधन उपलब्ध कराने और कॉन्फ़िगरेशन फ़ाइल में बताए गए एपीआई चालू करने के लिए, उसी डायरेक्ट्री के रूट से यह कमांड चलाएं जिसमें आपकी main.tf फ़ाइल मौजूद है. यह फ़ाइल web होनी चाहिए:
    terraform apply
    
  2. टर्मिनल में, Terraform उन कार्रवाइयों का प्लान प्रिंट करता है जिन्हें वह पूरा करेगा.

    अगर सब कुछ आपकी उम्मीद के मुताबिक है, तो yes डालकर कार्रवाइयों को मंज़ूरी दें.

    main.tf
    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
      + create
    
    Terraform will perform the following actions:
    
      # google_firebase_project.default will be created
      + resource "google_firebase_project" "default" {
          + display_name   = (known after apply)
          + id             = (known after apply)
          + project        = "terraform-friendlychat-codelab"
          + project_number = (known after apply)
        }
    
      # google_project.default will be created
      + resource "google_project" "default" {
          + auto_create_network = true
          + id                  = (known after apply)
          + labels              = {
              + "firebase" = "enabled"
            }
          + name                = "Terraform FriendlyChat Codelab"
          + number              = (known after apply)
          + project_id          = "terraform-friendlychat-codelab"
          + skip_delete         = (known after apply)
        }
    
      # google_project_service.firebase will be created
      + resource "google_project_service" "firebase" {
          + disable_on_destroy = false
          + id                 = (known after apply)
          + project            = "terraform-friendlychat-codelab"
          + service            = "firebase.googleapis.com"
        }
    
      # google_project_service.serviceusage will be created
      + resource "google_project_service" "serviceusage" {
          + disable_on_destroy = false
          + id                 = (known after apply)
          + project            = "terraform-friendlychat-codelab"
          + service            = "serviceusage.googleapis.com"
        }
    
    Plan: 4 to add, 0 to change, 0 to destroy.
    
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes # <----
    

ध्यान दें कि अगर आपको बदलावों को लागू किए बिना सिर्फ़ उनकी झलक देखनी है, तो terraform plan कमांड का इस्तेमाल करें.

बदलावों की पुष्टि करना

Terraform के चलने के बाद, Terraform की मदद से उपलब्ध कराई गई सभी सेवाओं और संसाधनों की स्थिति की जांच की जा सकती है. इसके लिए, यह कमांड चलाएं:

terraform show

यहां एक उदाहरण दिया गया है, जिससे पता चलता है कि आपको प्रिंट किए गए दस्तावेज़ में क्या दिखेगा. आपकी स्थिति में, आपके प्रोजेक्ट के हिसाब से वैल्यू शामिल होंगी.

# google_firebase_project.default:
resource "google_firebase_project" "default" {
    display_name   = "Terraform FriendlyChat Codelab"
    id             = "projects/terraform-friendlychat-codelab"
    project        = "terraform-friendlychat-codelab"
    project_number = "000000000"
}

# google_project.default:
resource "google_project" "default" {
    auto_create_network = true
    id                  = "projects/terraform-friendlychat-codelab"
    labels              = {
        "firebase" = "enabled"
    }
    name                = "Terraform FriendlyChat Codelab"
    number              = "000000000"
    project_id          = "terraform-friendlychat-codelab"
}

# google_project_service.firebase:
resource "google_project_service" "firebase" {
    disable_on_destroy = false
    id                 = "terraform-friendlychat-codelab/firebase.googleapis.com"
    project            = "terraform-friendlychat-codelab"
    service            = "firebase.googleapis.com"
}

# google_project_service.serviceusage:
resource "google_project_service" "serviceusage" {
    disable_on_destroy = false
    id                 = "terraform-friendlychat-codelab/serviceusage.googleapis.com"
    project            = "terraform-friendlychat-codelab"
    service            = "serviceusage.googleapis.com"
}

इसके अलावा, Firebase कंसोल में जाकर, यह पुष्टि की जा सकती है कि प्रोजेक्ट बनाया गया है.

Firebase कंसोल पर चुना गया Terraform FriendlyChat Codelab प्रोजेक्ट

5. Terraform की मदद से, Firebase ऐप्लिकेशन रजिस्टर करना

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

वेब ऐप्लिकेशन रजिस्टर करने के लिए ब्लॉक जोड़ना

अपने वेब ऐप्लिकेशन को Firebase प्रोजेक्ट में रजिस्टर करने के लिए, अपनी main.tf फ़ाइल में यह रिसॉर्स ब्लॉक जोड़ें.

आपको अपने वेब ऐप्लिकेशन के लिए, खुद का display_name तय करना होगा. ध्यान दें कि इस नाम का इस्तेमाल सिर्फ़ Firebase इंटरफ़ेस में किया जाता है. यह असली उपयोगकर्ताओं को नहीं दिखता.

main.tf

...

# Create a Firebase Web App in the new project created above.
resource "google_firebase_web_app" "default" {
  provider = google-beta

  project      = google_firebase_project.default.project
  display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
  deletion_policy = "DELETE"
}

कॉन्फ़िगरेशन लागू करना

  1. नई संसाधन फ़ाइल बनाने के लिए, उसी डायरेक्ट्री के रूट से यह कमांड चलाएं जिसमें आपकी main.tf फ़ाइल मौजूद है. आपकी main.tf फ़ाइल का नाम web होना चाहिए.
    terraform apply
    
    ध्यान दें कि इस कमांड से, नया Google Cloud प्रोजेक्ट फिर से नहीं बनाया जाएगा. Terraform को पता चल जाएगा कि इस प्रोजेक्ट आईडी वाला प्रोजेक्ट पहले से मौजूद है. इसके बाद, वह प्रोजेक्ट की मौजूदा स्थिति की तुलना .tf फ़ाइल में मौजूद जानकारी से करेगा. साथ ही, जो भी बदलाव ज़रूरी होंगे उन्हें लागू करेगा.
  2. कार्रवाइयों के प्रिंट किए गए प्लान की समीक्षा करें. अगर सब कुछ आपकी उम्मीद के मुताबिक है, तो कार्रवाइयों को मंज़ूरी देने के लिए yes टाइप करें और Enter दबाएं.

बदलावों की पुष्टि करना

नई प्रोविज़न की गई संसाधन की स्थिति की जांच करने के लिए, यह कमांड चलाएं:

terraform show

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

6. Firebase Authentication सेट अप करना

किसी भी ऐप्लिकेशन के लिए पुष्टि करना एक ज़रूरी प्रोसेस है. अगर आपको अपने वेब ऐप्लिकेशन में, उपयोगकर्ताओं को उनके Google खातों से साइन इन करने की अनुमति देनी है, तो Firebase Authentication को चालू करें. इसके बाद, 'Google से साइन इन करें' सुविधा को सेट अप करें.

ध्यान दें कि इस कोडलैब में, Firebase Authentication को सेट अप करने के लिए दो अलग-अलग विकल्प दिए गए हैं:

  • पहला विकल्प (सुझाया गया): कंसोल में Firebase Authentication सेट अप करें. इसके लिए, GCIP की ज़रूरत नहीं होती.
    • इस विकल्प का इस्तेमाल करने का मतलब है कि आपको अपने नए प्रोजेक्ट को किसी Cloud Billing खाते से लिंक करने की ज़रूरत नहीं है.
  • दूसरा विकल्प: Google Cloud Identity Platform (GCIP) API का इस्तेमाल करके, Terraform के ज़रिए Firebase Authentication सेट अप करें.
    • इस विकल्प का इस्तेमाल करने का मतलब है कि आपको अपने नए प्रोजेक्ट को Cloud Billing खाते से जोड़ना होगा. ऐसा इसलिए, क्योंकि GCIP के लिए ज़रूरी है कि प्रोजेक्ट, Blaze प्लान पर हो.

पहला विकल्प: Firebase कंसोल का इस्तेमाल करके, पुष्टि करने की सुविधा सेट अप करना

Firebase कंसोल का इस्तेमाल करके Firebase Authentication सेट अप करने के लिए, आपके प्रोजेक्ट का Blaze प्राइसिंग प्लान पर होना ज़रूरी नहीं है.

Firebase Authentication सेट अप करने और Google से साइन-इन करने का तरीका यहां बताया गया है:

  1. Firebase कंसोल में, बाएं पैनल में मौजूद Build सेक्शन पर जाएं.
  2. पुष्टि पर क्लिक करें. इसके बाद, शुरू करें पर क्लिक करें. इसके बाद, साइन-इन करने का तरीका टैब पर क्लिक करें. इसके अलावा, सीधे इस टैब पर जाने के लिए, यहां क्लिक करें.
  3. नई कंपनी जोड़ें पर क्लिक करें. इसके बाद, अन्य कंपनियां सेक्शन में जाकर, Google को चुनें.
  4. चालू करें टॉगल को चालू करें.
  5. अपने ऐप्लिकेशन का सार्वजनिक नाम, FriendlyChat जैसा कुछ सेट करें. यह ज़रूरी नहीं है कि यह नाम दुनिया भर में यूनीक हो.
  6. ड्रॉपडाउन मेन्यू से, प्रोजेक्ट से जुड़ी सहायता के लिए ईमेल पता चुनें. इसके बाद, सेव करें पर क्लिक करें.Firebase कंसोल पर Firebase Auth को कॉन्फ़िगर करना
  7. आपको Google को साइन इन करने की सुविधा देने वाली कंपनी के तौर पर चालू किया गया दिखेगा.Firebase कंसोल के &#39;Authentication&#39; पेज पर, Google से साइन-इन करने की सुविधा चालू है

दूसरा विकल्प: Google Cloud Identity Platform (GCIP) API का इस्तेमाल करके, Terraform के ज़रिए पुष्टि करने की सुविधा सेट अप करना

Terraform के ज़रिए Firebase Authentication सेट अप करने के लिए, आपको GCIP API का इस्तेमाल करना होगा. इसका मतलब है कि प्रोजेक्ट को ब्लेज़ प्राइसिंग प्लान पर होना चाहिए. अपने Firebase प्रोजेक्ट को Blaze प्लान पर अपग्रेड करने के लिए, प्रोजेक्ट को Cloud Billing खाते से जोड़ें.

Terraform के ज़रिए बिलिंग की सुविधा चालू करना

  1. अगर आपके पास पहले से Cloud Billing खाता नहीं है, तो सबसे पहले Google Cloud Console में एक नया खाता बनाएं. ऐसा करते समय, इसके बिलिंग खाते के आईडी को नोट कर लें. बिलिंग खाता आईडी, आपके प्रोजेक्ट से जुड़े बिलिंग खाता आईडी के बिलिंग पेज पर मौजूद होता है.Google Cloud Console का इस्तेमाल करके बिलिंग खाता चालू करना
  2. Terraform के ज़रिए अपने प्रोजेक्ट में बिलिंग चालू करने के लिए, अपनी main.tf फ़ाइल में मौजूद google_project रिसॉर्स में billing_account एट्रिब्यूट जोड़ें:

    main.tf
    ...
    
    # Create a new Google Cloud project.
    resource "google_project" "default" {
      provider = google-beta.no_user_project_override
    
      name            = "<PROJECT_NAME_OF_YOUR_PROJECT>"
      project_id      = "<PROJECT_ID_OF_YOUR_PROJECT>"
      billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Add this line with your Cloud Billing account ID
    
      # Required for the project to display in any list of Firebase projects.
      labels = {
        "firebase" = "enabled"
      }
    }
    
    ...
    

Terraform की मदद से, Firebase Authentication और 'Google से साइन इन करें' सुविधा चालू करना

  1. GCIP के साथ Firebase Authentication को प्रोविज़न करने के लिए, अपनी main.tf फ़ाइल में ये संसाधन ब्लॉक जोड़ें:

    main.tf
    ...
    
    # Enable the Identity Toolkit API.
    resource "google_project_service" "auth" {
      provider = google-beta
    
      project  = google_firebase_project.default.project
      service =  "identitytoolkit.googleapis.com"
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Create an Identity Platform config.
    # Also, enable Firebase Authentication using Identity Platform (if Authentication isn't yet enabled).
    resource "google_identity_platform_config" "auth" {
      provider = google-beta
      project  = google_firebase_project.default.project
    
      # For example, you can configure to auto-delete anonymous users.
      autodelete_anonymous_users = true
    
      # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication.
      depends_on = [
        google_project_service.auth,
      ]
    }
    
  2. 'Google से साइन इन करें' सुविधा चालू करने के लिए, आपके पास OAuth क्लाइंट होना चाहिए. यह सेटअप करने के लिए, Google Cloud Console के एपीआई और सेवाएं सेक्शन पर जाएं.
  3. इस प्रोजेक्ट के लिए पहली बार क्लाइंट आईडी बनाया जा रहा है. इसलिए, आपको उस स्क्रीन को कॉन्फ़िगर करना होगा जहां OAuth को सहमति दी जाती है.
    1. OAuth सहमति स्क्रीन पेज खोलें. इसके बाद, अभी-अभी बनाया गया प्रोजेक्ट चुनें.
    2. उपयोगकर्ता का टाइप को बाहरी पर सेट करें. इसके बाद, बनाएं पर क्लिक करें.
    3. अगली स्क्रीन पर, यह जानकारी भरें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
      • अपने ऐप्लिकेशन का ऐप्लिकेशन का नाम, FriendlyChat जैसा कुछ सेट करें. यह नाम दुनिया भर में यूनीक होना ज़रूरी नहीं है.
      • ड्रॉपडाउन मेन्यू से, उपयोगकर्ता सहायता के लिए ईमेल पता चुनें.
      • डेवलपर की संपर्क जानकारी के लिए ईमेल पता डालें.
    4. अगली स्क्रीन पर, यह जानकारी भरें:
      • स्कोप पेज पर डिफ़ॉल्ट सेटिंग स्वीकार करें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
      • टेस्ट यूज़र पेज पर डिफ़ॉल्ट सेटिंग स्वीकार करें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
      • खास जानकारी देखें. इसके बाद, डैशबोर्ड पर वापस जाएं पर क्लिक करें.
      Google Cloud Console का इस्तेमाल करके, OAuth2 क्लाइंट को कॉन्फ़िगर करना
  4. क्रेडेंशियल पेज पर जाकर, OAuth क्लाइंट सेट अप करें. इसके लिए, यह तरीका अपनाएं:
    1. क्रेडेंशियल बनाएं पर क्लिक करें. इसके बाद, OAuth क्लाइंट आईडी चुनें.
    2. ऐप्लिकेशन टाइप ड्रॉप-डाउन से, वेब ऐप्लिकेशन चुनें.
    3. नाम फ़ील्ड में, अपने ऐप्लिकेशन का नाम डालें. उदाहरण के लिए, FriendlyChat (यह नाम, ग्लोबल लेवल पर यूनीक होना ज़रूरी नहीं है).
    4. अपने ऐप्लिकेशन के यूआरएल को इस OAuth क्लाइंट का इस्तेमाल करने की अनुमति दें. इसके लिए, यह तरीका अपनाएं:
      • अनुमति वाले JavaScript ऑरिजिन में जाकर, यूआरआई जोड़ें पर क्लिक करें. इसके बाद,
        https://<PROJECT_ID>.firebaseapp.com डालें. यहां <PROJECT_ID> वह प्रोजेक्ट आईडी है जिसे आपने main.tf में सेट किया है.
      • रीडायरेक्ट करने के लिए अनुमति वाले यूआरआई में जाकर, यूआरआई जोड़ें पर क्लिक करें. इसके बाद,
        https://<PROJECT_ID>.firebaseapp.com/__/auth/handler डालें. यहां <PROJECT_ID> वह प्रोजेक्ट आईडी है जिसे आपने main.tf में सेट किया है.
    5. सेव करें पर क्लिक करें.
    Google Cloud Console के क्रेडेंशियल पेज से OAuth2 क्लाइंट आईडी और सीक्रेट पाना
  5. अपने OAuth क्लाइंट आईडी और क्लाइंट सीक्रेट का इस्तेमाल करके, 'Google से साइन इन करें' सुविधा चालू करने के लिए, अपनी main.tf फ़ाइल में यह ब्लॉक जोड़ें:

    main.tf
    ...
    
    variable "oauth_client_secret" {
      type = string
    
      description = "OAuth client secret. For this codelab, you can pass in this secret through the environment variable TF_VAR_oauth_client_secret. In a real app, you should use a secret manager service."
    
      sensitive = true
    }
    
    resource "google_identity_platform_default_supported_idp_config" "google_sign_in" {
      provider = google-beta
      project  = google_firebase_project.default.project
    
      enabled       = true
      idp_id        = "google.com"
      client_id     = "<YOUR_OAUTH_CLIENT_ID>"
      client_secret = var.oauth_client_secret
    
      depends_on = [
         google_identity_platform_config.auth
      ]
    }
    

कॉन्फ़िगरेशन लागू करना

  1. अपनी कॉन्फ़िगरेशन फ़ाइल के हिसाब से पुष्टि करने की सुविधा सेट अप करने के लिए, उसी डायरेक्ट्री के रूट से ये कमांड चलाएं जिसमें आपकी main.tf फ़ाइल मौजूद है. यह फ़ाइल web होनी चाहिए:
    export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
    
    terraform apply
    
    ध्यान दें कि terraform apply को चलाने से, नया Google Cloud प्रोजेक्ट नहीं बनेगा. Terraform को पता चल जाएगा कि इस प्रोजेक्ट आईडी वाला प्रोजेक्ट पहले से मौजूद है. इसके बाद, वह प्रोजेक्ट की मौजूदा स्थिति की तुलना .tf फ़ाइल में मौजूद जानकारी से करेगा. इसके बाद, यह उन बदलावों को लागू करेगा जो इसे मिलेंगे.
  2. कार्रवाइयों के प्रिंट किए गए प्लान की समीक्षा करें. अगर सब कुछ आपकी उम्मीद के मुताबिक है, तो कार्रवाइयों को मंज़ूरी देने के लिए yes टाइप करें और Enter दबाएं.

बदलावों की पुष्टि करना

  1. Firebase कंसोल में, बाएं पैनल में मौजूद Build सेक्शन पर जाएं.
  2. पुष्टि पर क्लिक करें. इसके बाद, साइन-इन करने का तरीका टैब पर क्लिक करें. सीधे इस टैब पर जाने के लिए, यहां क्लिक करें.
  3. आपको Google को साइन इन करने की सुविधा देने वाली कंपनी के तौर पर चालू किया गया दिखेगा.Firebase कंसोल के &#39;Authentication&#39; पेज पर, Google से साइन-इन करने की सुविधा चालू है

7. Firestore डेटाबेस और उसके सुरक्षा नियम सेट अप करना

इस कोडलैब के वेब ऐप्लिकेशन के लिए, आपको Firestore डेटाबेस में असली उपयोगकर्ताओं के बीच के मैसेज सेव करने होंगे.

  1. ज़रूरी एपीआई चालू करने और डेटाबेस इंस्टेंस उपलब्ध कराने के लिए, अपनी main.tf फ़ाइल में ये संसाधन ब्लॉक जोड़ें:

    main.tf
    ...
    
    # Enable required APIs for Cloud Firestore.
    resource "google_project_service" "firestore" {
      provider = google-beta
    
      project  = google_firebase_project.default.project
      for_each = toset([
        "firestore.googleapis.com",
        "firebaserules.googleapis.com",
      ])
      service = each.key
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Provision the Firestore database instance.
    resource "google_firestore_database" "default" {
      provider                    = google-beta
    
      project                     = google_firebase_project.default.project
      name                        = "(default)"
      # See available locations:
      # https://firebase.google.com/docs/firestore/locations
      location_id                 = "<NAME_OF_DESIRED_REGION>"
      # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs,
      # authentication, and Firebase Security Rules.
      type                        = "FIRESTORE_NATIVE"
      concurrency_mode            = "OPTIMISTIC"
    
      depends_on = [
        google_project_service.firestore
      ]
    }
    
  2. <NAME_OF_DESIRED_REGION> को उस इलाके में बदलें जहां आपको डेटाबेस रखना है.

    प्रोडक्शन ऐप्लिकेशन डेवलप करते समय, आपको इसे ज़्यादातर उपयोगकर्ताओं के आस-पास के इलाके में रखना होगा. साथ ही, इसे Cloud Functions जैसी अन्य Firebase सेवाओं के साथ इस्तेमाल करना होगा. इस कोडलैब के लिए, us-east1 (साउथ कैरोलिना) का इस्तेमाल किया जा सकता है. इसके अलावा, अपने आस-पास के किसी क्षेत्र का इस्तेमाल भी किया जा सकता है. इसके लिए, Cloud Firestore की लोकेशन देखें.
  3. Firebase से ऐक्सेस किए जा सकने वाले हर Firestore डेटाबेस इंस्टेंस को Firebase के सुरक्षा नियमों के तहत सुरक्षित किया जाना चाहिए.

    इस कोडलैब के सैंपल कोड में, firestore.rules फ़ाइल में Firestore के लिए सुरक्षित नियमों का एक सेट दिया गया है. इसे web डायरेक्ट्री के रूट में देखा जा सकता है.
  4. नीचे दिए गए संसाधन ब्लॉक को अपनी main.tf फ़ाइल में जोड़ें, ताकि ये काम किए जा सकें:
    • लोकल firestore.rules फ़ाइल से, Firebase के सुरक्षा नियमों का कोई नियम सेट बनाएं.
    • Firestore इंस्टेंस के लिए नियमों का सेट रिलीज़ करें.
    ध्यान दें कि इन संसाधन ब्लॉक का इस्तेमाल करने से, Firebase console में पब्लिश करें बटन पर क्लिक करने या firebase deploy --only firestore:rules.

    main.tf चलाने जैसा ही काम होता है
    ...
    
    # Create a ruleset of Firestore Security Rules from a local file.
    resource "google_firebaserules_ruleset" "firestore" {
      provider = google-beta
    
      project  = google_firebase_project.default.project
      source {
        files {
          name = "firestore.rules"
          # Write security rules in a local file named "firestore.rules".
          # Learn more: https://firebase.google.com/docs/firestore/security/get-started
          content = file("firestore.rules")
        }
      }
    
      # Wait for Firestore to be provisioned before creating this ruleset.
      depends_on = [
        google_firestore_database.default,
      ]
    }
    
    # Release the ruleset for the Firestore instance.
    resource "google_firebaserules_release" "firestore" {
      provider     = google-beta
    
      name         = "cloud.firestore"  # must be cloud.firestore
      ruleset_name = google_firebaserules_ruleset.firestore.name
      project      = google_firebase_project.default.project
    
      # Wait for Firestore to be provisioned before releasing the ruleset.
      depends_on = [
        google_firestore_database.default,
      ]
    
      lifecycle {
        replace_triggered_by = [
          google_firebaserules_ruleset.firestore
        ]
      }
    }
    
  5. Firestore डेटाबेस को चालू करने और उसके सुरक्षा नियमों को डिप्लॉय करने के लिए, terraform apply चलाएं.
  6. पुष्टि करें कि डेटाबेस चालू हो और उसके सुरक्षा नियम लागू किए गए हों:
    1. Firebase कंसोल में, बाएं पैनल में मौजूद Build सेक्शन पर जाएं.
    2. Firestore डेटाबेस सेक्शन पर जाएं. इसके बाद, नियम टैब पर क्लिक करें.
    Firebase कंसोल का इस्तेमाल करके, Cloud Firestore के नियमों की पुष्टि करना

8. Cloud Storage बकेट और उसके सुरक्षा नियम सेट अप करना

इस कोडलैब के वेब ऐप्लिकेशन के लिए, आपको Cloud Storage बकेट में उन इमेज को सेव करना होगा जिन्हें उपयोगकर्ताओं के बीच शेयर किया जाता है.

  1. ज़रूरी एपीआई चालू करने और Cloud Storage की डिफ़ॉल्ट बकेट उपलब्ध कराने के लिए, अपनी main.tf फ़ाइल में ये संसाधन ब्लॉक जोड़ें.

    ध्यान दें कि आपके प्रोजेक्ट के लिए Cloud Storage की डिफ़ॉल्ट बकेट, Google App Engine के ज़रिए उपलब्ध कराई जाती है. साथ ही, इसकी जगह वही होनी चाहिए जो आपके Firestore डेटाबेस की है. ज़्यादा जानकारी के लिए, App Engine की लोकेशन देखें.

    अगर आपको अपने प्रोजेक्ट में एक से ज़्यादा बकेट चाहिए, तो google_storage_bucket संसाधन का इस्तेमाल करके उन्हें उपलब्ध कराएं. यह इस कोडलैब में नहीं दिखाया गया है.

    main.tf
    ...
    
    # Enable required APIs for Cloud Storage for Firebase.
    resource "google_project_service" "storage" {
      provider = google-beta
    
      project  = google_firebase_project.default.project
      for_each = toset([
        "firebasestorage.googleapis.com",
        "storage.googleapis.com",
      ])
      service = each.key
    
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Provision the default Cloud Storage bucket for the project via Google App Engine.
    resource "google_app_engine_application" "default" {
      provider    = google-beta
    
      project     = google_firebase_project.default.project
      # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location
      # This will set the location for the default Storage bucket and the App Engine App.
      location_id = "<NAME_OF_DESIRED_REGION_FOR_DEFAULT_BUCKET>"  # Must be in the same location as Firestore (above)
    
      # Wait until Firestore is provisioned first.
      depends_on = [
        google_firestore_database.default
      ]
    }
    
    # Make the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.
    resource "google_firebase_storage_bucket" "default-bucket" {
      provider  = google-beta
    
      project   = google_firebase_project.default.project
      bucket_id = google_app_engine_application.default.default_bucket
    }
    
  2. Firebase के लिए ऐक्सेस किए जा सकने वाले हर Cloud Storage बकेट को Firebase के सुरक्षा नियमों के तहत सुरक्षित किया जाना चाहिए.

    इस कोडलैब के सैंपल कोड में, storage.rules फ़ाइल में Firestore के लिए सुरक्षित नियमों का एक सेट दिया गया है. इसे web डायरेक्ट्री के रूट में देखा जा सकता है.
  3. नीचे दिए गए संसाधन ब्लॉक को अपनी main.tf फ़ाइल में जोड़ें, ताकि ये काम किए जा सकें:
    • लोकल फ़ाइल से, Firebase के सुरक्षा नियमों का कोई नियम सेट बनाएं.
    • स्टोरेज बकेट के लिए नियमों का सेट रिलीज़ करें.
    ध्यान दें कि इन संसाधन ब्लॉक का इस्तेमाल करने से, Firebase console में पब्लिश करें बटन पर क्लिक करने या firebase deploy --only storage.

    main.tf चलाने जैसा ही काम होता है
    ...
    
    # Create a ruleset of Cloud Storage Security Rules from a local file.
    resource "google_firebaserules_ruleset" "storage" {
      provider = google-beta
    
      project  = google_firebase_project.default.project
      source {
        files {
          # Write security rules in a local file named "storage.rules".
          # Learn more: https://firebase.google.com/docs/storage/security/get-started
          name    = "storage.rules"
          content = file("storage.rules")
        }
      }
    
      # Wait for the default Storage bucket to be provisioned before creating this ruleset.
      depends_on = [
        google_firebase_storage_bucket.default-bucket,
      ]
    }
    
    # Release the ruleset to the default Storage bucket.
    resource "google_firebaserules_release" "default-bucket" {
      provider     = google-beta
    
      name         = "firebase.storage/${google_app_engine_application.default.default_bucket}"
      ruleset_name = "projects/${google_firebase_project.default.project}/rulesets/${google_firebaserules_ruleset.storage.name}"
      project      = google_firebase_project.default.project
    
      lifecycle {
        replace_triggered_by = [
          google_firebaserules_ruleset.storage
        ]
      }
    }
    
  4. डिफ़ॉल्ट Cloud Storage बकेट को चालू करने और उसके सुरक्षा नियमों को डिप्लॉय करने के लिए, terraform apply चलाएं.
  5. पुष्टि करें कि बकेट उपलब्ध कराई गई हो और उसके सुरक्षा नियमों को लागू किया गया हो:
    1. Firebase कंसोल में, बाएं पैनल में मौजूद Build सेक्शन पर जाएं.
    2. स्टोरेज सेक्शन पर जाएं. इसके बाद, नियम टैब पर क्लिक करें.
    Firebase कंसोल का इस्तेमाल करके सुरक्षा के नियमों की पुष्टि करना

9. अपने ऐप्लिकेशन को स्थानीय तौर पर चलाना

अब आप अपने वेब ऐप्लिकेशन को पहली बार चलाने के लिए तैयार हैं! अपने ऐप्लिकेशन को स्थानीय तौर पर चलाने के लिए, Firebase होस्टिंग एम्युलेटर का इस्तेमाल करें.

  1. एक नई टर्मिनल विंडो खोलें. इसके बाद, एम्युलेटर शुरू करने के लिए, web डायरेक्ट्री से यह Firebase CLI कमांड चलाएं:
    firebase emulators:start --project=<PROJECT_ID>
    
  2. अपने ब्राउज़र में, सीएलआई से मिले लोकल यूआरएल (आम तौर पर http://localhost:5000) पर अपना वेब ऐप्लिकेशन खोलें.

आपको FriendlyChat ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) दिखेगा. हालांकि, यह अभी काम नहीं कर रहा है. ऐप्लिकेशन को अब तक Firebase से कनेक्ट नहीं किया गया है. हालांकि, इस कोडलैब के अगले चरण पूरे करने के बाद, इसे कनेक्ट कर दिया जाएगा!

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

10. Firebase को इंस्टॉल, कॉन्फ़िगर, और चालू करना

किसी ऐप्लिकेशन को Firebase के साथ काम करने के लिए, आपके ऐप्लिकेशन में Firebase SDK टूल और Firebase प्रोजेक्ट के लिए Firebase कॉन्फ़िगरेशन होना ज़रूरी है.

इस कोडलैब के लिए सैंपल कोड, पहले से ही एक वर्किंग ऐप्लिकेशन है. इसमें सभी डिपेंडेंसी और ऐप्लिकेशन में अलग-अलग Firebase प्रॉडक्ट इस्तेमाल करने के लिए ज़रूरी फ़ंक्शन शामिल हैं. अगर आपको यह देखना है कि पहले से क्या किया गया है, तो web/package.json और web/src/index.js में जाकर देखें.

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

Firebase SDK टूल इंस्टॉल करना और webpack बिल्ड शुरू करना

ऐप्लिकेशन का बिल्ड शुरू करने के लिए, आपको कुछ कमांड चलाने होंगे.

  1. नई टर्मिनल विंडो खोलें.
  2. पक्का करें कि आप web डायरेक्ट्री के रूट पर हों.
  3. Firebase SDK टूल डाउनलोड करने के लिए, npm install चलाएं.
  4. किसी भी डिपेंडेंसी को अपडेट करने के लिए, npm update चलाएं.
  5. webpack शुरू करने के लिए, npm run start चलाएं.

कोडलैब के बाकी बचे हिस्से के लिए, webpack अब आपके सोर्स कोड को लगातार फिर से बनाएगा.

अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ना

आपको अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन भी जोड़ना होगा, ताकि Firebase SDK टूल को पता चल सके कि आपको किस Firebase प्रोजेक्ट का इस्तेमाल करना है.

इस कोडलैब के लिए, Firebase कॉन्फ़िगरेशन पाने के दो अलग-अलग विकल्प हैं:

  • पहला विकल्प: Firebase कंसोल से Firebase कॉन्फ़िगरेशन पाएं.
  • दूसरा विकल्प: Terraform की मदद से, Firebase कॉन्फ़िगरेशन पाएं.

पहला विकल्प: Firebase कंसोल से कॉन्फ़िगरेशन फ़ाइल पाएं और उसे अपने कोडबेस में जोड़ें

  1. Firebase कंसोल में, प्रोजेक्ट सेटिंग पर जाएं.
  2. नीचे की ओर स्क्रोल करके, आपके ऐप्लिकेशन कार्ड पर जाएं. इसके बाद, अपना वेब ऐप्लिकेशन चुनें.
  3. Firebase SDK स्निपेट पैन से Config चुनें. इसके बाद, कॉन्फ़िगरेशन स्निपेट कॉपी करें.
  4. अपने ऐप्लिकेशन की web/src/firebase-config.js फ़ाइल में कॉन्फ़िगरेशन चिपकाएं. जैसे:

    firebase-config.js
    ...
    
    const config = {
      apiKey: "<API_KEY>",
      authDomain: "<PROJECT_ID>.firebaseapp.com",
      projectId: "<PROJECT_ID>",
      storageBucket: "<PROJECT_ID>.appspot.com",
      messagingSenderId: "<SENDER_ID>",
      appId: "<APP_ID>",
      measurementId: "<G-MEASUREMENT_ID>",
    };
    
    ...
    

दूसरा विकल्प: Terraform की मदद से कॉन्फ़िगरेशन पाना और उसे अपने कोडबेस में जोड़ना

इसके अलावा, सीएलआई में आउटपुट वैल्यू के तौर पर, Terraform के ज़रिए Firebase कॉन्फ़िगरेशन पाया जा सकता है.

  1. अपनी main.tf फ़ाइल में, google_firebase_web_app रिसॉर्स ब्लॉक ढूंढें. यह वह ब्लॉक होता है जिसने आपके प्रोजेक्ट के साथ वेब ऐप्लिकेशन रजिस्टर किया था.
  2. उस ब्लॉक के तुरंत बाद, ये ब्लॉक जोड़ें:

    main.tf
    ...
    
    data "google_firebase_web_app_config" "default" {
      provider     = google-beta
      project      = google_firebase_project.default.project
      web_app_id   = google_firebase_web_app.default.app_id
    }
    
    output "friendlychat_web_app_config" {
      value = {
        projectId         = google_firebase_project.default.project
        appId             = google_firebase_web_app.default.app_id
        apiKey            = data.google_firebase_web_app_config.default.api_key
        authDomain        = data.google_firebase_web_app_config.default.auth_domain
        storageBucket     = lookup(data.google_firebase_web_app_config.default, "storage_bucket", "")
        messagingSenderId = lookup(data.google_firebase_web_app_config.default, "messaging_sender_id", "")
        measurementId     = lookup(data.google_firebase_web_app_config.default, "measurement_id", "")
      }
    }
    
    ...
    
  3. data ब्लॉक और output ब्लॉक का इस्तेमाल, किसी भी तरह से इन्फ़्रास्ट्रक्चर में बदलाव करने के लिए नहीं किया जाता है. इसलिए, आपको सिर्फ़ ये कमांड चलाने की ज़रूरत है.
    1. अपने वेब ऐप्लिकेशन के Firebase कॉन्फ़िगरेशन को अपनी डायरेक्ट्री के Terraform स्टेट में लोड करने के लिए, यह कमांड चलाएं:
      terraform refresh
      
    2. Firebase कॉन्फ़िगरेशन की वैल्यू प्रिंट करने के लिए, यह कमांड चलाएं:
      terraform output –json
      
      यहां कॉन्फ़िगरेशन के आउटपुट का एक उदाहरण दिया गया है. प्रिंट किए गए आउटपुट में, आपके प्रोजेक्ट और ऐप्लिकेशन की वैल्यू शामिल होंगी.
      {
        "friendlychat_web_app_config": {
          "sensitive": false,
          "type": [
            "object",
            {
              "apiKey": "string",
              "appId": "string",
              "authDomain": "string",
              "measurementId": "string",
              "messagingSenderId": "string",
              "projectId": "string",
              "storageBucket": "string"
            }
          ],
          "value": {
            "apiKey": "<API_KEY>",
            "appId": "<APP_ID>",
            "authDomain": "<PROJECT_ID>.firebaseapp.com",
            "measurementId": "<G-MEASUREMENT_ID>",
            "messagingSenderId": "<SENDER_ID>",
            "projectId": "<PROJECT_ID>",
            "storageBucket": "<PROJECT_ID>.appspot.com"
          }
        }
      }
      
  4. value मैप से वैल्यू कॉपी करें.
  5. इन वैल्यू (आपका कॉन्फ़िगरेशन) को अपने ऐप्लिकेशन की web/src/firebase-config.js फ़ाइल में इस तरह चिपकाएं:

    firebase-config.js
    ...
    
    const config = {
      apiKey: "<API_KEY>",
      appId: "<APP_ID>",
      authDomain: "<PROJECT_ID>.firebaseapp.com",
      measurementId: "<G-MEASUREMENT_ID>",
      messagingSenderId: "<SENDER_ID>",
      projectId: "<PROJECT_ID>",
      storageBucket: "<PROJECT_ID>.appspot.com",
    };
    
    ...
    

अपने ऐप्लिकेशन में Firebase को चालू करना

आखिर में, Firebase को शुरू करने के लिए, अपने ऐप्लिकेशन की web/src/index.js फ़ाइल में यह कोड जोड़ें:

index.js

...

const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);

अपने ऐप्लिकेशन को आज़माना

Firebase के लिए सब कुछ कॉन्फ़िगर हो जाने के बाद, अब अपने वेब ऐप्लिकेशन को आज़माया जा सकता है.

  1. ऐप्लिकेशन दिखाने वाले ब्राउज़र को रीफ़्रेश करें.
  2. अब आपको Google खाते से साइन इन करने और चैट में मैसेज पोस्ट करने की सुविधा मिल जाएगी. अगर आपके पास इमेज फ़ाइलें हैं, तो उन्हें भी अपलोड किया जा सकता है!

11. सभी एनवायरमेंट में एक जैसा कॉन्फ़िगरेशन लागू करना

Terraform, एक जैसे कॉन्फ़िगरेशन वाले कई इन्फ़्रास्ट्रक्चर को मैनेज करने में बेहतर है. उदाहरण के लिए, ऐसा स्टेजिंग Firebase प्रोजेक्ट सेट अप करना जो प्रोडक्शन प्रोजेक्ट जैसा हो.

इस कोडलैब में, आपको एक दूसरा Firebase प्रोजेक्ट बनाना होगा. यह प्रोजेक्ट, स्टेजिंग एनवायरमेंट के तौर पर काम करेगा.

इस स्टेजिंग प्रोजेक्ट को बनाने के लिए, मौजूदा कॉन्फ़िगरेशन को कॉपी करने के लिए, आपके पास दो विकल्प हैं:

  • पहला विकल्प: Terraform कॉन्फ़िगरेशन की कॉपी बनाएं.
    इस विकल्प में, यह तय करने की सबसे ज़्यादा सुविधा मिलती है कि डुप्लीकेट किया गया प्रोजेक्ट, सोर्स प्रोजेक्ट से कितना अलग हो सकता है.
  • दूसरा विकल्प: for_each की मदद से कॉन्फ़िगरेशन का फिर से इस्तेमाल करें.
    अगर हर प्रोजेक्ट में ज़्यादा अंतर नहीं होना चाहिए और आपको सभी प्रोजेक्ट में एक साथ बदलाव करने हैं, तो इस विकल्प से कोड को ज़्यादा बार इस्तेमाल किया जा सकता है.

पहला विकल्प: Terraform कॉन्फ़िगरेशन की कॉपी बनाना

इस विकल्प में, रेप्लिका प्रोजेक्ट को सोर्स प्रोजेक्ट से अलग रखने के लिए सबसे ज़्यादा विकल्प मिलते हैं. जैसे, अलग-अलग डिसप्ले नेम वाले ऐप्लिकेशन और स्टेज किए गए रोलआउट.

  1. अपनी web डायरेक्ट्री के रूट में, main_staging.tf नाम की नई Terraform कॉन्फ़िगरेशन फ़ाइल बनाएं.
  2. अपनी main.tf फ़ाइल से सभी संसाधन ब्लॉक कॉपी करें. हालांकि, terraform और provider ब्लॉक को छोड़कर बाकी सभी ब्लॉक कॉपी करें. इसके बाद, उन्हें अपनी main_staging.tf फ़ाइल में चिपकाएं.
  3. इसके बाद, आपको main_staging.tf में मौजूद अपने हर डुप्लीकेट संसाधन ब्लॉक में बदलाव करना होगा, ताकि वे आपके स्टेजिंग प्रोजेक्ट के साथ काम कर सकें:
    • संसाधन के लेबल: कॉन्फ़्लिक्ट से बचने के लिए, नए नाम का इस्तेमाल करें. उदाहरण के लिए, resource "google_project" "default" का नाम बदलकर resource "google_project" "staging" करें.
    • संसाधन के रेफ़रंस: हर रेफ़रंस को अपडेट करें. उदाहरण के लिए, google_firebase_project.default.project को google_firebase_project.staging.project में अपडेट करें.
    आपको इस कोडलैब की GitHub रिपॉज़िटरी में, main_staging.tf फ़ाइल का पूरा कॉन्फ़िगरेशन मिल सकता है:

    web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf

    अगर आपको इस कॉन्फ़िगरेशन का इस्तेमाल करना है, तो पक्का करें कि आपने ये काम किए हों:
    1. main_staging-copypaste.tf से कॉन्फ़िगरेशन कॉपी करें. इसके बाद, इसे अपनी main_staging.tf फ़ाइल में चिपकाएं.
    2. अपनी main_staging.tf फ़ाइल में, यह तरीका अपनाएं:
      • google_project रिसॉर्स ब्लॉक में, name एट्रिब्यूट, project-id एट्रिब्यूट, और (अगर आपने Terraform के ज़रिए पुष्टि करने की सुविधा सेट अप की है) billing_account एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
      • google_firebase_web_app रिसॉर्स ब्लॉक में, display_name एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
      • google_firestore_database और google_app_engine_application रिसॉर्स ब्लॉक में, location_id एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
    main_staging.tf
    # Create a new Google Cloud project.
    resource "google_project" "staging" {
      provider = google-beta.no_user_project_override
    
      name            = "<PROJECT_NAME_OF_STAGING_PROJECT>"
      project_id      = "<PROJECT_ID_OF_STAGING_PROJECT"
      # Required if you want to set up Authentication via Terraform
      billing_account = "<YOUR_BILLING_ACCOUNT_ID>"
    
      # Required for the project to display in any list of Firebase projects.
      labels = {
        "firebase" = "enabled"
      }
    }
    
    # Enable the required underlying Service Usage API.
    resource "google_project_service" "staging_serviceusage" {
      provider = google-beta.no_user_project_override
    
      project = google_project.staging.project_id
      service = "serviceusage.googleapis.com"
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enable the required underlying Firebase Management API.
    resource "google_project_service" "staging_firebase" {
      provider = google-beta.no_user_project_override
    
      project = google_project.staging.project_id
      service = "firebase.googleapis.com"
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enable Firebase services for the new project created above.
    resource "google_firebase_project" "staging" {
      provider = google-beta
    
      project = google_project.staging.project_id
    
      # Wait until the required APIs are enabled.
      depends_on = [
        google_project_service.staging_serviceusage,
        google_project_service.staging_firebase,
      ]
    }
    
    # Create a Firebase Web App in the new project created above.
    resource "google_firebase_web_app" "staging" {
      provider = google-beta
    
      project      = google_firebase_project.staging.project
      display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
      deletion_policy = "DELETE"
    }
    
  4. अपने नए "स्टेजिंग" Firebase प्रोजेक्ट और उसके सभी संसाधनों को चालू करने के लिए, terraform apply चलाएं. साथ ही, उसकी सेवाओं को चालू करें.
  5. Firebase कंसोल में जाकर, पुष्टि करें कि सब कुछ उम्मीद के मुताबिक चालू किया गया है.

दूसरा विकल्प: for_each की मदद से कॉन्फ़िगरेशन का फिर से इस्तेमाल करना

अगर हर प्रोजेक्ट में ज़्यादा अंतर नहीं होना चाहिए और आपको सभी प्रोजेक्ट में एक साथ बदलाव करने हैं, तो इस विकल्प से कोड को ज़्यादा बार इस्तेमाल किया जा सकता है. यह Terraform की भाषा में for_each मेटा-आर्ग्युमेंट का इस्तेमाल करता है.

  1. अपनी main.tf फ़ाइल खोलें.
  2. आपको जिस भी संसाधन ब्लॉक को डुप्लीकेट करना है उसमें for_each मेटा-आर्ग्युमेंट जोड़ें. जैसे:

    main.tf
    # Create new Google Cloud projects.
    resource "google_project" "default" {
      provider        = google-beta.no_user_project_override
      name            = each.value
      # Create a unique project ID for each project, with each ID starting with <PROJECT_ID>.
      project_id      = "<PROJECT_ID>-${each.key}"
      # Required if you want to set up Authentication via Terraform
      billing_account = "<YOUR_BILLING_ACCOUNT_ID>"
    
      # Required for the projects to display in any list of Firebase projects.
      labels = {
        "firebase" = "enabled"
      }
    
      for_each = {
        prod    = "<PROJECT_NAME_OF_PROD_PROJECT>"
        staging = "<PROJECT_NAME_OF_STAGING_PROJECT>"
      }
    }
    
    # Enable the required underlying Service Usage API.
    resource "google_project_service" "serviceusage" {
      provider = google-beta.no_user_project_override
      for_each = google_project.default
    
      project = each.value.project_id
      service = "serviceusage.googleapis.com"
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enable the required underlying Firebase Management API.
    resource "google_project_service" "firebase" {
      provider = google-beta.no_user_project_override
      for_each = google_project.default
    
      project = each.value.project_id
      service = "firebase.googleapis.com"
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enable Firebase services for each of the new projects created above.
    resource "google_firebase_project" "default" {
      provider = google-beta
      for_each = google_project.default
    
      project = each.value.project_id
    
      depends_on = [
        google_project_service.serviceusage,
        google_project_service.firebase,
      ]
    }
    
    # Create a Firebase Web App in each of the new projects created above.
    resource "google_firebase_web_app" "default" {
      provider = google-beta
      for_each = google_firebase_project.default
    
      project      = each.value.project
      # The Firebase Web App created in each project will have the same display name.
      display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
      deletion_policy = "DELETE"
    }
    
    
    # NOTE: For this codelab, we recommend setting up Firebase Authentication
    # using the Firebase console. However, if you set up Firebase Authentication
    # using Terraform, copy-paste from your main.tf the applicable blocks.
    # Make sure to add the `for_each` meta-argument into each block.
    
    
    # Copy-paste from your main.tf file the applicable resource blocks
    # for setting up Cloud Firestore (including rules) and
    # for setting up Cloud Storage for Firebase (including rules).
    # Make sure to add the `for_each` meta-argument into each block.
    
    आपको इस कोडलैब की GitHub रिपॉज़िटरी में, for_each मेटा-आर्ग्युमेंट का इस्तेमाल करने वाली main.tf फ़ाइल का पूरा कॉन्फ़िगरेशन मिल सकता है:

    web/terraform-checkpoints/replicate-config/main-foreach.tf

    अगर आपको इस कॉन्फ़िगरेशन का इस्तेमाल करना है, तो पक्का करें कि आपने ये काम किए हों:
    1. main-foreach.tf से कॉन्फ़िगरेशन कॉपी करें. इसके बाद, इसे अपनी main.tf फ़ाइल में चिपकाएं.
    2. अपनी main.tf फ़ाइल में, यह तरीका अपनाएं:
      • google_project रिसॉर्स ब्लॉक में, name एट्रिब्यूट, project-id एट्रिब्यूट, और (अगर आपने Terraform के ज़रिए पुष्टि करने की सुविधा सेट अप की है) billing_account एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
      • google_firebase_web_app रिसॉर्स ब्लॉक में, display_name एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
      • google_firestore_database और google_app_engine_application रिसॉर्स ब्लॉक में, location_id एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
  3. इस कॉन्फ़िगरेशन को तुरंत लागू करने के बजाय, यह समझना ज़रूरी है कि Terraform, मौजूदा इन्फ़्रास्ट्रक्चर की तुलना में इस कॉन्फ़िगरेशन को कैसे समझता है. साथ ही, इससे जुड़ी कुछ समस्याओं को ठीक करना भी ज़रूरी है.
    1. फ़िलहाल, अगर आपने for_each का इस्तेमाल करने वाला यह कॉन्फ़िगरेशन लागू किया है, तो संसाधन के पते कुछ इस तरह दिखेंगे:
      google_project.default["prod"]
      google_project.default["staging"]
      google_firebase_project.default["prod"]
      google_firebase_project.default["staging"]
      google_firebase_web_app.default["prod"]
      google_firebase_web_app.default["staging"]
      
      हालांकि, इस कोडलैब के पहले हिस्से में बनाए गए मौजूदा प्रोजेक्ट को Terraform, इस तरह से पहचानता है:
      google_project.default
      google_firebase_project.default
      google_firebase_android_app.default
      
    2. मौजूदा स्थिति के हिसाब से Terraform क्या कार्रवाइयां करेगा, यह देखने के लिए terraform plan चलाएं.

      आउटपुट में यह दिखना चाहिए कि Terraform, इस कोडलैब के पहले हिस्से में बनाए गए प्रोजेक्ट को मिटा देगा और दो नए प्रोजेक्ट बनाएगा. ऐसा इसलिए है, क्योंकि Terraform को यह नहीं पता कि google_project.default पते पर मौजूद प्रोजेक्ट को नए पते google_project.default["prod"] पर ले जाया गया है.
    3. इसे ठीक करने के लिए, terraform state mv कमांड चलाएं:
      terraform state mv "google_project.default" "google_project.default[\"prod\"]"
      
    4. इसी तरह, अन्य सभी संसाधन ब्लॉक ठीक करने के लिए, अपनी main.tf फ़ाइल में मौजूद google_firebase_project, google_firebase_web_app, और अन्य सभी संसाधन ब्लॉक के लिए terraform state mv कमांड चलाएं.
    5. अब अगर terraform plan फिर से चलाया जाता है, तो यह नहीं दिखना चाहिए कि Terraform, इस कोडलैब के पहले हिस्से में बनाए गए प्रोजेक्ट को मिटा देगा.
  4. अपने नए "स्टेजिंग" Firebase प्रोजेक्ट और उसके सभी संसाधनों को चालू करने के लिए, terraform apply चलाएं. साथ ही, उसकी सेवाओं को चालू करें.
  5. Firebase कंसोल में जाकर, पुष्टि करें कि सब कुछ उम्मीद के मुताबिक चालू किया गया है.

12. बोनस चरण: अपने स्टेजिंग और प्रोडक्शन ऐप्लिकेशन डिप्लॉय करना

  1. अपने ऐप्लिकेशन के कोडबेस में, firebase-config.js को बदलकर, अपने स्टेजिंग प्रोजेक्ट से Firebase कॉन्फ़िगरेशन का इस्तेमाल करें.

    अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन पाने और उसे जोड़ने का तरीका याद रखने के लिए, इस कोडलैब का पिछला चरण देखें: अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ना.
  2. अपने ऐप्लिकेशन को स्टेजिंग Firebase प्रोजेक्ट पर डिप्लॉय करने के लिए, अपनी web डायरेक्ट्री के रूट में यह कमांड चलाएं.
    firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
    
  3. firebase deploy के आउटपुट में प्रिंट किए गए यूआरएल के ज़रिए, ब्राउज़र में अपना स्टेजिंग ऐप्लिकेशन खोलें. साइन इन करें, मैसेज भेजें, और इमेज अपलोड करें.

    किसी ऐप्लिकेशन को Firebase प्रोजेक्ट में डिप्लॉय करने पर, यह नकली संसाधनों के बजाय असली Firebase संसाधनों का इस्तेमाल करता है. स्टेजिंग ऐप्लिकेशन का इस्तेमाल करने के दौरान, आपको Firebase कंसोल में अपने स्टेजिंग प्रोजेक्ट में डेटा और इमेज दिखनी चाहिए.
  4. स्टेजिंग में अपने ऐप्लिकेशन की जांच करने के बाद, firebase-config.js को वापस prod प्रोजेक्ट के Firebase कॉन्फ़िगरेशन का इस्तेमाल करने के लिए बदलें. यह वह पहला प्रोजेक्ट है जिसे आपने इस कोडलैब में बनाया था.
  5. अपने ऐप्लिकेशन को प्रोडक्शन Firebase प्रोजेक्ट पर डिप्लॉय करने के लिए, अपनी web डायरेक्ट्री के रूट में जाकर यह कमांड चलाएं.
    firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
    
  6. firebase deploy के आउटपुट में प्रिंट किए गए यूआरएल के ज़रिए, ब्राउज़र में अपना प्रोडक्शन ऐप्लिकेशन खोलें. साइन इन करें, मैसेज भेजें, और इमेज अपलोड करें.

    आपको Firebase कंसोल में अपने प्रोडक्शन प्रोजेक्ट में डेटा और इमेज दिखनी चाहिए.
  7. इस कोडलैब के लिए, दोनों ऐप्लिकेशन का इस्तेमाल करने के बाद, Firebase को इन ऐप्लिकेशन के लिए सेवाएं देने से रोका जा सकता है. अपने हर प्रोजेक्ट के लिए, यह कमांड चलाएं:
    firebase hosting:disable --project=<STAGING_PROJECT_ID>
    
    firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
    

13. बधाई हो!

आपने रीयल-टाइम में चैट करने वाले वेब ऐप्लिकेशन को कॉन्फ़िगर करने के लिए, Terraform का इस्तेमाल किया है! साथ ही, आपने डेवलपमेंट एनवायरमेंट के लिए सबसे सही तरीकों का पालन किया हो. इसके लिए, आपने स्टेजिंग और प्रोडक्शन के लिए अलग-अलग Firebase प्रोजेक्ट बनाए हों.

हमने क्या-क्या कवर किया है

  • क्लाउड संसाधनों को मैनेज करने के लिए, Terraform CLI का इस्तेमाल करना
  • Firebase प्रॉडक्ट (Authentication, Firestore, Cloud Storage, और Security Rules) को कॉन्फ़िगर करने के लिए Terraform का इस्तेमाल करना
  • Firebase Local Emulator Suite का इस्तेमाल करके, वेब ऐप्लिकेशन को स्थानीय तौर पर चलाना और उसकी जांच करना
  • वेब ऐप्लिकेशन में Firebase को इंपोर्ट करना
  • एक से ज़्यादा एनवायरमेंट में कॉन्फ़िगरेशन को कॉपी करने के लिए Terraform का इस्तेमाल करना

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