Heroku একটি জনপ্রিয় PaaS (Platform as a Service) যেখানে আপনি আপনার ওয়েব এ্যাপ হোস্ট করতে পারবেন। Heroku তে ফ্রি প্ল্যান থাকার কারনে ডেভেলপারদের কাছে এটি অনেক জনপ্রিয়।

এই আর্টিকেলে আমরা দেখবো কিভাবে GitHub ব্যবহার করে Heroku তে একটি Django এ্যাপ অটোম্যাটিক্যালি ডিপ্লয় করতে হয়।

Workflow

  • Heroku তে ডিপ্লয়মেন্টের আগে কিছু সেটাপ করে নিবো।
  • GitHub এ একটি রিপোজিটরি তৈরী করে আমাদের এ্যাপটি সেখানে আপলোড করবো।
  • এরপর Heroku তে একটি এ্যাপ তৈরী করে আমাদের GitHub রিপো এর সাথে কানেক্ট করিয়ে দিবো।
  • Heroku তে অটোমেটিক ডিপ্লয়মেন্ট enable করবো।
  • চতুর্থ ধাপে আমাদের লোকাল মেশিন থেকে আমাদের এ্যাপটি GitHub এ পুশ করবো।

নতুনদের জন্য বলে রাখা ভালো Heroku একটি App হোস্টিং প্ল্যাটফর্ম যেখানে আমাদের এ্যাপ রান/ব্যবহার করা যাবে। অন্যদিকে GitHub একটি সোর্স কোড হোস্টিং প্ল্যাটফর্ম যেখানে আমাদের এ্যাপের সোর্সকোড আপলোড করে রাখা যায়। এদের মধ্যে পার্থক্যটি হলো Heroku আমাদের প্রোজেক্ট রান করে আর GitHub প্রোজেক্টের সোর্সকোড সংরক্ষণ করে রাখে।

এখন আমাদের workflow তে ফিরে আশা যাক।

Pre-deployment Setup

আমাদের একটি সার্ভার লাগবে, যেটি Heroku প্ল্যাটফর্মে আমাদের এ্যাপটি রান করবে। এজন্য আমার Gunicorn ব্যবহার করবো। pip install gunicorn কমান্ডটি রান করে gunicorn ইনস্টল করে নেই।

আমাদের এ্যাপটি এখন যেহেতু public সার্ভারে রান করবে তাই settings.py ফাইলের ALLOWED_HOST এ Heroku এর ডিপ্লয়মেন্ট লিংক দিতে হবে। আপাতত All Host এ এ্যাপটি রান করার পারমিশন দেয়া যাক। ALLOWED_HOSTS = ['*']

একটি requirements.txt ফাইল লাগবে যাতে আমাদের প্রোজেক্ট রান করার জন্য যে third party লাইব্রেরী লাগবে তার লিস্ট করা থাকবে। pip freeze > requirements.txt কমান্ড দিয়ে requirements.txt ফাইলটি তৈরী করে নেই। ফাইলটি ওপেন করলে অনেকগুলো লাইব্রেরী এর নাম দেখা যাবে। Heroku এই লাইব্রেরীগুলো পরবর্তীতে ইনস্টল করে নিবে।

আমাদের প্রোজেক্টটি কিভাবে build ও run করতে হবে তার কিছু কমান্ড Heroku কে দিতে হবে। Procfile নামক ফাইলে আমরা এই কমান্ডগুলো দিতে পারি। Procfile এ নিচের কমান্ডগুলো লিখে ফেলি।

web: gunicorn hacksprint.wsgi --log-file -
release: python manage.py migrate --noinput

web ট্যাগের কমান্ডটির মাধ্যমে আমারা gunicorn সার্ভারকে আমাদের এ্যাপের wsgi ফাইল টি প্যারামিটার হিসেবে পাঠিয়ে দিচ্ছি যাতে করে gunicorn সার্ভারটি আমাদের এ্যাপটি রান করতে পারে।

আমাদের এ্যাপটি যখন build successful হবে তখন release ট্যাগের কমান্ডটি রান হবে। এখানে আমরা ডাটাবেজ মাইগ্রেট এর কাজটি করছি।

Heroku নিজে নিজেও কিছু কমান্ড রান করে যেমন python manage.py collectstatic. কিন্ত আমাদের এ্যাপে যদি STATIC_ROOT সেট করা না থাকে তাহলে collectstatic কমান্ডটি ফেইল করবে কারন django জানে না কোথায় স্ট্যাটিক ফাইলগুলো রাখতে হবে। তাই এ্যাপটির settings.py ফাইলে অবশ্যই STATIC_ROOT এর ভ্যালু ইনিশিয়ালাইজ করে দিতে হবে।
STATIC_ROOT = os.path.join(BASE_DIR, 'allstaticfile')

গিটহাবে রিপো আপলোড

প্রথমত GitHub এ একটি রিপোজিটরি তৈরী করতে হবে। Create a Repository এই লিংকে গিয়ে একটি রিপোজিটরি তৈরী করে নিন। আপনার যদি Git ইনস্টল করা থাকে থাকে তাহলে প্রোজেক্ট ডিরেক্টরিতে গিয়ে টার্মিনালে লিখুন
git init
git add .
git commit -m "initial commit"
git remote add origin [YOUR_REPOSITORY_LINK]
git push -u origin master

গিটহাবে গিয়ে আপনার রিপোজিটরিতে গিয়ে দেখুন আপনার প্রোজেক্টের সোর্সকোড গিটহাবে আপলোড হয়ে গিয়েছে।

Heroku এ্যাপের সাথে GitHub রিপো কানেক্ট করা

Heroku তে লগিন করার পর New > Create a new app থেকে একটি এ্যাপ তৈরী করতে হবে। এ্যাপের নাম এবং রিজিওন চাইবে যেটা আপনার ইচ্ছামতো দিতে পারবেন।

এ্যাপ তৈরী হয়ে গেলে Deploy অপশন থেকে Deployment Method হিসেবে GitHub সিলেক্ট করতে হবে। এবং GitHub এ আপলোড করা রিপো টি সার্চ করে কানেক্ট করে দিতে হবে।

অটোমেটিক ডিপ্লয়মেন্ট enable করা

Deployment Method এর নিচেই Automatic Deploys নামে অপশন পাওয়া যাবে। এখানে আমাদের Deployment branch সিলেক্ট করে enable automatic deploys বাটনে ক্লিক করলেই আমাদের এ্যাপ অটোমেটিক ডিপ্লয়মেন্টের জন্য তৈরী হয়ে যাবে। খেয়াল রাখতে হবে যখন GitHub এ নতুন পুশ আসবে কেবল তখনই এই অটোমেটিক ডিপ্লয়মেন্ট কাজ করবে। Enable করার পর যেহেতু নতুন কোনো পুশ আসে নি তাই আপাতত এ্যাপটি লাইভ দেখা যাবে না। উপরে Open App বাটনে ক্লিক করলে আপাতত অন্য একটি success পেজ দেখাবে।

গিটহাবে আপডেট পুশ করা

এবার এ্যাপে সিম্পল কোনো লাইন আপডেট করে গিটহাবে পুশ করে দিলেই কিছুক্ষণের মধ্যে আমরা এ্যাপটিতে আপডেট দেখতে পারবো।

এই কিছুক্ষণ সময়ে যে কাজগুলো হবেঃ
১. GitHub হিরোকু কে বলবে এই রিপোতে আপডেট এসেছে।
২. Heroku আপডেট সোর্স কোড পুল করবে।
৩. Heroku সোর্স কোডটি বিল্ড করবে।
৪. release ট্যাগে কোনো কমান্ড থাকলে Heroku সেটা রান করবে।
৫. এই সমস্ত কিছু শেষ হয়ে গেলে ফাইনালি আমাদের এ্যাপটি ডিপ্লয় হবে।


0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *