কোডউইথ স্নিগ্ধ
হোমব্লগফ্রি রিসোর্স
LoginSign Up

নিউজ লেটার পেতে সাবস্ক্রাইব করুন

এতে করে নতুন পোস্ট করলেই আপনার মেইলে নোটিফিকেশন চলে যাবে

কোড উইথ স্নিগ্ধ

বাংলায় জ্ঞান ও সম্পদের একটি বিশেষ প্ল্যাটফর্ম। প্রযুক্তি, শিক্ষা এবং জীবনের নানা বিষয় নিয়ে আলোচনা।

Categories

  • প্রযুক্তি
  • শিক্ষা
  • জীবনধারা
  • স্বাস্থ্য
  • বিজ্ঞান
  • সংস্কৃতি

© 2026 কোড উইথ স্নিগ্ধ। সর্বস্বত্ব সংরক্ষিত।

Made with কোড উইথ স্নিগ্ধ

Back to Blog
সফটওয়্যার ইঞ্জিনিয়ারিং#AWS#EC2#DEPLOYMENT

MY FIRST EXPERIENCE WITH AWS EC2

Md SinikdhoMd Sinikdho
২৮ সেপ্টেম্বর, ২০২৬ 156 বার পড়া 6 মিনিট পড়া
শেয়ার করুন:

আজকে আমি AWS-এর EC2-তে আমার জীবনের প্রথম Experience কেমন ছিল, সেটা বিস্তারিত বলবো।

MY FIRST EXPERIENCE WITH AWS EC2

প্রথমে আমি Ubuntu Operating System-এর একটি EC2 (Elastic Compute Cloud) Instance তৈরি করি। এরপর SSH দিয়ে নিজের Computer-এর Terminal থেকে সেই Server-এ Login করি।

সত্যি বলতে, প্রথমবার নিজের Computer থেকে একটা Remote Server-এ Login করার সেই Feeling-টা অন্যরকম ছিল। এটা আসলে বোঝানোর মতো না! 🤯😁

এরপর প্রথম কাজ হিসেবে Server-এর Package List Update করে নিলাম।

Command 01 — Package Update

sudo apt update
sudo apt upgrade -y

এই Command দুটো দিয়ে Server-এর Package এবং Softwareগুলো Update করে নিলাম।

এরপর আমার JavaScript Application Run করার জন্য Node.js Runtime Install করার পালা।

Command 02 — Node.js Install

এখানে Node.js Install করার জন্য আমি NodeSource-এর মাধ্যমে Node.js Setup করে নিয়েছিলাম।

এরপর Node.js ঠিকভাবে Install হয়েছে কিনা Check করে নিলাম:

node -v
npm -v

Node.js Install হয়ে গেল। এবার আমার Project Clone করে Build করার পালা। 🥲

প্রথমে Server-এ Git আছে কিনা Check করে নিলাম।

Command 03 — Git Check

git --version

দেখলাম Git আগে থেকেই Install করা আছে। যাইহোক, অনেক ভালো! 😁

এবার আসল সমস্যা।

আমার Project GitHub-এ আছে, তাও আবার Private Repository। এখন এটা Server-এ Clone করবো কীভাবে? 🙂

Private Repository Clone করার জন্য GitHub থেকে Authentication সেটআপ করতে হবে। আমি Personal Access Token (PAT) তৈরি করে নিলাম।

GitHub Account → Settings → Developer settings → Personal access tokens → Tokens (classic)

Token তৈরি করার পর Repository Clone করলাম।

Command 04 — Repository Clone

git clone https://github.com/USERNAME/REPOSITORY.git

Clone হয়ে গেলে Project Directory-তে ঢুকে গেলাম।

cd PROJECT_NAME

এরপর আমার .env File তৈরি করার পালা।

Command 05 — Environment File

nano .env

Terminal-এর মধ্যেই একটা Editor Open হলো। সেখানে আমার Project-এর প্রয়োজনীয় Environment Variablesগুলো Paste করলাম।

Save করার জন্য:

Ctrl + O → Enter

এরপর বের হওয়ার জন্য:

Ctrl + X

সবকিছু ঠিকঠাক। এবার Dependency Install করে Project Build করার পালা।

Command 06 — Dependency Install

npm install

এরপর:

Command 07 — Production Build

npm run build

কিন্তু এখানেই পেলাম প্রথম বড় Error! 😭

Build হতে হতে কিছুক্ষণ পর দেখি Process Killed হয়ে গেছে।

এর কারণ খুঁজতে গিয়ে বুঝলাম, ছোট EC2 Instance-এ RAM খুবই সীমিত থাকে। আর Next.js Project যখন Production Build তৈরি করে, তখন Build Process-এর সময় বেশ ভালো পরিমাণ Memory প্রয়োজন হতে পারে।

RAM শেষ হয়ে গেলে Linux Server কোনো Process Kill করে দিতে পারে।

এখন উপায় কী?

উপায় হচ্ছে Swap Memory তৈরি করা।

মানে RAM-এর পাশাপাশি Disk-এর কিছু জায়গাকে Virtual Memory হিসেবে ব্যবহার করবো।

Command 08 — Swap Memory তৈরি

প্রথমে 2GB-এর একটি Swap File তৈরি করলাম:

sudo fallocate -l 2G /swapfile

এরপর File-এর Permission ঠিক করলাম:

sudo chmod 600 /swapfile

তারপর Swap তৈরি করলাম:

sudo mkswap /swapfile

এবার Swap Enable করলাম:

sudo swapon /swapfile

সব ঠিকভাবে কাজ করছে কিনা Check করলাম:

free -h

Swap দেখা যাচ্ছে। এবার আবার Build দিলাম:

npm run build

এবার আলহামদুলিল্লাহ, Build Successfully Complete হলো! 😁

কিন্তু একটা সমস্যা এখনো আছে।

আমরা যদি Terminal বন্ধ করে দিই বা Server Restart হয়, তাহলে Application-টা কীভাবে সবসময় চালু থাকবে?

এজন্য ব্যবহার করলাম PM2।

Command 09 — PM2 Install

sudo npm install -g pm2

PM2 Install হয়ে গেলে আমার Next.js Application Start করলাম:

Command 10 — Application Start

pm2 start npm --name "sellinfinity" -- start

তারপর Process Save করে দিলাম:

pm2 save

Server Restart হলেও যাতে PM2 Automatically Start হয়, এজন্য:

pm2 startup

PM2 যে Command দেখাবে, সেটা Copy করে Run করে দিলাম।

বাহ! এটাও Done। 😁

কিন্তু এখনো একটা সমস্যা।

আমার Website Server-এর localhost-এ চলছে। অর্থাৎ বাইরে থেকে কেউ সরাসরি Website-এ Visit করতে পারছে না।

এখন এটাকে Public করার পালা।

এজন্য ব্যবহার করলাম Nginx।

Nginx আমাদের Server-এর Incoming Request গ্রহণ করে সেই Request-কে Application-এর Port 3000-এর দিকে Proxy করবে।

প্রথমে Nginx Install করলাম।

Command 11 — Nginx Install

sudo apt install nginx -y

এরপর Nginx-এর Default Configuration File Open করলাম:

Command 12 — Nginx Configuration

sudo nano /etc/nginx/sites-available/default
server {
    listen 80;
    server_name 51.21.135.253;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

এখানে আমার প্রয়োজনীয় Reverse Proxy Configuration বসিয়ে দিলাম।

তারপর Configuration ঠিক আছে কিনা Test করলাম:

Command 13 — Nginx Configuration Test

sudo nginx -t

সব ঠিক থাকলে Nginx Restart করলাম:

Command 14 — Nginx Restart

sudo systemctl restart nginx

এরপর Browser থেকে Server-এর Public IP Address-এ Visit করলাম।

আলহামদুলিল্লাহ! 😁

Server IP দিয়ে Visit করতেই আমার Website চলে আসলো।

সত্যি বলতে, এই মুহূর্তটাও অনেক ভালো লাগার ছিল। নিজের হাতে একটা EC2 Server Setup করে সেখানে নিজের Project Deploy করেছি!

কিন্তু এবার নতুন একটা প্রশ্ন।

আমি যদি Website-এ কোনো Update করি, তাহলে কি প্রতিবার Server-এ গিয়ে আবার git pull, npm install, npm run build, pm2 restart করতে হবে? 🙂

অবশ্যই না।

এবার আসলো GitHub Actions-এর পালা।

আমি চাই, GitHub Repository-এর main Branch-এ Code Push করার সাথে সাথে Server Automatically Update এবং Redeploy হয়ে যাক।

এর জন্য প্রথমে GitHub Repository-এর:

Settings → Secrets and variables → Actions

এ গিয়ে প্রয়োজনীয় Repository Secrets Add করলাম।

যেমন:

HOST
USERNAME
SSH_PRIVATE_KEY

এরপর Project-এর ভিতরে GitHub Actions-এর জন্য Workflow File তৈরি করলাম।

Command 15 — Workflow Folder

mkdir -p .github/workflows

এরপর deploy.yml নামে File তৈরি করলাম:

nano .github/workflows/deploy.yml

এখানে আমার Deployment Workflow লিখলাম:

name: Deploy to EC2

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Deploy to Server
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}

          script: |
            cd ~/Myproject
            git pull origin main
            npm install
            npm run build
            pm2 restart Myproject

এখন থেকে আমি যখন main Branch-এ নতুন Code Push করবো, GitHub Actions Automatically আমার EC2 Server-এ SSH করবে।

তারপর Repository থেকে Latest Code Pull করবে, Dependency Install করবে, নতুন করে Build করবে এবং সবশেষে PM2 Restart করবে।

এরপর আমার Domain-টাও Cloudflare-এর মাধ্যমে EC2 Server-এর সাথে Connect করে নিলাম।

এই ছিল AWS EC2 নিয়ে আমার জীবনের প্রথম Experience।

শুরুতে শুধু একটা Server Create করা দিয়ে শুরু করেছিলাম।

এরপর SSH, Linux Command, Git, Private Repository, .env, Node.js, Swap Memory, PM2, Nginx এবং GitHub Actions—একটার পর একটা বিষয় হাতে-কলমে শেখা হয়ে গেল।

নিজের একটা Real Project Deploy করতে গিয়ে একটার পর একটা Problem সামনে এসেছে, আর সেই Problem Solve করতে গিয়েই বিষয়গুলো ভালোভাবে বুঝতে পেরেছি।

এটাই ছিল আমার AWS EC2-তে প্রথম Experience। ❤️

#AWS#EC2#DEPLOYMENT

মন্তব্যসমূহ (0)

মন্তব্য করতে লগইন করুন

Login to Comment