হ্যালো হাসিব! তুমি এখন Section 13: Environments-এর একদম শেষ লেকচার “Process Level Environment” (Lecture 147)-এ আছো।
এতক্ষণ আমরা লোকাল মেশিনে launchSettings.json ফাইলে Environment সেট করা দেখেছি। কিন্তু যখন তুমি অ্যাপ্লিকেশনটি কোনো লাইভ সার্ভার (Staging বা Production)-এ আপলোড করবে, তখন അവിടെ (সেখানে) কোনো ভিজ্যুয়াল স্টুডিও থাকবে না এবং সিকিউরিটির কারণে launchSettings.json ফাইলটিও ডেপ্লয় (Deploy) করা হয় না।
তাহলে সেই সার্ভারগুলোতে তুমি কীভাবে Environment সেট করবে?
আজকের লেকচারে আমরা শিখবো কীভাবে কমান্ড প্রম্পট (Command Prompt) বা পাওয়ারশেল (PowerShell) ব্যবহার করে সরাসরি সার্ভারে Process-level-এ Environment সেট করতে হয়।
চলো, লেকচারটি বিস্তারিতভাবে ডিকোড করি।
সারসংক্ষেপ (Quick Revision List)
- The Problem:
launchSettings.jsonফাইলটি শুধুমাত্র ডেভেলপমেন্ট মেশিনের জন্য। সার্ভারে (Staging/Production) এটি ডেপ্লয় করা হয় না। - The Default Behavior: যদি
launchSettings.jsonনা থাকে, তবে ASP.NET Core ডিফল্টভাবে Environment-কে Production হিসেবে ধরে নেয়। - The Solution: সার্ভারে অ্যাপ রান করার আগে Command Prompt বা PowerShell থেকে Environment Variable সেট করে দিতে হয়।
- PowerShell Command:
$Env:ASPNETCORE_ENVIRONMENT = "Staging" - Command Prompt (CMD) Command:
set ASPNETCORE_ENVIRONMENT=Staging - Run App without Profile:
dotnet run --no-launch-profileকমান্ড দিলে অ্যাপটিlaunchSettings.jsonইগনোর করে ডিফল্ট পোর্ট5000-এ রান করে।
Comprehensive Breakdown
১. launchSettings.json ছাড়া অ্যাপ রান করা [Priority: 10/10]
প্রথমে আমরা দেখবো সার্ভারে সাধারণত অ্যাপ কীভাবে রান করা হয়।
- টার্মিনাল বা PowerShell ওপেন করে তোমার প্রোজেক্ট ফোল্ডারে (যেখানে
.csprojফাইলটি আছে) যাও। - সাধারণত
dotnet runলিখলেই অ্যাপ রান হয়ে যায়। - কিন্তু যেহেতু তোমার লোকাল মেশিনে
launchSettings.jsonআছে, তাই সে ওখানকার সেটিং (যেমন পোর্ট5273) নিয়ে রান করবে। - আমরা যদি চাই অ্যাপটি
launchSettings.jsonসম্পূর্ণ ইগনোর করে রান করুক (যেন আমরা সার্ভারে আছি), তাহলে লিখতে হবে:
Command:
dotnet run --no-launch-profile
Result:
এই কমান্ড দিলে ASP.NET Core ডিফল্টভাবে Kestrel সার্ভার চালু করে এবং পোর্ট 5000-এ অ্যাপ রান করে। আর যেহেতু প্রোফাইল নেই, সে ধরে নেয় অ্যাপটি Production Environment-এ চলছে। (এটি সিকিউরিটির জন্য করা হয়েছে)।
২. PowerShell দিয়ে Environment সেট করা (The Main Task) [Priority: 10/10]
এখন ধরো, সার্ভারে তুমি অ্যাপটিকে “Staging” Environment-এ রান করতে চাও। অ্যাপ রান করার ঠিক আগে তোমাকে ঐ একই PowerShell উইন্ডোতে একটি কমান্ড দিয়ে Environment সেট করে দিতে হবে। একে Process-level Environment বলে, কারণ এটি শুধুমাত্র ঐ নির্দিষ্ট টার্মিনাল উইন্ডো বা প্রসেসের জন্যই কাজ করবে (অন্য কোনো ট্যাব বা উইন্ডোতে কাজ করবে না)।
PowerShell Command Implementation:
# ১. Environment Variable সেট করা (case-sensitive)
$Env:ASPNETCORE_ENVIRONMENT="Staging"
# ২. তারপর অ্যাপ রান করা
dotnet run --no-launch-profile
(নোট: লেকচারার শুরুতে ভুল করে ASP.NET_ENVIRONMENT লিখেছিলেন, পরে তা ঠিক করে ASPNETCORE_ENVIRONMENT করেন। ভ্যারিয়েবলের নামটি একদম হুবহু হতে হবে)।
এখন তুমি যদি ব্রাউজারে http://localhost:5000 এ যাও, দেখবে Environment “Staging” দেখাচ্ছে!
৩. Command Prompt (CMD) দিয়ে Environment সেট করা [Priority: 8/10]
তুমি যদি উইন্ডোজের সাধারণ Command Prompt (CMD) ব্যবহার করো (PowerShell নয়), তবে কমান্ডটি একটু আলাদা হবে। সেখানে কোনো কোটেশন (Quotes) বা ডলার সাইন ($) লাগে না।
CMD Command Implementation:
# ১. Environment Variable সেট করা
set ASPNETCORE_ENVIRONMENT=Staging
# ২. অ্যাপ রান করা
dotnet run --no-launch-profile
VS / VS Code Shortcuts (For faster development)
- Open Terminal in Folder: ভিজ্যুয়াল স্টুডিও কোডে (VS Code) যেকোনো ফোল্ডারের ওপর রাইট ক্লিক করে “Open in Integrated Terminal” সিলেক্ট করলে সরাসরি ঐ পাথে টার্মিনাল ওপেন হয়ে যায়। শর্টকাট: `Ctrl + “।
- Stop Execution: টার্মিনালে রান করা যেকোনো প্রসেস (যেমন:
dotnet run) স্টপ করার জন্য কীবোর্ডেCtrl + Cচাপতে হয়।
Best Practices & .NET 10 Context
Best Practices for Server Environments:
- Do not rely entirely on Process-level: Process-level (PowerShell কমান্ড) Environment সেট করাটা সাময়িক টেস্টিংয়ের জন্য ভালো। কিন্তু লাইভ সার্ভারে অ্যাপ রিস্টার্ট হলে এটি মুছে যায়। তাই প্রফেশনাল প্রোজেক্টে (যেমন: Linux, Docker বা IIS সার্ভারে) সিস্টেমের গ্লোবাল Environment Variable বা সার্ভার কনফিগারেশন ফাইলে (যেমন:
web.configবা Dockerfile-এরENVকমান্ড) এটি সেট করা হয়। - Use specific profiles for servers: যদি তুমি
launchSettings.jsonসার্ভারে না দাও (যা দেওয়া উচিত নয়), তবে নিশ্চিত করো যে তোমার গ্লোবাল সার্ভারেASPNETCORE_ENVIRONMENTসেট করা আছে। নাহলে প্রোডাকশনে ডিবাগ করা কঠিন হয়ে যাবে।
.NET 10 Context:
ASP.NET Core 10-এ Environment ম্যানেজমেন্ট, CLI কমান্ড (dotnet run) এবং PowerShell-এর ব্যবহার .NET Core এর শুরু থেকেই ১০০% অপরিবর্তিত আছে। তুমি .NET 6, 8, বা 10—যেটাই ব্যবহার করো না কেন, এই কমান্ডগুলো হুবহু একইভাবে কাজ করবে।
হাসিব, আমাদের “Environments” সেকশনটি এখানেই সফলভাবে শেষ হলো! Environment-এর এই গ্লোবাল কনসেপ্টটি কি তুমি পুরোপুরি বুঝতে পেরেছো? তুমি রেডি থাকলে আমরা নেক্সট অত্যন্ত গুরুত্বপূর্ণ সেকশন “Configuration” শুরু করতে পারি, যেখানে আমরা শিখবো appsettings.json থেকে কীভাবে সিক্রেট ডাটা (যেমন ডাটাবেস পাসওয়ার্ড বা API Key) রিড করতে হয়!