खोजें

infrastructureblogia

LibreChat का EC2 AWS पर स्वचालित तैनाती

LibreChat का EC2 AWS पर स्वचालित तैनाती

यह लेख एक परियोजना POC (Proof of Concept) प्रस्तुत करता है जो AWS EC2 पर LibreChat के स्वचालित परिनियोजन के लिए बनाया गया है, जिसमें Terraform का उपयोग Infrastructure as Code के सिद्धांत के अनुसार इन्फ्रास्ट्रक्चर को ऑर्केस्ट्रेट करने के लिए, EC2 पर कॉम्पोनेंट्स को इंस्टाल करने के लिए एक User-Data Bash स्क्रिप्ट, और API कुंजियों के केंद्रीय प्रबंधन और परिनियोजन ट्रैकिंग के लिए AWS Systems Manager का उपयोग शामिल है। ध्यान ऑटोमेशन और Spot इंस्टेंस के उपयोग के जरिए लागत अनुकूलन पर केंद्रित है।

परिचय

LibreChat एक उन्नत चैटबॉट एप्लिकेशन है जो कई AI मॉडल्स को एकीकृत करता है, जिनमें Mistral AI शामिल है, और इसमें वार्तालाप खोज, कस्टम प्रीसेट बनाना, संदेश संपादन और जारी रखने, तथा प्लगइन्स का एकीकरण जैसी सुविधाएँ हैं। यह बहुभाषी और बहुमॉडाल उपयोगकर्ता इंटरफ़ेस, सुरक्षित प्रमाणीकरण के साथ मल्टी-यूज़र प्रबंधन प्रदान करता है, और पूरी तरह से ओपन-सोर्स है। यह परियोजना AWS EC2 पर इसके परिनियोजन का अन्वेषण करती है और पूरी तरह स्वचालित कार्यान्वयन के लिए उन्नत उपकरणों का उपयोग करती है।

आर्किटेक्चर

परिनियोजित आर्किटेक्चर में निम्नलिखित तत्व शामिल हैं:

  1. एक इंस्टेंस EC2 जो Ubuntu Server चला रहा है।
  2. आवश्यक LibreChat कॉम्पोनेंट्स की स्थापना और कॉन्फ़िगरेशन को स्वचालित करने के लिए एक Bash स्क्रिप्ट User-Data
  3. LibreChat के परिनियोजन के लिए आवश्यक AWS इन्फ्रास्ट्रक्चर को परिभाषित और प्रोविजन करने के लिए Terraform
  4. LibreChat के लिए आवश्यक API कुंजियों को स्टोर और पुनःप्राप्त करने तथा परिनियोजन की प्रगति को ट्रैक करने के लिए AWS Systems Manager (SSM)

ऑटोमेशन और Infrastructure as Code

Terraform

Terraform एक उपकरण है जो इन्फ्रास्ट्रक्चर को कोड के रूप में परिभाषित और प्रोविजन करने की अनुमति देता है (Infrastructure as Code)। इस परियोजना में, Terraform का उपयोग EC2 इंस्टेंस और संबंधित AWS संसाधनों, जैसे कि सुरक्षा समूह और IAM भूमिकाओं को बनाने और कॉन्फ़िगर करने के लिए किया जाता है।

User-Data

User-Data में लिखा गया Bash स्क्रिप्ट EC2 इंस्टेंस के पहले बूट के दौरान निष्पादित होता है। यह LibreChat के लिए आवश्यक कॉम्पोनेंट्स जैसे Docker, Docker Compose, Git, Node.js और NPM की स्थापना और कॉन्फ़िगरेशन को स्वचालित करता है। User-Data स्क्रिप्ट LibreChat के लिए आवश्यक API कुंजियों (जैसे OpenAI, MistralAI, Anthropic, Google API और Google CSE ID) को भी AWS Systems Manager (SSM) से प्राप्त करके कॉन्फ़िगर करती है।

User-Data स्क्रिप्ट में एक फ़ंक्शन update_status परिनिर्धारित है जो AWS SSM के माध्यम से परिनियोजन स्थिति को अपडेट करने के लिए उपयोग किया जाता है। यह फ़ंक्शन परिनियोजन की स्थिति की निगरानी करने और किसी भी समस्या का जल्दी पता लगाने की अनुमति देता है। User-Data स्क्रिप्ट फ़ंक्शन update_registration.sh को भी पुश करती है और registrations को सक्षम/अवरोधित करने के लिए इसे cron में सेट करती है।

फ़ंक्शन update_status का उदाहरण:

update_status() {
  STATUS_MESSAGE=$1
  aws ssm put-parameter --name "/librechat/deployment-status" --type "String" --value "$STATUS_MESSAGE" --overwrite --region $AWS_DEFAULT_REGION
}

फ़ंक्शन update_registration.sh का उदाहरण:

#!/bin/bash
set -e

# Update registration status in SSM Parameter Store
aws ssm put-parameter --name "/librechat/registration_enabled" --type "String" --value "$1" --overwrite --region $AWS_DEFAULT_REGION

# Update LibreChat configuration file
if [ "$1" == "true" ]; then
  sed -i 's/enabled: false/enabled: true/g' /opt/librechat/config.yaml
else
  sed -i 's/enabled: true/enabled: false/g' /opt/librechat/config.yaml
fi

# Restart LibreChat service
systemctl restart librechat

फंक्शन update_registration.sh SSM Parameter Store और LibreChat के कॉन्फ़िगरेशन फ़ाइल में registrations की सक्रियता की स्थिति को अपडेट करने के लिए उपयोग किया जाता है। इसके बाद LibreChat सेवा को परिवर्तनों को लागू करने के लिए पुनरारंभ किया जाता है।

SSM के साथ परिनियोजन प्रगति की ट्रैकिंग

AWS Systems Manager (SSM) एक सेवा है जो EC2 इंस्टेंस को केंद्रीयकृत तरीके से प्रबंधित और कॉन्फ़िगर करने की अनुमति देती है। इस परियोजना में, SSM का उपयोग LibreChat के लिए आवश्यक API कुंजियों को स्टोर और पुनःप्राप्त करने तथा परिनियोजन की प्रगति को ट्रैक करने के लिए किया जाता है।

User-Data स्क्रिप्ट में एक और फ़ंक्शन check_deployment_status भी परिभाषित है जो AWS SSM के माध्यम से परिनियोजन की स्थिति की जाँच करता है। यह फ़ंक्शन परिनियोजन की वास्तविक समय में प्रगति को ट्रैक करने और किसी भी समस्या का त्वरित पता लगाने में मदद करता है।

फ़ंक्शन check_deployment_status का उदाहरण:

check_deployment_status() {
  LAST_STATUS=""
  INSTANCE_ID=$(terraform output -raw instance_id)  # Récupère l'ID de l'instance Terraform.
  if [ -z "$INSTANCE_ID" ]; then
    echo "Aucune instance EC2 n'est actuellement déployée ou terraform output n'est pas configuré correctement."
    return 1
  fi
  IP_ADDRESS=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query "Reservations[*].Instances[*].PublicIpAddress" --output text --region $AWS_DEFAULT_REGION 2>/dev/null)
  URL="https://$IP_ADDRESS/"
  echo "Vérification de l'état de déploiement..."
  ATTENTE_STATUS=true  # Utilisée pour contrôler l'affichage du message d'attente.
  while true; do
    STATUS=$(aws ssm get-parameter --name "/librechat/deployment-status" --query "Parameter.Value" --output text --region $AWS_DEFAULT_REGION 2>/dev/null)
    if [ $? -ne 0 ]; then
      if [ "$ATTENTE_STATUS" = true ]; then
        echo -ne "\rEn attente des informations de statut de déploiement.\n"
        ATTENTE_STATUS=false  # Empêche la répétition du message.
      fi
      sleep 1
      continue
    else
      ATTENTE_STATUS=true  # Réinitialise pour le prochain cycle.
    fi
    if [[ "$STATUS" != "$LAST_STATUS" ]]; then
      if [[ "$LAST_STATUS" != "" ]]; then
        echo -e " \e[32m✓\e[0m"  # Affiche une coche verte pour le statut précédent.
      fi
      echo -ne "\rÉtat actuel du déploiement : $STATUS"
      LAST_STATUS="$STATUS"
      if [[ "$STATUS" == "100% - Installation terminée" ]]; then
        echo -e "\n\e[32m✓ Installation terminée avec succès\e[0m"
        echo -e "Accédez à l'instance Librechat via : $URL"
        break
      elif [[ "$STATUS" == "Echec de l'installation" ]]; then
        echo -e "\n\e[31m✗ Échec de l'installation\e[0m"
        exit 1
      fi
    fi
    sleep 1
  done
}
}

परिनियोजन की स्थिति एक SSM पैरामीटर में स्टोर की जाती है, जिससे किसी भी समय और किसी भी स्थान से परिनियोजन की स्थिति जाँची जा सकती है।

set -e और trap 'error_handler' ERR के साथ त्रुटि प्रबंधन

User-Data स्क्रिप्ट में त्रुटियों के साथ मजबूत प्रबंधन set -e और trap 'error_handler' ERR का उपयोग करके लागू किया गया है। यह दृष्टिकोण सुनिश्चित करता है कि स्क्रिप्ट किसी भी त्रुटि होने पर तुरंत रुक जाए और समस्या के बारे में विस्तृत जानकारी प्रदान करे।

यहाँ त्रुटि नियंत्रण के साथ User-Data स्क्रिप्ट का एक अंश है:

#!/bin/bash
set -e
trap 'error_handler' ERR

error_handler() {
  local error_message=$1
  echo "Error occurred: ${error_message}"
  update_status "ERROR: ${error_message}"
  exit 1
}

update_status() {
  STATUS_MESSAGE=$1
  aws ssm put-parameter --name "/librechat/deployment-status" --type "String" --value "$STATUS_MESSAGE" --overwrite --region $AWS_DEFAULT_REGION
}

हर बार जब स्क्रिप्ट में कोई त्रुटि होती है, तब फ़ंक्शन error_handler को कॉल किया जाता है। यह एक त्रुटि संदेश को पैरामीटर के रूप में लेता है, कंसोल पर उसे दर्शाता है, AWS SSM के माध्यम से परिनियोजन स्थिति को अपडेट करने के लिए फ़ंक्शन update_status का उपयोग करता है, और स्क्रिप्ट को त्रुटि कोड के साथ समाप्त कर देता है।

set -e और trap 'error_handler' ERR के कारण, परिनियोजन किसी भी त्रुटि के होने पर तुरंत रुक जाता है, जिससे डिबग और समस्या निवारण आसान होते हैं। इसके अलावा, AWS SSM में परिनियोजन स्थिति का अपडेट परिनियोजन की प्रगति को ट्रैक करने और संभावित समस्याओं का शीघ्र पता लगाने की अनुमति देता है।

Spot Instances के साथ लागत में कमी

Spot Instances ऐसे EC2 इंस्टेंस हैं जो अनयूज्ड कैपेसिटी का उपयोग कम कीमतों पर करने की अनुमति देते हैं, जो ऑन-डिमांड इंस्टेंस की तुलना में सस्ती होती है। इस परियोजना में, होस्टिंग लागत को कम करने के लिए Spot Instances का उपयोग किया गया है। User-Data स्क्रिप्ट Spot Instances की कॉन्फ़िगरेशन का समर्थन करती है, जिससे लागत में महत्वपूर्ण कमी प्राप्त की जा सकती है बिना एप्लिकेशन के प्रदर्शन को प्रभावित किए।

AWS EC2 पर LibreChat के स्वचालित परिनियोजन में export.sh का सामान्य उपयोग

LibreChat के AWS EC2 पर स्वचालित परिनियोजन के संदर्भ में, एक शेल स्क्रिप्ट जिसका नाम export.sh है, परिनियोजन और इन्फ्रास्ट्रक्चर कॉन्फ़िगरेशन से जुड़ी विभिन्न कार्यों के प्रबंधन को सरल बनाने के लिए बनाया गया है। यह स्क्रिप्ट लोकल वर्कस्टेशन और GitLab CI पाइपलाइनों दोनों से उपयोग के लिए डिज़ाइन की गई है, जिससे इसमें निहित फ़ंक्शंस का एकसमान और साझा उपयोग संभव होता है।

स्क्रिप्ट export.sh में इन्फ्रास्ट्रक्चर के परिनियोजन और प्रबंधन के लिए कई उपयोगी फ़ंक्शंस समाहित हैं। इनमें से कुछ हैं:

  • terraform_plan : इन्फ्रास्ट्रक्चर पर किए जाने वाले परिवर्तनों का पूर्वावलोकन करने के लिए Terraform प्लान बनाता है।
  • terraform_apply : AWS पर Terraform परिवर्तनों को लागू करता है।
  • terraform_destroy : परिनियोजन के दौरान बनाए गए Terraform संसाधनों को हटाता है।
  • check_deployment_status : AWS SSM को क्वेरी करके चल रहे परिनियोजन की स्थिति की जाँच करता है।

यहाँ इन फ़ंक्शंस के उपयोग का एक GitLab CI पाइपलाइन उदाहरण है:

stages:
  - Vérifications
  - Déploiements
  - Suppressions

Vérification Terraform:
  stage: Vérifications
  script:
    - /bin/bash -c "source export.sh && terraform_plan"

Déploiement Terraform:
  stage: Déploiements
  script:
    - /bin/bash -c "source export.sh && terraform_apply && check_deployment_status"

Suppression Terraform:
  stage: Suppressions
  script:
    - /bin/bash -c "source export.sh && terraform_destroy"

इस उदाहरण में, फ़ंक्शंस terraform_plan, terraform_apply, और terraform_destroy पाइपलाइन के विभिन्न चरणों में उपयोग किए गए हैं। स्क्रिप्ट export.sh को सोर्स करने पर, उसमें निहित फ़ंक्शंस पाइपलाइन के रनटाइम वातावरण में उपलब्ध हो जाते हैं।

लोकल वर्कस्टेशन और GitLab CI के बीच export.sh के साझा उपयोग से LibreChat के AWS EC2 पर स्वचालित परिनियोजन का प्रबंधन सरल होता है। इस स्क्रिप्ट में मौजूद फ़ंक्शंस कार्यों को सरल बनाते हैं और इन्फ्रास्ट्रक्चर पर की जाने वाली गतिविधियों में सुसंगतता सुनिश्चित करते हैं।

परियोजना के बारे में और स्रोत कोड देखने के लिए, GitLab रिपॉज़िटरी देखें। वहाँ आपको इस स्वचालित परिनियोजन परियोजना की आर्किटेक्चर, कॉन्फ़िगरेशन और लागू की गई बेहतरीन प्रथाओं के बारे में विस्तृत जानकारी मिलेगी।

इंस्टेंस पर SSM के साथ डिफ़ॉल्ट कनेक्शन

AWS Systems Manager (SSM) इंस्टेंस EC2 से डिफ़ॉल्ट रूप से कनेक्ट करने की अनुमति देता है बिना SSH का उपयोग किए। यह सुविधा इंस्टेंस तक पहुँच को सरल बनाती है और SSH पोर्ट को इंटरनेट पर एक्सपोज़ करने से बचाकर सुरक्षा को बढ़ाती है। हालांकि, आवश्यकतानुसार संबंधित वेरिएबल का उपयोग करके उपयुक्त फ्लो खोलकर SSH के माध्यम से भी इंस्टेंस तक पहुँचा जा सकता है।

सेल्फ-साइन किया हुआ SSL सर्टिफिकेट और सुरक्षा

डिफ़ॉल्ट रूप से, LibreChat पोर्ट 80 को बिना पोर्ट 443 को सक्रिय किए एक्सेस करने योग्य बनाता है। इस परियोजना में, पोर्ट 443 डिफ़ॉल्ट रूप से एक सेल्फ-साइन किए हुए सर्टिफिकेट के साथ सक्रिय किया जाता है, और पोर्ट 80 को पोर्ट 443 पर रीडायरेक्ट किया जाता है। ब्राउज़र में HTTPS चेतावनी दिखाई दे सकती है, फिर भी HTTPS प्रोटोकॉल का उपयोग नेटवर्क पर पासवर्ड चोरी के खिलाफ सुरक्षा प्रदान करता है।

निष्कर्ष

यह परियोजना दर्शाती है कि Terraform का उपयोग करके इन्फ्रास्ट्रक्चर, User-Data Bash स्क्रिप्ट के माध्यम से कॉम्पोनेंट्स की स्थापना, और AWS Systems Manager के माध्यम से केंद्रीयकृत कॉन्फ़िगरेशन प्रबंधन और परिनियोजन ट्रैकिंग का उपयोग करके AWS EC2 पर LibreChat को कैसे परिनियोजित और कॉन्फ़िगर किया जा सकता है। ध्यान Spot Instances के माध्यम से लागत में कमी और सेल्फ-साइन किए हुए SSL सर्टिफिकेट और HTTP सुरक्षा हेडर्स का उपयोग करके सुरक्षा पर भी है।

इस परियोजना का उपयोग करके, आप प्रभावी, सुरक्षित और किफायती तरीके से AWS EC2 पर LibreChat को परिनियोजित और कॉन्फ़िगर कर पाएँगे। इस परियोजना को अन्य वेब अनुप्रयोगों के परिनियोजन के लिए भी विस्तारित और अनुकूलित किया जा सकता है, जिनमें वही ऑटोमेशन, Infrastructure as Code और केंद्रीयकृत कॉन्फ़िगरेशन प्रबंधन के सिद्धांत लागू होते हैं।

परियोजना GitLab के साथ अन्वेषण जारी रखें

LibreChat के AWS EC2 पर परिनियोजन के तकनीकी विवरण और आर्किटेक्चर सहित विस्तृत जानकारी के लिए, मैं आपको दृढ़ता से GitLab पर परियोजना का README पढ़ने की सलाह देता हूँ। यह लेख परियोजना, इसके प्रमुख अवधारणाओं और इस परिनियोजन के फायदों का परिचय देता है, लेकिन परियोजना लिंक में आपको सभी तकनीकी विवरण मिलेंगे।

यह दस्तावेज़ fr संस्करण से hi भाषा में gpt-5-mini मॉडल का उपयोग करके अनुवादित किया गया है। अनुवाद प्रक्रिया के बारे में अधिक जानकारी के लिए, देखें https://gitlab.com/jls42/ai-powered-markdown-translator