Database পাসওয়ার্ড, API key, আর অনুরূপ credential একটি live সাইট কাজ করার জন্য কোথাও থাকতে হবে — এই পাঠ কভার করে এগুলো আসলে কোথায় যায়, আর ভুল উত্তর কেন একটি গুরুতর, সাধারণ ভুল।
কোড সাধারণত একটি Git repository-তে সংরক্ষিত হয়, আর যদি সেই repository কখনো একটি পাবলিক host-এ push করা হয়, পরে পাবলিক করা হয়, বা শুধু প্রবেশাধিকার আছে এমন যে কারো দ্বারা পড়া হয়, তবে সরাসরি এতে লেখা যেকোনো credential প্রকাশিত হয়ে যায় — স্থায়ীভাবে, কারণ পুরোনো commit Git-এর ইতিহাসে থেকে যায় লাইনটি পরে মুছে ফেলা হলেও। এটি সত্যিই একটি সাধারণ বাস্তব-জগতের ভুল, একটি কাল্পনিক ভুল নয়।
একটি environment variable হলো একটি নামযুক্ত মান একটি চলমান প্রোগ্রামকে তার আশেপাশের পরিবেশ দ্বারা সরবরাহ করা (operating system বা হোস্টিং প্ল্যাটফর্ম) কোডে নিজেই লেখার বদলে। কোড DATABASE_PASSWORD-এর মতো একটি নাম পড়ে আর পরিবেশে যা মান আছে তা গ্রহণ করে — আসল মানটি সম্পূর্ণভাবে codebase-এর বাইরে থাকে।
# কোডে কখনো আসল পাসওয়ার্ড থাকে না —
# শুধু একটি variable-এর নাম যা এটি খুঁজে পাবে বলে আশা করে:
DATABASE_URL=$DATABASE_URL
API_KEY=$STRIPE_SECRET_KEY| সেটআপ | Secret কোথায় থাকে |
|---|---|
| Cloud আর managed প্ল্যাটফর্ম | প্রকল্প dashboard-এ একটি নিবেদিত "Environment Variables" বিভাগ, প্রতি-পরিবেশ সেট করা (production, staging, preview) |
| একটি প্রথাগত সার্ভার (VPS, shared হোস্টিং) | সার্ভারে নিজেই একটি স্থানীয় .env ফাইল, বা control panel-এর নিজস্ব environment-variable সেটিং, Git repository-র বাইরে রাখা |
| স্থানীয় development | আপনার নিজের মেশিনে একটি .env ফাইল, test বা placeholder মান ধারণ করে, কখনো commit করা হয় না |
আসল secret ধরে রাখা একটি .env ফাইল অবশ্যই .gitignore-এ তালিকাভুক্ত হতে হবে যাতে Git প্রথম স্থানে কখনো এটি track না করে — উপরের প্ল্যাটফর্ম-স্তরের environment variable-গুলো যা আসলে live সার্ভারে পৌঁছায়; স্থানীয় .env ফাইলটি শুধু আপনার নিজের মেশিনের জন্য আর কোডের সাথে কখনো push করা উচিত নয়।
একটি ফাঁস হওয়া secret অবশ্যই rotate করতে হবে, শুধু সরানো নয়
যদি একটি আসল credential কখনো দুর্ঘটনাক্রমে Git-এ commit করা হয়, পরে কোড পরিবর্তন করা যথেষ্ট নয় — credential নিজেই ঘোরাতে (rotate) হবে (উৎসে পরিবর্তিত, যেমন একটি API key পুনরায় তৈরি করা), কারণ পুরোনো মান পরের সম্পাদনা নির্বিশেষে repository-র ইতিহাসে স্থায়ীভাবে দৃশ্যমান থাকে।