Heroku তে সহজেই নোডজেএস এপ্লিকেশন হোস্ট করা
মনে করেন আপনি একটা সুন্দর 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 তে ডিপ্লয় হয়ে যাবে 😃