Hello Viewers! বাংলায় বৃহৎ লার্নিং হাবে আপনাকে স্বাগতম। আশা করি সবাই ভালো আছেন, আর হ্যাঁ আমিও ভালো আছি। আজকের পর্বে আমরা আলোচনা করবো, সার্ভার তৈরি করা নিয়ে আমরা কি কি ভুল গুলো করে থাকি এবং এর থেকে কিভাবে বাঁচতে হয় তা নিয়ে ধাপে ধাপে বর্ণনা করবো। এই সামান্য ভুলগুলো থেকে সতর্ক হলে Heroku এর মাথাব্যথা করা Error থেকে রক্ষা পাওয়া যাবে। প্রথমে আমরা কমন ভুল গুলো নিয়ে আলোচনা করবো এবং পরে আমরা শুরু থেকে শেষ পর্যন্ত কিভাবে একটা সার্ভার তৈরি করতে হয় তা ধাপে ধাপে আলোচনা করবো। তাহলে শুরু করা যাক।
প্রথম ধাপঃ সার্ভার তৈরি করার সময়, আমাদের প্রথম ভুল টা হলো আমাদের প্রাথমিক যা যা সেটাপ বা ইন্সটল করা প্রয়োজন তা আমরা কিন্তু সবাই জানি। কিন্তু কেন জানি আতি উৎসাহী হয়ে মাঝে মাঝে কিছু কমান্ড দিতে ভূলে যাই আর তা হলো Cors অথবা dotenv ।
সমাধানঃ সার্ভার তৈরি করার সময় অবশ্যই মাথা ঠান্ডা রেখে কাজ করতে হবে, কেননা এখান থেকে Error এর যাত্রা শুরু হয়, আমরা যদি একটু সতর্কতা অবলম্বন করতে পারি তাহলে অনেকটা Error থেকে রক্ষা পেতে পারি। তাহলে প্রাথমিক ধাপে যে যে প্যাকেজ
ইন্সটল করতে হয় তা হলো। mongodb, express, cors, dotenv, nodemon
ইন্সটল করার নিয়মঃ
কমান্ড লাইনে গিয়ে ( ভালো আউটপুটের জন্য Git Bash ব্যবহার করুন ) : npm install স্পেস
mongodb স্পেস express স্পেস cors স্পেস dotenv স্পেস nodemon )
কমান্ড লাইনের নমুনাঃ
npm install mongodb express cors dotenv nodemon
অথবা,
npm i mongodb express cors dotenv nodemon
উল্লেখ্য, উপরিল্লোখিত প্যাকেজ ছাড়াও আমরা আরো একটা কমন প্যাকেজ নিয়ে কাজ করে থাকি আর তা হলো jsonwebtoken। এটা সাধারণত npm install jsonwebtoken Or npm i jsonwebtoken এই কমান্ড দিয়ে ইন্সটল করে নিতে হয়। তবে এখানে jsonwebtoken এর জন্য আমাদের একটা টোকেন জেনারেট করতে হয়। এই টোকেন সাধারণতে অনলাইন থেকে তৈরি করে ব্যবহার করা যায়। তবে আমরা তা আমাদের কমান্ড লাইনে দিয়েও তৈরি করতে পারি। আর আমরা এখানে আলোচনা করবো, কিভাবে কমান্ড লাইন ব্যবহার করে টোকেন তৈরি করা যায়।
কমান্ড লাইনে টোকেন জেনারেটেঃ
প্রথমে টারমিনাল ওপেন করবেন (যে কোন একটা হলেয় হয়, তবে গিট ব্যাস অথবা পাওয়ার শেল ব্যবহার করতে পারেন) তারপর node লিখুন এবং হিট Enetr Key তারপর require('crypto').randomBytes(64).toString('hex') এই কমান্ড লিখে হিট Enter Key. আপনার টোকেন জেনারেট হয়ে টারমিনালে দেখতে পারবেন। আর হ্যাঁ যদি টোকেন নতুন করে জেনারেট করতে চান তাহলে জাস্ট হিট up arrow এবং হিট Enter Key.
অথবা কপি কোড
require("crypto").randomBytes(64).toString("hex");
হিট Enter Key.
দ্বিতীয় ধাপঃ আমাদের তো প্যাকেজ ইন্সটল হলো, এখন আমরা index.js ফাইলে গিয়ে আমাদের প্রয়োজনিয় প্যাকেজ গুলো রিকোয়ার করে নিবো, এখানেও আমরা কিছু ভূল করি আর তা হলো cors, dotenv এবং Middleware গুলো রিকোয়ার করতে ভূলে যাই। তাহলে সমাধান করে নেওয়া যাক Index.js ফাইলে ওপেন করে, শুধু নিন্মোল্লিখিত কোড টা হুবহু কপি করবেন এবং ফাইলের মধ্যে পেষ্ট করে দিবেন।
const express = require("express");
const cors = require("cors");
require("dotenv").config();
const app = express();
const port = process.env.PORT || 5000;
// Middle Ware
app.use(cors());
app.use(express.json());
app.get("/", (req, res) => {
res.send("Hello, Welcome notesaid24 World!");
});
app.listen(port);
তৃতীয় ধাপঃ MongoDB সেটাপে আমরা যে ভূল করে থাকি আর তা হলো । আমরা আমাদের প্রোজেক্ট সার্ভারের ডাটাবেইজ এ্যক্সেস করার ইউজার নেম এবং পাসওয়ার্ড সেটাপ করতে ভুলে যাই।
নোটঃ প্রোজেক্ট এর ডাটাবেইজ তৈরি করার সময় অবশ্যই Network Access থেকে Allow Access From Anywhere আইপি কনফার্ম করে নিবো।
যাক পর কথায় আসি, আমাদের ডাটাবেইজ তৈরি করা হলো, এখন আমাদের Error নিয়ে আলোচনা করি। আমরা যখন ডাটাবেইজ তৈরি করি তখন Database > connect > connect your application থেকে আমাদের এ্যপ্লিকেশনে কানেন্ট করার জন্য একটা কোড স্নিপেট দিয়ে থাকে, আর তার মধ্যে যেখানে আমরা সচরাচর ভুল করে থাকি। তাহলে সমাধান করে নেওয়া যাক।
const uri = "mongodb+srv://web_admin:@cluster0.4zes16q.mongodb.net/?retrWrites=true&w=majority";
উপরিল্লোখিত কোডের মধ্যে আমাদের মোটা হরফের অংশটুকু পরিবর্তন করতে হয়, আর তা দুই ভাবে করা যায়, এখানে আমরা উভয় ধাপে দেখবো।
প্রথম ধাপঃ আমরা আমাদের প্রোজেক্ট সার্ভারের ডাটাবেইজ এ্যক্সেস করার ইউজার নেম এবং পাসওয়ার্ড সরাসরি দিয়ে ডাটাবেইজ কানেক্ট করতে পারি, তার নমুনা হলো।
const uri = "mongodb+srv://web_admin:qswertxcdes@cluster0.4zes16q.mongodb.net/?retryWrites=true&w=majority";
দ্বিতীয় ধাপঃ আমরা ইতিপূর্বে প্রজেক্ট সেটাপে dotenv নামে একটা প্যাকেজ ইন্সটল করেছি, অবশ্যই মনে আছে। ঐ প্যাকেজের মূল উদ্দেশ্যই হলো পাবলিক জগতে আমাদের ডাটাবেইজ এর ইউজার নেইম এবং ইউজার পাসওয়ার্ড কে সিকিউর করা। কিন্তু সিকিউর করার জন্য কিছু ধাপ আনুসরন করতে হয় , আর তা হলো……
প্রথমে আপনাদের লোকাল মেশিনের সার্ভার ফোল্ডারের রুটে .env নামে একটা ফাইল তৈরি করে নিবেন। আর সাথে সাথে .gitignore নামের আরও একটা ফাইল তৈরি করে নিবেন। তারপর .env ফাইলের মধ্যে আপনার ডাটাবেইজের ইউজার নেইম এবং পাসওয়ার্ড রাখবেন।
তার নমুনাঃ
USER_NAME=web_admin
USER_PASSWORD=qswertxcdes
তবে মনে রাখবেন, কপি এবং পেষ্ট করার সময় অতিরিক্ত স্পেইস গুলো রিমোভ করে নিবেন। মাঝে মাঝে এখান থেকেও Error দিয়ে থাকে। আর সাথে সাথে .gitignore ফাইলের ভিতরে .env এই লেখা টা হুবহু লিখে দিবেন।
তারপর আমরা ডাটাবেইজ থেকে প্রদত্ত কানেক্ট কোড কে ডাইনামিক করে নিবো। আর তা করার জন্য uri এর স্টিং ভিতরের কোড কাট করে নিবো, তবে সতর্কতার সাথে এবং তার নমুনা।
const uri = "";
তারপর এই স্ট্রিং টা কে ব্যাক্টিকের সাহায্যে ডাইনামিক করে নিবো ( ব্যাকটিক আপনার কিবোর্ডের Tab বাটনের ঠিক উপরের বাটন টা) এবং তার নমুনা।
const uri = ``;
এবার আমরা আমাদের ডাটাবেইজের ইউজার নেইম এবং ইউজার পাসওয়ার্ডের পূর্বে process.env যোগ করে নিবো এবং তার নমুনা।
process.env.USER_NAME
process.env.USER_PASSWORD
সবশেষে আমরা আমাদের কপি করা কোড ব্যাকটিকের মধ্যে রেখে উপরিল্লোখিত লেখা বসিয়ে দিবো এবং তার নমুনা।
const uri = `mongodb+srv://${process.env.USER_NAME}:${process.env.USER_PASSWORD}@cluster0.sxvrkdg.mongodb.net/?retryWrites=true&w=majority`;
ব্যাস, আমাদের ডাটাবেইজের ইউজার নেইম এবং পাসওয়ার্ডের কাজ শেষ।
চতর্থ ধাপঃ এবার আসি আমরা Heroku নিয়ে, Heroku তে সাধারণত দুই নিয়মে ওয়েব সার্ভার তৈরি করা যায়, যা নিয়ে আমার এই How to Create Heroku Server Manually এবং How to Create Heroku Server On CLI দূইটি পোস্টে বিস্তারিত আলোচনা করেছি। তাই এই পোষ্টে এটা নিয়ে আলোচনা করলাম না। তবে আগের পোস্ট গুলো দেখে নিলে আশা করি হিরোকু ওয়েব সার্ভার তৈরি করতে সমস্যা হবে না বলে আশা করছি।
এখন আমরা একটা সার্ভার সাইট তৈরিতে শুরু থেকে শেষ পর্যন্ত কি কি কাজ করতে হয় তা সংক্ষিপ্তভাবে আলোচনা করবো।
প্রথম ধাপঃ আপনি আপনার মেশিনে একটা ফোল্ডার তৈরি করে নিবেন (যেমনঃ web-project-server)
দ্বিতীয় ধাপঃ উক্ত ফোল্ডারটি আপনার Code Editor এ ওপেন করে নিবেন (আমি VS Code ব্যবহার করেছি)
তৃতীয় ধাপঃ আপনি আপনার ইডিটরের মধ্যে টারমিনাল ওপেন করে নিবেন (ভালো আউটপুটের জন্য গিট ব্যাস ব্যবহার করতে পারেন, তবে আপানর পছন্দ মতো একটা ব্যবহার করলেই হয়)
চতর্থ ধাপঃ আপনার টারমিনালে npm i –y এই কমান্ড টা রান করবেন। সাথে সাথে একটা ফাইল তৈরি হবে, তার নমুনা – package.json
পঞ্চম ধাপঃ আপানার টারমিনালে- npm I mongodb express cors dotenv nodemon এই কমান্ড টি রান করাবেন । যদি ঠিক মতো রান হয় তাহলে আরও দুইটি ফাইল তৈরি হবে, তার নমুনা।
node_modules
package-lock.json
ষষ্ট ধাপঃ আপনি আপনার রুট ফোল্ডারের মধ্যে index.js নামে একটা ফাইলে তৈরি করবেন।
সপ্তম ধাপঃ আপনার ফোল্ডারের মধ্যে package.json ফাইল টা ওপেন করে, scripts এর মধ্যে নিন্মের দুইটি স্ক্রিপ্ট যোগ করবেন ("start": "node index.js", "start-dev": "nodemon index.js",) এবং তার নমুনাঃ
"scripts":
{
"start": "node index.js",
"start-dev": "nodemon index.js",
"test":"echo \"Error: no test specified\" && exit 1"
},
অষ্টম ধাপঃ সব ঠিক ঠাক মতো সেটাপ করা হলে আমরা এখন index.js ফাইল ওপেন করে নিন্মের কোড স্নিপেট টা লিখে নিবো, আর তা হলোঃ
const express = require("express");
const cors = require("cors");
require("dotenv").config();
const app = express();
const port = process.env.PORT || 5000;
// Middle Ware
app.use(cors());
app.use(express.json());
app.get("/", (req, res) => {
res.send("Hello, Welcome notesaid24 World!");
});
app.listen(port);
এখন আমরা আমাদের টার্মিনালে nodemon index.js এই কমান্ড টা রান করবো । আর যদি সব ঠিক মতো সেটাপ হলে। আমরা আমাদের ব্রাউজারে গিয়ে http://localhost:5000/এটা দিয়ে সার্চ দিলে Hello, Welcome notesaid24 World! এই লেখাটি দেখতে পাবো (তবে ব্রাউজার হিসেবে যে কোন একটা ব্যবহার করলেই হবে, তবে আমার রেকমেন্ড হলো Google Chrome)
নবম ধাপঃ এখন আমরা আমাদের ডাটা রাখার জন্য MongoDB তে New Project এ ক্লিক করে নতুন একটা প্রজেক্ট তৈরি করবো এবং প্রজেক্টের ইউজার নেইম এবং পাসওয়ার্ড আমাদের মেইন ফোল্ডার একটা .env নামে নতুন একটা ফাইল তৈরি করবো এবং তার মধ্যে আমাদের প্রজেক্টের ইউজার নেইম এবং পাসওয়ার্ড রাখবো এবং .env ফাইলের
নমুনাঃ
USER_NAME=web_admin
USER_PASSWORD=qswertxcdes
দশম ধাপঃ আমাদের মেইন ফোল্ডারের রুটে.gitignore নামে একটা ফাইল তৈরি করবো এবং তাতে নিন্মের দুইটি ফাইল রেখে দিবো এবং তার নমুনাঃ
/node_modules
.env
মনে রাখতে হবে যে, Network Access থেকে Allow Access From Anywhere আইপি কনফার্ম করে নিবেন। (সুবিধা হলো যে কোন জায়গায় থেকে আপনি আপনার ডাটার এ্যক্সেস নিতে পারবেন)।
একাদশতম ধাপঃ প্রজেক্ট তৈরি করার পর Database > Connect > Connect your application > Include full drive code example এ চেকমার্ক করে পুরো কোড স্নিপেট কপি করে নিবেন। তার নমুনাঃ
const { MongoClient, ServerApiVersion } = require('mongodb');
const uri = "mongodb+srv://admin:@cluster0.bwvpgja.mongodb.net/?retryWrites=true&w=majority";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 });
client.connect(err => {
const collection = client.db("test").collection("devices");
// perform actions on the collection object
client.close();
});
নোটঃ URI এর সেটাপ নিয়ে এই পোস্টের প্রথম অংশের তৃতীয় ধাপে বিস্তারিত আলোচনা করেছি ।
কপি করা কোড টি মিডেল ওয়ারের নিচে পেস্ট করে দিন, আপনার MongoDB এর সাথে কানেক্ট হয়ে গেছে এখন আপনার নিজের মতো করে কোড লিখেন এবং আপডেট করেন। আর লোকাল মেশিন থেকে আপনার প্রোজেক্ট কিভাবে হিরোকু সার্ভারে আপলোড করবেন এই নিয়ে বিস্তারিত আলোচনা করেছি. আজকে আর নয় শুধু নিজের ইচ্ছা তে লেখা যা জানি তার উপরে লিখলাম। আর উপরিল্লোখিত লেখায় যদি কোন ভুল দৃষ্টিগোচর হয় তা অবশ্যই কমেন্টে জানাবেন। আশা করি সার্ভার তৈরি করতে আর সমস্যা হবে না, আর যদি সার্ভার তৈরি করতে কোন সমস্যা হয় তাহলে কমেন্ট করে জানিয়ে দিন আশা করি সমাধান দেওয়ার চেষ্টা করবো। আর পোষ্ট ভালো লাগলে শেয়ার করতে ভুলবেন না। সবাই ভালো থাকবেন দেখা হবে অন্য কোন এক দিন নতুন কোন পোষ্টে।