हेलो सब लोग, आज मैं NodeJS/Express का उपयोग करके Amazon EC2 सर्वर पर एक त्वरित REST API तैनात करने के अपने पसंदीदा तरीकों में से एक पर एक ट्यूटोरियल करना चाहता हूँ। यह तकनीक अनिवार्य रूप से आपके EC2 सर्वर को आपके GitHub रिपॉजिटरी में पुश किए गए परिवर्तनों का जवाब देने में सक्षम बनाती है।
NodeJS/Express ऐप को चालू करने के लिए अपनी मशीन पर एक नई डायरेक्टरी बनाएँ। मैं इसे rekognition
कह रहा हूँ
टर्मिनल खोलें, और package.json को आरंभ करने के लिए यह कमांड चलाएँ npm init -y
express.js npm i express
स्थापित करें
डिफ़ॉल्ट रूट पर 'हेलो वर्ल्ड' के साथ एक बेसिक एक्सप्रेस सर्वर बनाएं
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });
यह सुनिश्चित करने के लिए परीक्षण करें कि आप http://localhost:3000/
पर 'Hello World!' देख रहे हैं
बहुत बढ़िया, पहला चरण पूरा हो गया! 💪
अपनी निर्देशिका में एक Git रेपो आरंभ करें, और अपना पहला कमिट करें -
git init git add . git commit -m "First commit"
अपने GitHub खाते पर एक दूरस्थ रिपोजिटरी बनाएँ
नए रिपोजिटरी को मूल के रूप में जोड़ें, और अपनी शाखा को पुश करें।
git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master
<REMOTE_REPOSITORY_URL>
उस दूरस्थ रिपोजिटरी के लिंक से प्रतिस्थापित करें जिसे आपने अभी बनाया है।
आपको 'मुख्य' के स्थान पर 'मास्टर' को डिफ़ॉल्ट शाखा के रूप में उपयोग करने के लिए अपनी रिपॉजिटरी सेटिंग्स को बदलने की आवश्यकता हो सकती है।
ऐसा करने के बाद आप 'मुख्य' शाखा को हटा सकते हैं।
चरण 2: पूरा! हम गैस से खाना बना रहे हैं ⛽️
अपना EC2 इंस्टेंस लॉन्च करने के लिए ये चरण हैं:
EC2 डैशबोर्ड पर जाएँ और एक नया इंस्टैंस लॉन्च करें।
उपयुक्त AMI (अमेज़न मशीन इमेज) चुनें; मैं अमेज़न लिनक्स 2 का उपयोग कर रहा हूँ।
अब, आइए टर्मिनल पर SSH के माध्यम से आपके सर्वर में लॉग इन करने का परीक्षण करें:
ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem
वहां मौजूद वेरिएबल्स को आपके EC2 इंस्टैंस के लिए परिभाषित मानों से बदलें।
यदि आप यह देखते हैं तो आप अपने सर्वर से जुड़ गए हैं, बधाई हो! 👏
आइए अपने सर्वर पर NodeJS स्थापित करें:
sudo yum install -y nodejs
npm के माध्यम से हमारे सर्वर पर pm2 को वैश्विक रूप से स्थापित करें
sudo npm i -g pm2
सर्वर पर git स्थापित करें, और अपने क्रेडेंशियल कॉन्फ़िगर करें:
sudo yum install git -y
git config --global user.name "Your Name" git config --global user.email "[email protected]"
ठीक है, अब हम एक var/www/
फ़ोल्डर बनाने जा रहे हैं यदि यह पहले से मौजूद नहीं है:
sudo mkdir -p /var/www
फिर हमारे ec2-user में स्वामित्व जोड़ें:
sudo chown -R ec2-user:ec2-user /var/www
अपने सर्वर के रूट से डायरेक्टरी पर जाएँ - /home फोल्डर पर नहीं 👌 cd ~/var/www
अब, यहाँ से, हम अपने git रिपॉजिटरी को क्लोन करेंगे: git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY
[USERNAME] [REPO_NAME] और [YOUR_PROJECT_DIRECTORY] को अपने स्वयं के मानों से बदलें.
इसके बाद, हम निर्देशिका को अपने रिपॉजिटरी में बदलते हैं, ताकि cd YOUR_PROJECT_DIRECTORY
हमारे pm2 सेटअप के लिए ecosystem.config.js
फ़ाइल बना सके:
nano ecosystem.config.js
यह इस तरह दिख रहा है:
module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };
ठीक है, ठीक है - एक बार यह बना और सहेजा गया, चलो pm2 के साथ ऐप शुरू करते हैं:
pm2 start ecosystem.config.js
अब, हम जाँच सकते हैं कि हमारे सर्वर से पोर्ट 3000 पर 'Hello World!' संदेश आया है या नहीं:
सर्वर पुनः आरंभ होने पर pm2 को स्वचालित रूप से प्रारंभ करने के लिए, आइए चलाएँ:
pm2 save pm2 startup
यह जांचने के लिए कि आपका सर्वर चल रहा है, आप pm2 status
कर सकते हैं; आप pm2 पर दस्तावेज़ यहां पढ़ सकते हैं
अगर आप यहां तक पहुंच गए हैं, तो आप सुपरस्टार हैं ⭐️
यह हमारी प्रक्रिया का अंतिम चरण है। हम Github क्रियाओं के लिए एक .yml
फ़ाइल बनाने जा रहे हैं ताकि जब भी कोई परिवर्तन हमारी मास्टर शाखा में भेजा जाए तो हमारा सर्वर अपडेट हो जाए
अपने रिपॉजिटरी में, 'एक्शन' टैब पर जाएं और एक नया कस्टम वर्कफ़्लो बनाएं। मैं अपना nodejs.yml
कह रहा हूँ
रिपो को अद्यतन करने और pm2 को पुनः आरंभ करने के लिए .yml फ़ाइल यहां दी गई है:
name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application
'your_project_directory' को अपडेट करना सुनिश्चित करें
अंत में, आपको इन पर्यावरण रहस्यों को जोड़ना होगा। REMOTE_HOST
यह आपके सर्वर का IP पता है; REMOTE_USER
यह Amazon Linux 2 AMI के लिए ec2-user
है, और फिर अपनी .pem फ़ाइल की सामग्री को SSH_PRIVATE_KEY
के रूप में पेस्ट करें।
आप यह सब रिपोजिटरी सेटिंग्स में कर सकते हैं:
बस हो गया! हमने काम पूरा कर लिया, वाह 😁
आप 'हैलो वर्ल्ड' संदेश को बदलकर और उस परिवर्तन को अपनी मास्टर शाखा में डालकर यह सब परीक्षण कर सकते हैं; फिर आपको http://your.ip.address:3000
पर अपडेट दिखाई देगा।
इसे सेट अप करना थोड़ा मुश्किल है, लेकिन जब आप विकास कर रहे हों, तो आपके REST API सर्वर पर परिवर्तनों को स्वचालित रूप से तैनात करने वाली एक आसान CI/CD पाइपलाइन होना वाकई बहुत अच्छा है। इस तरह, आप परिवर्तनों को जल्दी से लाइव तैनात कर सकते हैं और उन्हें अपने वेब/मोबाइल एप्लिकेशन के फ्रंट एंड में देख सकते हैं।
टिप्पणियों में मुझे बताएं कि क्या यह उपयोगी था, और पढ़ने के लिए धन्यवाद!!
मित्रों अलविदा,
— वेस