হ্যালো হাসিব! চলো আজকের লেকচারটি নিয়ে বিস্তারিত আলোচনা করি। আজকের মূল বিষয় হলো ASP.NET Core অ্যাপ্লিকেশনের কনফিগারেশন, বিশেষ করে launchSettings.json ফাইলটির কাজ এবং Kestrel বনাম IIS Express এর ব্যবহার।

📌 Quick Summary for Easy Revision

ভবিষ্যতে দ্রুত রিভিশন দেওয়ার জন্য পুরো লেকচারের মূল পয়েন্টগুলো নিচে লিস্ট করে দেওয়া হলো:

  • Kestrel vs IIS Express: ASP.NET Core এর ডিফল্ট Server হলো Kestrel। তবে চাইলে Reverse Proxy Server হিসেবে IIS Express ব্যবহার করা যায়।
  • launchSettings.json: এই ফাইলটি Properties ফোল্ডারে থাকে। এটি JSON ফরম্যাটে লেখা এবং এতে অ্যাপ্লিকেশন রান করার বিভিন্ন Profile এর কনফিগারেশন থাকে।
  • Profiles: Profile হলো কিছু সেটিংসের সমষ্টি যা ঠিক করে দেয় অ্যাপ্লিকেশনটি কীভাবে এবং কোন Server ব্যবহার করে স্টার্ট হবে। Toolbar থেকে Profile সিলেক্ট করে রান করা যায়।
  • commandName: এই প্রপার্টির ভ্যালু “Project” হলে Kestrel ব্যবহার হয়, আর “IISExpress” হলে IIS Express ব্যবহার হয়।
  • Ports & URL: applicationUrl এর মাধ্যমে HTTP/HTTPS প্রোটোকল এবং Port Number (1024 থেকে 65535 এর মধ্যে যেকোনো নাম্বার) সেট করা যায়।
  • Environment Variables: launchSettings.json এর মাধ্যমে গ্লোবাল ভেরিয়েবল (যেমন- Development, Production, Staging বা API Keys) সেট করা যায় যা পুরো অ্যাপ্লিকেশনে ব্যবহার করা যায়।

📖 Comprehensive Breakdown

নিচে লেকচারের প্রতিটি কনসেপ্ট বিস্তারিত এবং স্টেপ-বাই-স্টেপ ব্যাখ্যা করা হলো।

1. Introduction to launchSettings.json [Priority: 10/10]

এটি কী: যখন তুমি কোনো ASP.NET Core প্রোজেক্ট তৈরি করো, তখন Properties ফোল্ডারের ভেতরে launchSettings.json নামের একটি ফাইল তৈরি হয়। এটি মূলত একটি JSON (Key-Value pair) কনফিগারেশন ফাইল। কেন প্রয়োজন (The Why): অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় তুমি কোন Server দিয়ে (Kestrel নাকি IIS), কোন Port-এ এবং কোন Environment-এ অ্যাপ্লিকেশন রান করতে চাও, তা এই ফাইলে বলে দিতে হয়। Visual Studio vs VS Code টিপস: লেকচারার বলেছেন Visual Studio এর “Solution Explorer” থেকে ফাইলটি ওপেন করতে। তুমি যেহেতু Linux (Fedora) ব্যবহার করো এবং সম্ভবত VS Code বা Rider ব্যবহার করো, তুমি তোমার প্রোজেক্ট ডিরেক্টরির Properties ফোল্ডারেই ফাইলটি পেয়ে যাবে।

2. Profiles and Server Selection [Priority: 9/10]

এটি কী: launchSettings.json ফাইলে profiles নামের একটি অবজেক্ট থাকে। বাই ডিফল্ট এখানে দুটি প্রোফাইল থাকে: একটি প্রোজেক্টের নামে (যা Kestrel নির্দেশ করে) এবং অন্যটি IIS Express। তুমি চাইলে প্রোফাইলের নাম পরিবর্তন করতে পারো (যেমন- “my first app” থেকে পরিবর্তন করে “Kestrel” বা “myProject.Kestrel” রাখা)। কেন প্রয়োজন (The Why): প্রোফাইলগুলোর মাধ্যমে আমরা এক ক্লিকে বা এক কমান্ডে ভিন্ন ভিন্ন এনভায়রনমেন্টে অ্যাপ রান করতে পারি।

3. Deep Dive into Profile Settings (Kestrel Configuration) [Priority: 10/10]

ধরে নিই তোমার Kestrel প্রোফাইলটি দেখতে নিচের মতো:

"Kestrel": {
  "commandName": "Project",
  "dotnetRunMessages": true,
  "launchBrowser": true,
  "applicationUrl": "http://localhost:5166",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }
}
 

প্রতিটি Key এর ব্যাখ্যা:

  • commandName: এর ভ্যালু “Project” হওয়ার মানে হলো অ্যাপ্লিকেশনটি ডিফল্ট Server হিসেবে Kestrel ব্যবহার করে রান হবে। এর ভ্যালু “IISExpress” হলে সেটি IIS Server ব্যবহার করতো।
  • dotnetRunMessages: এটি true থাকলে .NET CLI এর বিভিন্ন ইনফরমেশন বা কমান্ড রিলেটেড আপডেট Kestrel Terminal উইন্ডোতে শো করে।
  • launchBrowser: এটি true থাকলে অ্যাপ্লিকেশন রান করার সাথে সাথে তোমার মেশিনের ডিফল্ট Browser (যেমন Chrome বা Edge) স্বয়ংক্রিয়ভাবে ওপেন হয়ে যাবে।
  • applicationUrl: এখানে প্রোটোকল (HTTP/HTTPS), লোকাল মেশিনের নাম (localhost) এবং একটি Port Number দেওয়া থাকে।
  • Port Numbers: পোর্ট নাম্বার হলো তোমার অ্যাপ্লিকেশনের একটি আইডেন্টিফিকেশন নাম্বার। Visual Studio অটোমেটিক একটি পোর্ট বসিয়ে দেয়। তবে তুমি চাইলে এটি পরিবর্তন করে 1024 থেকে 65535 এর মধ্যে যেকোনো পোর্ট দিতে পারো (কারণ 1024 এর নিচের পোর্টগুলো Operating System এর জন্য রিজার্ভ করা থাকে)।

4. Environment Variables [Priority: 8/10]

এটি কী: এগুলো হলো গ্লোবাল ভ্যালু বা আর্টিফ্যাক্টস। যেমন: ASPNETCORE_ENVIRONMENT। তুমি এখানে ডেভেলপমেন্ট (Development), প্রোডাকশন (Production) বা স্টেজিং (Staging) সেট করতে পারো। এছাড়াও বিভিন্ন API Keys বা Server Names এখানে রাখা যায়। কেন প্রয়োজন (The Why): অ্যাপ্লিকেশন যেন বুঝতে পারে সে বর্তমানে কোন এনভায়রনমেন্টে চলছে এবং সেই অনুযায়ী ডেটাবেস কানেকশন বা এরর লগিং এর মতো কাজগুলো আলাদাভাবে ম্যানেজ করতে পারে।

5. IIS Express Configuration [Priority: 5/10]

এটি কী: IIS Express হলো মূল IIS (Internet Information Services) এর একটি লাইটওয়েট ভার্সন। কেন প্রয়োজন (The Why): এটি Kestrel এর সামনে একটি Reverse Proxy হিসেবে কাজ করে। এটি Windows Authentication, Port Sharing, HTTP access logs এর মতো কিছু অ্যাডভান্সড ফিচার সাপোর্ট করে। Linux Perspective (হাসিবের জন্য): যেহেতু তুমি Fedora Linux ব্যবহার করছো, IIS Express তোমার মেশিনে চলবে না (এটি শুধুমাত্র Windows-এ চলে)। তবে চিন্তার কিছু নেই! লেকচারার নিজেই বলেছেন, প্রোডাকশন এবং রিয়েল-ওয়ার্ল্ড সিনেরিওতে সবাই Linux সার্ভার (Nginx বা Apache) ব্যবহার করে। তাই কোর্সটি পুরোপুরি Kestrel দিয়েই কন্টিনিউ করা হবে।

VS Code এ Profile রান করার কমান্ড: Visual Studio তে Toolbar এর ড্রপডাউন থেকে Profile সিলেক্ট করে রান করা যায়। তবে VS Code-এ Terminal থেকে নির্দিষ্ট প্রোফাইল রান করতে চাইলে এই কমান্ডটি ব্যবহার করবে:

dotnet run --launch-profile "Kestrel"
 

🚀 Best Practices & .NET 10 Perspective

বর্তমানে আমরা .NET এর লেটেস্ট ভার্সনগুলো (.NET 8, 9, বা 10) নিয়ে কাজ করছি। launchSettings.json এর মূল কনসেপ্ট একই থাকলেও কিছু বেস্ট প্র্যাকটিস ফলো করা উচিত:

  1. Multiple URLs Configure করা: এখনকার সময়ে অ্যাপ্লিকেশনে HTTP এবং HTTPS দুটোই কনফিগার করে রাখা ভালো। Example (launchSettings.json):
"applicationUrl": "https://localhost:7123;http://localhost:5123",
 
  1. Clean Environment Variables: সিক্রেট API key বা পাসওয়ার্ড কখনোই launchSettings.json এ রাখবে না (কারণ এটি গিটহাবে পুশ হয়ে যেতে পারে)। ডেভেলপমেন্টের সময় সেনসিটিভ ডেটার জন্য সবসময় .NET এর User Secrets (Secret Manager tool) ব্যবহার করবে।
  2. HTTP/3 Support (Modern .NET Feature): .NET 10 এবং আধুনিক ভার্সনগুলোতে Kestrel বাই ডিফল্ট HTTP/3 সাপোর্ট করে। এটি অনেক ফাস্ট এবং সিকিউর। প্রোডাকশন গ্রেড অ্যাপে (যেমন তোমার Chatrabash SaaS প্রোজেক্টে) Nginx/YARP এর পেছনে Kestrel কে HTTP/3 এর জন্য অপ্টিমাইজ করাটা দারুণ একটি আর্কিটেকচারাল ডিসিশন হতে পারে।

আশা করি এই লেকচারের বিষয়গুলো এখন তোমার কাছে একদম পরিষ্কার! Backend development নিয়ে তোমার জার্নির জন্য শুভকামনা।