Node.jsAdvanced
Production Deployment & Optimization
PM2, clustering, logging, rate limiting, security — production-এ Node.js app চালানো বাংলায়।
15টি অংশবাংলা ভাষায়
Process Manager (PM2)
PM2 production-এ Node.js process manage করার জন্য ব্যবহৃত হয়। এটি auto-restart, clustering, log management — সব করে।
# install
npm install -g pm2
# start app
pm2 start app.js
# start with name
pm2 start app.js --name "my-app"
# list all processes
pm2 list
# logs
pm2 logs
# restart
pm2 restart my-app
# stop
pm2 stop my-app
# cluster mode (CPU cores ব্যবহার)
pm2 start app.js -i maxClustering
cluster.jsjavascript
javascript
const cluster = require("node:cluster");
const os = require("node:os");
const http = require("node:http");
if (cluster.isPrimary) {
const numCPUs = os.cpus().length;
console.log("Master process:", process.pid);
console.log("Forking", numCPUs, "workers");
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on("exit", (worker) => {
console.log("Worker", worker.process.pid, "died. Restarting...");
cluster.fork();
});
} else {
http.createServer((req, res) => {
res.end("Hello from worker " + process.pid);
}).listen(3000);
console.log("Worker", process.pid, "started");
}Rate Limiting
npm install express-rate-limitconst rateLimit = require("express-rate-limit");
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100, // per IP max 100 requests
message: "অনেক বেশি request পাঠানো হয়েছে",
});
app.use("/api/", limiter);Security Best Practices
npm install helmet corsconst helmet = require("helmet");
const cors = require("cors");
// Security headers
app.use(helmet());
// CORS
app.use(cors({
origin: "https://myfrontend.com",
methods: ["GET", "POST"],
}));
// Disable X-Powered-By
app.disable("x-powered-by");Logging
npm install winstonconst winston = require("winston");
const logger = winston.createLogger({
level: "info",
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: "error.log", level: "error" }),
new winston.transports.File({ filename: "combined.log" }),
],
});
logger.info("Server started");
logger.error("Database connection failed");Production Checklist
Environment variables সেট করুন, Helmet ও CORS যোগ করুন, Rate limiting চালু করুন, PM2 দিয়ে process manage করুন, log file রাখুন।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।