মনে করেন আপনি একটা সুন্দর nodejs এপ্লিকেশন তৈরী করে ফেললেন। এখন আপনার এই এপ্লিকেশন পাবলিশ করার জন্য একটা স্টেপ বাকী থাকে, সেটা হলো এপ্লিকেশন ডিপ্লয় করা। সাধারন ভাবে এই প্রেসেসে একটা লম্বা লিস্ট ধরে কাজ করতে হয়, যেমন: ডিপেন্ডেন্সি ইনস্টল করা, ওয়েব সার্ভার সেট আপ করা, গিট রিপোজেটরী থেকে সোর্স কোড ক্লোন করা...ব্লা ব্লা, ডকার ব্যাবহার করলে স্টেপ তুলনামুলক ভাবে কম, তারপরেও ম্যানুয়াল কাজ আছেই। আপনার এপ্লিকেশন যদি CI/CD পাইপলাইন দিয়ে ডিপ্লয় হয় তাইলে অবশ্য এত টেনশন নাই। কিন্তু সেক্ষেত্রে প্রথমে CI সেট আপ করা, সার্ভার মেইনটেইন করা টাইপের হালকা কিছু কাজ থেকেই যায়।

Heroku ব্যাবহার করলে এপ্লিকেশন ডিপ্লয় করার কষ্ট অনেকাংশেই কমে যাবে। গিট দিয়ে রিমোর্ট ব্রাঞ্চে পুশ করলে সেখান থেকেই বিল্ড হয়ে ডিপ্লয় করে আপ্লিকেশন রেডী করে ফেলবে। আরো মজার বিষয় হচ্ছে ছোট সাইজের এপ্লিনেশনের জন্য বিনামুল্যেই করতে পারবেন। কেবলমাত্র এপ্লিকেশনে যখন লোড বেশ ভালো পরিমানে বেড়ে যাবে, তখন বিলিং নিয়ে টেনশন করতে হবে। আমার এক্স কলিগ রেজা ভাইয়ের মতে, "এই টেনশন আনন্দের টেনশন"

এই পোস্টে আলোচনা করবো জাভাস্ক্রিপ্ট এপ্লিকেশন ডিপ্লয় করা নিয়ে। তবে অন্য এপ্লিকেশন ডিপ্লয় করার প্রোসেস কম বেশী সেইম।

প্রথম স্টেপ অবশ্যই এপ্লিকেশন ডেভেলপ করা। তবে এপ্লিকেশন যদি Heroku তে ডিপ্লয় করার প্লান থাকে তাহলে কিছু ব্যাপার মাথায় রাখতে হবে। মজার বিষয় হলো, প্রায় সব বিষয়ই বেস্ট প্রাকটিসেরই অংশ, Heroku তে এপ্লিকেশন না হোস্ট করলেও এপ্লিকেশন এমনভাবেই বানানো উচিত

১। এপ্লিকেশনের সব কনফিগারেশন, এপিআই কি লোড করতে হবে Environment Variable দিয়ে। এক্ষেত্রে ডেভেলপমেন্টের সময় অনেকেই কনফিগারেশন রাখে .env ফাইলে এরপর dotenv নামে একটা নোড প্যাকেজ আছে সেটা দিয়ে ভ্যালুগুলো Environment Variable হিসেবে লোড করে।তবে মনে করে .env ফাইল .gitignore এ এড করতে ভুলবেন না।

২। লোকাল ফাইলসিস্টেমে রানটাইমে ফাইল রাখার ব্যাপারটা পরিহার করতে হবে। ভালো প্রাকটিস হচ্ছে সব স্ট্যাটিক ফাইল কোন ফাইল স্টোরেজ সার্ভিসে রাখা

৩। Heroku এর সাথে রিলেশনাল ডাটাবেজ হিসেবে Postgres ব্যবহার করা যায় (Heroku এর Heroku Postgres এড অন দিয়ে), ডেভেলপমেন্টের সময় পোস্টগ্রেস টার্গেট করে ডাটাবেজ ডিজাইন করাটা জরুরী।

৪। Heroku এর সাথে Redis ও ব্যাবহার করা যায়, ক্যাশ করা আর অপেক্ষাকৃত টেম্পোরারী জিনিসপত্র রাখার জন্য ডেভেলপ করার সময় Redis এ ক্যাশ করার ফিচার সহ এপ্লিকেশন ডেভলপ করতে পারেন।

৫। প্রোর্ট এসাইন করার সময় process.env.PORT  ব্যাবহার করতে হবে এবং অলটারনেটিভ হিসেবে অন্য একটা পোর্ট (Heroku এর স্যাম্পল এপ্লিকেশনে 5050 দেয়া আছে) । এক্সপ্রেসের ক্ষেত্রে লাইনটা হবে কিছুটা এমন : app.listen(process.env.PORT || 5000)

এপ্লিকেশন রেডী করা:

জাভাস্ক্রিপ্ট এপ্লিকেশন Heroku তে ডিপ্লয় করার জন্য যেটা থাকতেই হবে সেটা হলো একটা জাভাস্ক্রিপ্ট এপ্লিকেশন। যদি জাভাস্ক্রিপ্ট এপ্লিকেশন তৈরী করা শিখতে চান, আমার একটা অনলাইন কোর্স আছে সেটাতে এনরোল করতে পারেন

এপ্লিকেশনের package.json ফাইলে দুইটা নতুন রেকর্ড যোগ করতে হবে, নীচে একটা বেসিক package.json এর স্যাম্পল দেয়া আছে (Heroku এর ডকুমেন্টেশন থেকে)

{
  "name": "myapp",
  "description": "a really cool app",
  "main": "index.js",
  "scripts":{
      "start":"node index.js"
  }
  "version": "1.0.0",
  "engines": {
   "node": "10.2.1"
  }
}

উপরের ফাইলে engines অংশটা এক্সট্রা করে যোগ করা, সেখানে এপ্লিকেশন চালানোর জন্য নোডজেএস এর ভার্শন দেয়া আছে । আমার সাজেশন থাকবে আপনার ডেভেলপমেন্ট সিস্টেমের ভার্শনই দেয়া। nodeএর ভার্শন দেখার জন্য --version দিয়ে কমান্ড চালালেই হবে। যেমন node --version দিলে নোডজেএস এর ইনস্টল করা ভার্শন দেখাবে।

সাথে স্ক্রিপ্টস অংশে অবশ্যই "start":"node index.js" (অথবা আপনার এপ্লিকেশনের লঞ্চিং কমান্ড লিখে দিতে ভুলবেন না)

এপ্লিকেশন ডিপ্লয় করা:

১। Heroku তে একটা একাউন্ট খুলে Heroku কমান্ড লাইন টুল ইনস্টল করতে হবে। ইনস্ট্রাকশন এই লিংকে পাবেন

২। কমান্ড লাইনে heroku login কমান্ড দিয়ে ইউজারনেম আর পাসওয়ার্ড দিয়ে লগ ইন করতে হবে।

৩। কমান্ড লাইনে ন্যাভিগেট করে আপনার নোডজেএস এর প্রোজেক্ট ফোল্ডারে যেতে হবে। কমান্ড লাইনে অভ্যস্ত না থাকলে আমার কমান্ড লাইনের অনলাইন কোর্সে অংশগ্রহন করতে পারেন

৪। প্রোজেক্ট ফোল্ডারে গিয়ে heroku create <appname> দিয়ে একটা নতুন এপ্লিকেশন তৈরী করতে হবে। <appname> এর যায়গায় একটা ইউনিক নাম দিবেন, কমন নাম বেশীভাগ সময় দেখা যাবে পাওয়া যাচ্ছে না। এখানে আরো উল্লেখ্য: আপনার প্রোজেক্টের ভার্শন ম্যানেজমেন্টের জন্য git ব্যবহার করতে হবে। এই কমান্ড চালানোর পর heroku একটা নতুন রিমোট রিপোজিটরী যোগ হবে আপনার প্রোজেক্টে, আপনি সরাসরি সেখানে কোড পুশ করতে পারবেন।

৫। আপনার প্রোজেক্টের যত কনফিগারেশন, এপিআই কি আছে, সেগুলো নীচের কমান্ডের মত কমান্ড রান করে প্রোজেক্টে যোগ করতে হবে:

heroku config:set MY_API_KEY=khubsecretkichuakta

এই কমান্ড দিয়ে যোগ করা সব ডাটা আপনি আপনার প্রোজেক্টে process.env অবজেক্টের প্রোপার্টি আকারে পাবেন।

৬। ডাটাবেজ যোগ করতে চাইলে এড অন হিসেবে পোস্টগ্রেস যোগ করতে হবে নীচের কমান্ডের মাধ্যমে:

heroku addons:create heroku-postgresql:hobby-dev

hobby-dev প্লান ডাটাবেজের জন্য ফ্রি, আর ছোট প্রোজেক্টের জন্য যথেষ্ট। এই কমান্ড চালানোর পর DATABASE_URL নামে একটা নতুন Envionment Variable যোগ হবে প্রোজেক্টে, এই ভ্যারিয়েবল একটা কানেকশন স্ট্রিং, আপনার ডাটাবেজ কানেকশনের কোডের কানেকশন স্ট্রিং এর যায়গায় process.env.DATABASE_URL ব্যাবহার করলেই কানেক্ট হয়ে যাবে ডাটাবেজে।

৭। সব কনফিগার করা শেষ হলে এবার কোড পুশ করার পালা, গিট দিয়ে heroku রিমোর্ট রিপোজেটরীতে পুশ করলেই ডিপ্লয়মেন্ট শুরু হবে:

git push heroku master

পুশ করা শেষ হলে, Heroku নিজ দায়িত্বে npm install অথবা প্রোজেক্টে yarn.lock কমিট করা থাকলে yarn install চালিয়ে ডিপেন্ডেন্সি ইনস্টল করে নিবে, তারপর আপনার প্রোজেক্ট nodejs দিয়ে রান করে আপনাকে প্রোজেক্ট এক্সেস করার URL দিয়ে দিবে।

ব্যাস হয়ে গেল। সব ঠিকঠাক ভাবে করলে আপনার এপ্লিকেশনটি Heroku তে ডিপ্লয় হয়ে যাবে 😃