DevOps for JavaScript Developers — From Localhost to Global Scale
"From Localhost to Global Scale"
DevOps কোনো টুল নয়, এটি একটি কালচার। ডেভেলপার (Dev) এবং অপারেশন (Ops) টিমের মেলবন্ধন। একজন সিনিয়রের কাজ শুধু server.js রান করা নয়, অ্যাপকে কন্টেইনারাইজ করা, অটোমেট করা এবং মনিটর করা।
⭐ ১. Docker: The Shipping Container 🐳
🎯 Core Concepts:
- Dockerfile: অ্যাপ রান করার রেসিপি
- Image: রেসিপি থেকে তৈরি রান্না করা খাবার (Read-only)
- Container: ইমেজ যখন রান হয় (Running Instance)
- Volume: ডাটা সেভ রাখার জায়গা
🐳 Dockerfile (Production Grade)
# 1. Base Image (Alpine ~5MB)
FROM node:18-alpine
# 2. Work Directory
WORKDIR /app
# 3. Copy dependencies first (Layer Caching)
COPY package*.json ./
# 4. Install only production deps
RUN npm ci --only=production
# 5. Copy source code
COPY . .
# 6. Security (Don't run as root)
USER node
# 7. Port expose
EXPOSE 3000
# 8. Start command
CMD ["node", "src/index.js"]
🐳 Docker Compose (Multi-Service)
version: "3.8"
services:
api:
build: .
ports: ["3000:3000"]
depends_on: [postgres, redis]
postgres:
image: postgres:15-alpine
environment:
POSTGRES_PASSWORD: secret
volumes: [pgdata:/var/lib/postgresql/data]
redis:
image: redis:alpine
volumes:
pgdata:
💡 কমান্ড: docker compose up -d
⭐ ২. Kubernetes (K8s): The Ship Captain 🚢
📦 K8s Deployment (deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-node-app
spec:
replicas: 3 # সবসময় ৩টা কপি চলবে
selector:
matchLabels:
app: node-api
template:
metadata:
labels:
app: node-api
spec:
containers:
- name: node-api
image: my-node-app:v1
ports:
- containerPort: 3000
⭐ ৩. CI/CD: The Automation Factory 🤖
⚙️ GitHub Actions (.github/workflows/deploy.yml)
name: Production Build
on:
push:
branches: [ "main" ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm test
- name: Build & Push Docker Image
run: |
docker build -t myuser/myapp:latest .
docker push myuser/myapp:latest
- name: Deploy via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_IP }}
script: |
docker pull myuser/myapp:latest
docker compose up -d --build api
⭐ ৪. Reliability: Load Testing (k6) 🏋️♂️
📊 load-test.js
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
vus: 100, // ১০০ ভার্চুয়াল ইউজার
duration: '30s', // ৩০ সেকেন্ড ধরে
};
export default function () {
http.get('http://localhost:3000/api/products');
sleep(1);
}
💡 কমান্ড: k6 run load-test.js
⭐ ৫. Monitoring & Logging: The Dashboard 📊
📈 Prometheus
CPU, RAM, Request Count
📊 Grafana
চার্ট এবং গ্রাফ
📝 Winston/Pino Logging
const logger = require('pino')();
logger.info({ user_id: 123, action: 'login' }, 'User logged in');
// Output: {"level":30,"time":167...,"user_id":123,"msg":"User logged in"}
⭐ ৬. Deployment Strategies (Zero Downtime) 🚀
🟢🔵 Blue-Green Deployment
Blue (Live v1) → Green (v2) ডেপ্লয় → টেস্ট → রাউটার সুইচ → No Downtime!
🐦 Canary Deployment
5% → 10% → 50% → 100% ইউজার (Google, Facebook style)
🧠 ৭. Senior Interview Questions
Q1: Docker এবং VM এর পার্থক্য?
A: VM এর নিজস্ব OS থাকে (GBs ভারী), Docker হোস্ট OS এর কার্নেল শেয়ার করে (MBs হালকা)
Q2: Horizontal vs Vertical Scaling?
A: Vertical = RAM/CPU বাড়ানো (লিমিটেড), Horizontal = নতুন সার্ভার যোগ করা (আনলিমিটেড)
Q3: Kubernetes এ Ingress এর কাজ কী?
A: ক্লাস্টারের বাইরের ট্রাফিককে ভেতরের সার্ভিসে রাউট করা, SSL, ডোমেইন হ্যান্ডলিং
🚀 অধ্যায় ২৯ সারাংশ (Checklist)
- ✓Container: Docker দিয়ে অ্যাপ পোর্টেবল করা
- ✓Orchestration: Kubernetes দিয়ে স্কেল করা
- ✓Automation: GitHub Actions দিয়ে CI/CD
- ✓Safety: k6 লোড টেস্ট + Prometheus/Grafana মনিটরিং
- ✓Strategy: Blue-Green দিয়ে Zero Downtime
Next Step: আমাদের জার্নি প্রায় শেষ। এখন সব নলেজ একত্রিত করে একটি "Complete Enterprise-Level Project Blueprint" তৈরি করব।