एचयूगो साइट को एएस3 एवं एएस3 क्लाइंट इंटरफ़ेस के साथ एएस3 पर डिप्लॉइ करें

एचयूजी के एएव्वीएस एस3 पर तैनाती को ऑटोमेट करें

Page content

हुगो स्टेटिक साइट को AWS S3 पर डिप्लॉइ करें AWS CLI के उपयोग से अपनी वेबसाइट के मेजबान के लिए एक मजबूत और पैमाने वाला समाधान प्रदान करता है। यह प्रारूप डिप्लॉइमेंट प्रक्रिया के पूरे चरणों को कवर करता है, प्रारंभिक सेटअप से लेकर उन्नत स्वचालन और कैश मैनेजमेंट रणनीतियों तक।

टेबल पर कलर टेट्रिस

AWS CLI के साथ डिप्लॉइमेंट एक आगे के दृष्टिकोण बन गया है क्योंकि हुगो वितरण ने मानक पैकेज से deploy कमांड को हटा दिया है। यदि आप स्थानीय रूप से इसे कर रहे हैं और फिर भी hugo deploy को कॉल करना चाहते हैं, तो extended और withdeploy के बारे में हाउ टू इंस्टॉल यूबंटू 24.04 & उपयोगी उपकरण के बारे में देखें।

पूर्वापेक्षा

हुगो साइट को AWS S3 पर डिप्लॉइ करने से पहले, आपके पास होना चाहिए:

  • डिप्लॉइमेंट के लिए तैयार हुगो साइट (यदि आपको एक साइट बनाने में मदद की आवश्यकता है, तो हुगो क्विकस्टार्ट गाइड की जांच करें)
  • उचित अनुमतियों के साथ एक एएसडब्ल्यूएस खाता
  • इंस्टॉल और सेटअप किया गया एएसडब्ल्यूएस CLI
  • कमांड लाइन ऑपरेशन के बारे में आधारभूत ज्ञान

अपने हुगो साइट को बनाना

अपने हुगो साइट को डिप्लॉइ करने के पहले चरण में स्टेटिक फ़ाइलों को जनरेट करना है। उपलब्ध कमांड और विकल्पों के बारे में संदर्भ के लिए हुगो चीट शीट की जांच करें।

अपनी साइट को अपनाकर अपनाकर ऑप्टिमाइज़ेशन फ़्लैग के साथ बनाएं:

hugo --gc --minify

--gc फ़्लैग अप्रयुक्त कैश फ़ाइलों को हटा देता है, जबकि --minify अपने HTML, CSS, और JavaScript को अपनी बुनियादी प्रदर्शन के लिए संपीड़ित करता है। यह आपकी स्टेटिक साइट को public/ फ़ोल्डर में जनरेट करता है, जो हम S3 पर डिप्लॉइ करेंगे।

एएसडब्ल्यूएस CLI को सेट करें

यदि आपने अभी तक एएसडब्ल्यूएस CLI को सेट नहीं किया है, तो रन करें:

aws configure

आपको प्रायोजित करने के लिए दिखाई देंगे:

  • एएसडब्ल्यूएस एक्सेस की आईडी: आपकी एएसडब्ल्यूएस एक्सेस की
  • एएसडब्ल्यूएस सीक्रेट एक्सेस की: आपकी सीक्रेट एक्सेस की
  • डिफ़ॉल्ट क्षेत्र: आपका पसंदीदा एएसडब्ल्यूएस क्षेत्र (उदाहरण के लिए, us-east-1, ap-southeast-2)
  • डिफ़ॉल्ट आउटपुट फ़ॉर्मेट: json (सिफारिश की गई)

प्रोग्रामैटिक एक्सेस के लिए, आपके आईएएम उपयोगकर्ता के लिए अनुमति होनी चाहिए:

  • s3:PutObject
  • s3:GetObject
  • s3:DeleteObject
  • s3:ListBucket
  • cloudfront:CreateInvalidation (यदि क्लाउडफ़्रंट का उपयोग कर रहे हैं)

S3 बकेट बनाएं और सेट करें

बकेट बनाएं

एएसडब्ल्यूएस CLI के उपयोग से अपना S3 बकेट बनाएं:

aws s3 mb s3://your-bucket-name --region us-east-1

महत्वपूर्ण: एक वैश्विक रूप से अद्वितीय बकेट नाम चुनें। यदि आप बकेट के लिए वेबसाइट मेजबान के लिए उपयोग कर रहे हैं, तो बकेट नाम अपने डोमेन नाम के साथ मिलान करना चाहिए यदि आप एक विशेष डोमेन का उपयोग कर रहे हैं।

बकेट को स्टेटिक वेबसाइट मेजबान के लिए सेट करें

स्टेटिक वेबसाइट मेजबान को सक्षम करें:

aws s3 website s3://your-bucket-name \
  --index-document index.html \
  --error-document 404.html

बकेट नीति सेट करें

सार्वजनिक पढ़ने के अधिकार के लिए (यदि क्लाउडफ़्रंट का उपयोग नहीं कर रहे हैं), एक बकेट नीति बनाएं:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

नीति लागू करें:

aws s3api put-bucket-policy \
  --bucket your-bucket-name \
  --policy file://bucket-policy.json

सुरक्षा नोट: यदि आप क्लाउडफ़्रंट का उपयोग कर रहे हैं (सिफारिश की गई), तो आप S3 बकेट एक्सेस को केवल क्लाउडफ़्रंट तक सीमित कर सकते हैं, जिससे सार्वजनिक पढ़ने के अधिकार की आवश्यकता नहीं होगी।

AWS CLI के उपयोग से S3 पर डिप्लॉइ करें

मुख्य डिप्लॉइमेंट कमांड aws s3 sync का उपयोग करता है अपनी साइट को अपलोड करने के लिए:

aws s3 sync public/ s3://your-bucket-name/ \
  --delete \
  --cache-control max-age=60

महत्वपूर्ण पैरामीटर की व्याख्या

  • public/: आपका स्थानीय हुगो आउटपुट फ़ोल्डर
  • s3://your-bucket-name/: आपके S3 बकेट गंतव्य
  • --delete: स्थानीय में नहीं मिलने वाली फ़ाइलों को S3 से हटाएं, जिससे आपका बकेट आपके बिल्ड के समान होता है
  • --cache-control max-age=60: कैश हेडर सेट करें (इस उदाहरण में 60 सेकंड)

उन्नत सिंक विकल्प

अपने डिप्लॉइमेंट पर अधिक नियंत्रण के लिए:

aws s3 sync public/ s3://your-bucket-name/ \
  --delete \
  --cache-control "public, max-age=31536000, immutable" \
  --exclude "*.html" \
  --cache-control "public, max-age=60" \
  --include "*.html" \
  --exclude "*.js" \
  --cache-control "public, max-age=31536000, immutable" \
  --include "*.js"

यह उदाहरण HTML फ़ाइलों (60 सेकंड) के लिए अलग कैश अवधि को सेट करता है और स्थैतिक एसेट्स जैसे जावास्क्रिप्ट (एक वर्ष) के लिए, जो एक सामान्य अपटिमाइज़ेशन रणनीति है।

क्लाउडफ़्रंट वितरण सेट करें

जबकि S3 वेबसाइट को सीधे मेजबान कर सकता है, एमएस क्लाउडफ़्रंट के रूप में एक सीडीएन का उपयोग बेहतर प्रदर्शन, सुरक्षा और वैश्विक वितरण प्रदान करता है।

क्लाउडफ़्रंट वितरण बनाएं

aws cloudfront create-distribution \
  --distribution-config file://cloudfront-config.json

एक मूल क्लाउडफ़्रंट विन्यास में शामिल हैं:

  • S3 बकेट के रूप में मूल
  • डिफ़ॉल्ट कैश व्यवहार
  • SSL/TLS प्रमाणपत्र (एएसडब्ल्यूएस प्रमाणपत्र प्रबंधक से)
  • व्यक्तिगत डोमेन विन्यास (वैकल्पिक)

कैश मैनेजमेंट रणनीतियां

क्लाउडफ़्रंट के माध्यम से डिप्लॉइमेंट करते समय, इन कैशिंग रणनीतियों को विचार करें:

  1. मैक्सिमम TTL सेट करें: क्लाउडफ़्रंट के मैक्सिमम TTL को सेट करें जिससे कंटेंट के किनारे स्थानों में कितने समय तक कैश किया जाए वह नियंत्रित किया जा सके
  2. कंटेंट वर्जनिंग: फ़ाइल नामों में वर्जन पहचानकर्ता का उपयोग करें (उदाहरण के लिए, style-v2.css) ताकि कैश अपडेट बलबला सके
  3. कैश-कंट्रोल हेडर्स सेट करें: S3 सिंक के दौरान उपयुक्त हेडर्स को सेट करें (ऊपर दिखाए गए उदाहरण के अनुसार)
  4. चयनात्मक अमान्यता: पूरे कैश के बजाय केवल बदले गए पथों के लिए अमान्यता बनाएं

कैश अमान्यता

अपडेट के बाद, नए कंटेंट को वितरित करने के लिए क्लाउडफ़्रंट कैश को अमान्य करें:

aws cloudfront create-invalidation \
  --distribution-id YOUR_DISTRIBUTION_ID \
  --paths "/*"

अधिक लक्ष्यित अमान्यता के लिए:

aws cloudfront create-invalidation \
  --distribution-id YOUR_DISTRIBUTION_ID \
  --paths "/index.html" "/blog/*"

लागत विचार: प्रति महीना पहले 1,000 अमान्यता पथ मुफ्त हैं। उसके बाद, प्रति पथ $0.005 की लागत होती है। चयनात्मक अमान्यता का उपयोग लागत को न्यूनतम करने के लिए करें।

CI/CD के साथ स्वचालन

छोटे परियोजनों के लिए मानव द्वारा डिप्लॉइमेंट काम करता है, लेकिन उत्पादन वर्कफ़्लो में स्वचालन आवश्यक है। आप गिटेआ क्रियाओं के साथ हुगो वेबसाइट को AWS S3 पर डिप्लॉइ करें या अन्य CI/CD पाइपलाइन के साथ इस डिप्लॉइमेंट प्रक्रिया को समाहित कर सकते हैं।

मूल डिप्लॉइमेंट स्क्रिप्ट

एक सरल डिप्लॉइमेंट स्क्रिप्ट बनाएं:

#!/bin/bash
set -e

# हुगो साइट बनाएं
echo "हुगो साइट बनाना..."
hugo --gc --minify

# S3 पर डिप्लॉइ करें
echo "S3 पर डिप्लॉइ करना..."
aws s3 sync public/ s3://your-bucket-name/ \
  --delete \
  --cache-control max-age=60

# क्लाउडफ़्रंट कैश अमान्य करें
echo "क्लाउडफ़्रंट कैश अमान्य करना..."
aws cloudfront create-invalidation \
  --distribution-id YOUR_DISTRIBUTION_ID \
  --paths "/*"

echo "डिप्लॉइमेंट पूरा!"

इसे निष्पादन योग्य बनाएं और रन करें:

chmod +x deploy.sh
./deploy.sh

गिटहब एक्शन्स उदाहरण

गिटहब रिपॉजिटरी के लिए .github/workflows/deploy.yml बनाएं:

name: AWS S3 पर डिप्लॉइ करें

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: हुगो सेटअप
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: 'latest'
      
      - name: बनाएं
        run: hugo --gc --minify
      
      - name: एएसडब्ल्यूएस प्रमाणपत्र सेट करें
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      
      - name: S3 पर डिप्लॉइ करें
        run: |
          aws s3 sync public/ s3://your-bucket-name/ \
            --delete \
            --cache-control max-age=60          
      
      - name: क्लाउडफ़्रंट अमान्य करें
        run: |
          aws cloudfront create-invalidation \
            --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} \
            --paths "/*"          

मॉनिटरिंग और अपटिमाइज़ेशन

लॉगिंग सक्षम करें

S3 और क्लाउडफ़्रंट लॉगिंग को एक्सेस पैटर्न के ट्रैक के लिए सेट करें:

# S3 एक्सेस लॉगिंग सक्षम करें
aws s3api put-bucket-logging \
  --bucket your-bucket-name \
  --bucket-logging-status file://logging.json

क्लाउडवॉच अलार्म सेट करें

अपने डिप्लॉइमेंट के साथ क्लाउडवॉच का उपयोग करें:

aws cloudwatch put-metric-alarm \
  --alarm-name high-error-rate \
  --alarm-description "उच्च त्रुटि दर पर चेतावनी" \
  --metric-name 4xxError \
  --namespace AWS/CloudFront \
  --statistic Sum \
  --period 300 \
  --threshold 10 \
  --comparison-operator GreaterThanThreshold

सामान्य समस्याओं के समाधान

फ़ाइलें अपडेट नहीं हो रहीं

यदि बदलाव दिखाई नहीं दे रहे हैं:

  1. क्लाउडफ़्रंट कैश अमान्यता के स्थिति की जांच करें
  2. सिंक कमांड में --delete फ़्लैग की जांच करें
  3. ब्राउज़र कैश को साफ करें या अनिवार्य मोड में परीक्षण करें
  4. S3 बकेट अनुमतियों की जांच करें

कम गति के डिप्लॉइमेंट

सिंक प्रदर्शन के लिए अपनाएं:

  • --exclude और --include का उपयोग अनावश्यक फ़ाइलों को छोड़े
  • तेज़ तुलनाओं के लिए --size-only का उपयोग करें
  • --cli-read-timeout और --cli-write-timeout के साथ समानांतर अपलोड करें

अनुमति त्रुटियां

अपने आईएएम उपयोगकर्ता के लिए सुनिश्चित करें:

  • S3 बकेट अनुमति
  • क्लाउडफ़्रंट अमान्यता अनुमति (यदि लागू है)
  • सही बकेट नीतियां सेट करें

बेस्ट प्रैक्टिस समारोह

  1. हमेशा --delete का उपयोग करें ताकि S3 आपके स्थानीय बिल्ड के साथ सिंक करे
  2. उपयुक्त कैश हेडर्स सेट करें फ़ाइल प्रकार के आधार पर
  3. उत्पादन डिप्लॉइमेंट के लिए क्लाउडफ़्रंट का उपयोग करें
  4. CI/CD पाइपलाइन के साथ डिप्लॉइमेंट को स्वचालित करें
  5. लागत की निगरानी करें - क्लाउडफ़्रंट अमान्यता शुल्क के बारे में सचेत रहें
  6. अपने डिप्लॉइमेंट को वर्जनिंग करें - आसान रोलबैक के लिए रिलीज टैग करें
  7. पहले स्थानीय रूप से परीक्षण करें - डिप्लॉइ करने से पहले अपने हुगो बिल्ड की जांच करें

संबंधित संसाधन

हुगो डिप्लॉइमेंट के बारे में अधिक विस्तृत जानकारी के लिए, हुगो-जनरेटेड वेबसाइट को AWS S3 पर डिप्लॉइ करें के विस्तृत मार्गदर्शिका की जांच करें, जो अतिरिक्त डिप्लॉइमेंट विकल्पों और विन्यासों को कवर करती है।

आप अपनी सामग्री लिखते समय, कोड उदाहरणों के लिए उचित मार्कडाउन कोड ब्लॉक का उपयोग करें, और व्यापक मार्कडाउन चीटशीट के लिए विन्यास निर्देशों का उपयोग करें।

उपयोगी लिंक

बाहरी संदर्भ