গাইড

Node.js — Next.js, Express ও অন্যান্য

Meghly-তে Next.js, Express বা যেকোনো Node.js অ্যাপ্লিকেশন বিল্ড ও রান করার নিয়ম — ব্যাকগ্রাউন্ড ওয়ার্কার এবং ডেটাবেস মাইগ্রেশনসহ।

সমর্থিত ভার্সন ও টুলস

  • Node.js 24 এবং 22।
  • প্যাকেজ ম্যানেজার: npm, yarn অথবা pnpm — আপনার প্রজেক্টের লক ফাইল (package-lock.json, yarn.lock, pnpm-lock.yaml) কিংবা package.json-এর packageManager ফিল্ড দেখে স্বয়ংক্রিয়ভাবে সঠিকটি বেছে নেওয়া হয়।
  • ফ্রেমওয়ার্ক: Next.js, Express এবং package.json-এ start স্ক্রিপ্ট রয়েছে এমন যেকোনো Node.js সার্ভার (যেমন Fastify, NestJS, Koa, Hono ইত্যাদি)।
  • শুধুমাত্র ফ্রন্টএন্ড প্রজেক্ট হলে (যেমন React, Vue, Vite বা Angular, যেখানে আলাদা ব্যাকএন্ড সার্ভার নেই) সেটি স্ট্যাটিক সাইট হিসেবে চলে — বিস্তারিত দেখুন স্ট্যাটিক সাইট।

Node.js ভার্সন নির্ধারণ

Meghly নিচের ক্রম অনুসারে আপনার অ্যাপের Node.js ভার্সন শনাক্ত করে: .nvmrc → .node-version → package.json-এর engines.node। এগুলোর কোনোটিই না থাকলে ডিফল্ট ভার্সন ব্যবহার করা হয়। নির্দিষ্ট ভার্সন নিশ্চিত করতে package.json-এ নিচের মতো উল্লেখ করে দিন:

package.json
{
  "engines": { "node": "22" }
}

অ্যাপ যেভাবে রান হয়

প্রজেক্টে যা পাওয়া যায়যে কমান্ড দিয়ে Web প্রসেস চলে
next ডিপেনডেন্সি থাকলেবিল্ডের সময় npm run build, এরপর next start -p 8080
start স্ক্রিপ্ট থাকলেnpm start (অথবা yarn/pnpm-এর সমতুল্য কমান্ড)
start স্ক্রিপ্ট নেই, কিন্তু main ফিল্ড বা server.js, index.js, app.js, main.js ফাইল আছেnode <সংশ্লিষ্ট ফাইল>

বিল্ড ধাপে package.json-এ build স্ক্রিপ্ট থাকলে সেটি স্বয়ংক্রিয়ভাবে রান হয়। আপনি নিজস্ব কাস্টম সার্ভার ব্যবহার করলে তা অবশ্যই process.env.PORT পোর্টে এবং 0.0.0.0 হোস্টে রান করবেন:

server.js (Express)
const express = require("express");
const app = express();

app.get("/", (req, res) => res.send("Hello from Meghly"));

app.listen(process.env.PORT || 8080, "0.0.0.0");

ব্যাকগ্রাউন্ড ওয়ার্কার (Worker)

package.json-এর scripts অংশে worker, queue অথবা jobs নামের কোনো স্ক্রিপ্ট থাকলে Meghly সেটিকে স্বয়ংক্রিয়ভাবে আলাদা একটি worker প্রসেস হিসেবে চালু করে (যেমন BullMQ বা কিউ কনজিউমার চালানোর জন্য):

package.json
{
  "scripts": {
    "start": "node server.js",
    "worker": "node jobs/worker.js"
  }
}

একাধিক ওয়ার্কার বা কাস্টম প্রসেস আরও সূক্ষ্মভাবে নিয়ন্ত্রণ করতে চাইলে প্রজেক্টের রুটে Procfile যুক্ত করুন।

ডেটাবেস মাইগ্রেশন

প্রতিবার ডিপ্লয়ের আগে রিলিজ ধাপে (migration login ব্যবহার করে) নিচের নিয়ম অনুযায়ী মাইগ্রেশন রান হয়:

  • package.json-এ migrate, db:migrate অথবা prisma:migrate স্ক্রিপ্ট থাকলে সেটি চলে।
  • প্রজেক্টে Prisma থাকলে স্বয়ংক্রিয়ভাবে prisma migrate deploy কমান্ড রান হয়।
  • অন্য কোনো ORM বা মাইগ্রেশন টুল (যেমন Knex, TypeORM, Drizzle বা Sequelize) ব্যবহার করলে অ্যাপের General → Release command ফিল্ডে আপনার কমান্ডটি লিখে দিন (যেমন npx knex migrate:latest)।

ডেটাবেস ও অন্যান্য সার্ভিস সংযোগ

অ্যাপের সাথে ডেটাবেস যুক্ত করলে স্বয়ংক্রিয়ভাবে DATABASE_URL এনভায়রনমেন্ট ভেরিয়েবল যুক্ত হয়, যা Prisma, Drizzle বা Knex সরাসরি ব্যবহার করতে পারে:

prisma/schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

একইভাবে অ্যাপে Redis যুক্ত করলে REDIS_URL এবং RabbitMQ যুক্ত করলে RABBITMQ_URL ভেরিয়েবল পাওয়া যায়। বিস্তারিত জানতে দেখুন ডেটাবেস গাইড।

Next.js ব্যবহারকারীদের জন্য জরুরি টিপস

  • NEXT_PUBLIC_ প্রিফিক্সযুক্ত ভেরিয়েবলগুলো বিল্ড হওয়ার সময়ই ব্রাউজারের জাভাস্ক্রিপ্ট বান্ডেলে যুক্ত হয়ে যায়। তাই এগুলোর মান পরিবর্তন করলে শুধু রিস্টার্ট দিলে কাজ হবে না; নতুন করে ডিপ্লয় দিতে হবে।
  • রানটাইমে next/image-এর ক্যাশ বা অন্য কোনো ফাইল রাইট করার প্রয়োজন হলে তা /tmp অথবা ভলিউমে সংরক্ষিত হয়; অ্যাপ চলাকালীন .next/cache ফোল্ডারে সরাসরি ফাইল রাইট করা নির্ভরযোগ্য নয়।
  • WebSocket (যেমন socket.io) কোনো বাড়তি কনফিগারেশন ছাড়াই সরাসরি অ্যাপের HTTPS ডোমেইনে কাজ করে।

সচরাচর সমস্যা ও সমাধান

যে সমস্যা বা এরর দেখছেনকারণ ও সমাধান
Detect: "No start script, main file or server.js"আপনার package.json ফাইলে একটি start স্ক্রিপ্ট যুক্ত করুন।
হেলথ চেক ধাপে ডিপ্লয় থেমে যাচ্ছেঅ্যাপটি process.env.PORT পোর্টে এবং 0.0.0.0 হোস্টে লিসেন করছে কি না তা নিশ্চিত করুন।
EROFS: read-only file systemঅ্যাপটি মূল কোড ফোল্ডারের ভেতর ফাইল লেখার চেষ্টা করছে। ফাইল সেভ করার জন্য /tmp অথবা স্থায়ী ভলিউম ব্যবহার করুন।
ভিন্ন Node ভার্সনে বিল্ড হচ্ছেপ্রজেক্টে .nvmrc ফাইল অথবা package.json-এ engines.node যুক্ত করে সঠিক ভার্সনটি উল্লেখ করে দিন।

আটকে গেছেন?

আমাদের ইঞ্জিনিয়ারদের সাথে সরাসরি কথা বলুন — ফোন বা ইমেইলে, বাংলায়।

01782618248shohag.meghly@gmail.com