কনফিগারেশন
ভূমিকা
লারাভেলের সব কনফিগারেশন ফাইল config ফোল্ডারে থাকে। প্রতিটি অপশনের বর্ণনা আছে। সময় নিয়ে ফাইলগুলো দেখলে কোন অপশন কী করে বুঝতে সহজ হবে।
এই ফাইলগুলো দিয়ে আপনি ডাটাবেস কানেকশন, মেইল সার্ভার, অ্যাপের URL, এনক্রিপশন কীসহ নানা মূল কনফিগারেশন ঠিক করেন।
about কমান্ড
আপনার অ্যাপের কনফিগারেশন, ড্রাইভার, এবং এনভায়রনমেন্টের সারাংশ দেখতে পারেন:
php artisan aboutশুধু কোনো নির্দিষ্ট অংশ দেখতে চাইলে --only দিন:
php artisan about --only=environmentকোনো নির্দিষ্ট কনফিগ ফাইলের ভ্যালু বিস্তারিত দেখতে:
php artisan config:show databaseএনভায়রনমেন্ট কনফিগারেশন
লোকাল আর প্রোডাকশনে কনফিগারেশন আলাদা হওয়াই ভাল (যেমন: ক্যাশ ড্রাইভার)। লারাভেল এ জন্য DotEnv লাইব্রেরি ব্যবহার করে।
নতুন প্রজেক্টে রুটে .env.example থাকে। ইন্সটলের সময় এটি .env হয়।
config ফাইলগুলো env() ফাংশন দিয়ে .env থেকে ভ্যালু নেয়। টিমে কাজ করলে .env.example এ প্লেসহোল্ডার ভ্যালু আপডেট করে রাখুন—আবশ্যক ভ্যারিয়েবলগুলো সবাই বুঝবে।
.env এর যেকোনো ভ্যারিয়েবল সার্ভার বা সিস্টেমের বাইরের এনভায়রনমেন্ট ভ্যারিয়েবল দিয়ে ওভাররাইড করা যায়।
Environment ফাইলের নিরাপত্তা
.env কখনো সোর্স কন্ট্রোলে কমিট করবেন না। ভিন্ন ডেভেলপার/সার্ভারে ভিন্ন সেট লাগবে এবং ক্রেডেনশিয়াল ফাঁসের ঝুঁকি থাকবে।
তবে লারাভেলের এনভায়রনমেন্ট এনক্রিপশন দিয়ে .env এনক্রিপ্ট করে নিরাপদে সোর্স কন্ট্রোলে রাখতে পারেন।
অতিরিক্ত Environment ফাইল
লোড করার আগে লারাভেল চেক করে APP_ENV বা CLI --env আছে কি না। থাকলে .env.[APP_ENV] (যেমন .env.staging) লোড হবে, না থাকলে ডিফল্ট .env লোড হবে।
Environment ভ্যারিয়েবল টাইপস
.env সাধারণত স্ট্রিং হিসেবে পড়ে। কিছু বিশেষ ভ্যালু টাইপে কনভার্ট হয়:
trueবা(true)→ boolean truefalseবা(false)→ boolean falseemptyবা(empty)→ ফাঁকা স্ট্রিং ''nullবা(null)→ null
স্পেস থাকলে ডাবল কোটস দিন:
APP_NAME="My Application"Environment ভ্যালু নেওয়া
সব .env ভ্যারিয়েবল রিকোয়েস্ট এলে $_ENV তে লোড হয়। কনফিগ ফাইলে এভাবে নিন:
'debug' => (bool) env('APP_DEBUG', false),দ্বিতীয় প্যারামিটার হলো ডিফল্ট ভ্যালু—কী না থাকলে সেটাই ফেরত দেয়।
বর্তমান Environment জানা
APP_ENV থেকে এনভায়রনমেন্ট ঠিক হয়। App ফ্যাসাড দিয়ে পড়ুন:
use Illuminate\Support\Facades\App;
$environment = App::environment();
if (App::environment('local')) {
// লোকাল এনভায়রনমেন্ট
}
if (App::environment(['local', 'staging'])) {
// লোকাল বা স্টেজিং
}সার্ভার-লেভেলের APP_ENV দিয়ে এই ডিটেকশন ওভাররাইড করা যায়।
Environment ফাইল এনক্রিপশন
এনক্রিপ্ট করা
php artisan env:encryptএটি .env এনক্রিপ্ট করে .env.encrypted তৈরি করবে। আউটপুটে দেখানো ডিক্রিপ্ট কী নিরাপদে সংরক্ষণ করুন।
নিজস্ব কী দিতে চাইলে:
php artisan env:encrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aFকী এর দৈর্ঘ্য ব্যবহৃত সাইফারের সাথে মিলতে হবে। ডিফল্ট AES-256-CBC (৩২ অক্ষর)। চাইলে --cipher দিয়ে অন্য সাইফার দিন।
একাধিক env থাকলে কোনটি এনক্রিপ্ট হবে ঠিক করুন:
php artisan env:encrypt --env=stagingডিক্রিপ্ট করা
php artisan env:decryptলারাভেল LARAVEL_ENV_ENCRYPTION_KEY থেকে কী নেবে, অথবা সরাসরি দিন:
php artisan env:decrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aFকাস্টম সাইফার:
php artisan env:decrypt --key=qUWuNRdfuImXcKxZ --cipher=AES-128-CBCনির্দিষ্ট env ফাইল:
php artisan env:decrypt --env=stagingবিদ্যমান .env ওভাররাইট করতে:
php artisan env:decrypt --forceকনফিগারেশন ভ্যালু অ্যাক্সেস
যেকোনো জায়গা থেকে Config ফ্যাসাড বা config() দিয়ে নিন। "ডট" সিনট্যাক্স ব্যবহার করুন।
use Illuminate\Support\Facades\Config;
$value = Config::get('app.timezone');
$value = config('app.timezone');
// না থাকলে ডিফল্ট দিন
$value = config('app.timezone', 'Asia/Seoul');রানটাইমে সেট করা:
Config::set('app.timezone', 'America/Chicago');
config(['app.timezone' => 'America/Chicago']);টাইপড গেটার (টাইপ না মিললে এক্সসেপশন):
Config::string('config-key');
Config::integer('config-key');
Config::float('config-key');
Config::boolean('config-key');
Config::array('config-key');
Config::collection('config-key');কনফিগারেশন ক্যাশিং
পারফরম্যান্স বাড়াতে সব কনফিগ এক ফাইলে ক্যাশ করুন:
php artisan config:cacheসাধারণত প্রোডাকশন ডিপ্লয়মেন্টে চালান। লোকালে বারবার কনফিগ বদলাতে হয়, তাই না চালানোই ভাল।
কনফিগ ক্যাশ হলে .env রিকোয়েস্টে লোড হয় না। তখন env() শুধু বাইরের সিস্টেম-লেভেল ভ্যারিয়েবল ফেরত দেয়। তাই env() কেবল config ফাইলেই ব্যবহার করুন—অ্যাপের অন্যত্র config() দিয়ে ভ্যালু নিন।
ক্যাশ ক্লিয়ার:
php artisan config:clearকনফিগারেশন পাবলিশিং
বেশিরভাগ কনফিগ ফাইল আগেই config এ থাকে। কিছু (যেমন cors.php, view.php) ডিফল্টে থাকে না। দরকারে পাবলিশ করুন:
php artisan config:publish
php artisan config:publish --allডিবাগ মোড
config/app.php এর debug অপশন ইউজারকে কত তথ্য দেখাবে তা নিয়ন্ত্রণ করে। এটি .env এর APP_DEBUG মান মানে।
- লোকালে
APP_DEBUG=true - প্রোডাকশনে সবসময়
false—না হলে সংবেদনশীল তথ্য ফাঁস হতে পারে।
মেইনটেন্যান্স মোড
অ্যাপ আপডেট/রক্ষণাবেক্ষণে থাকলে সব রিকোয়েস্টে কাস্টম ভিউ দেখায়। ডিফল্ট মিডলওয়্যার স্ট্যাকে চেক আছে; সক্রিয় থাকলে 503 থ্রো হয়।
সক্রিয় করা:
php artisan downঅটো রিফ্রেশ হেডার পাঠাতে:
php artisan down --refresh=15Retry-After সেট করতে (ব্রাউজার সাধারণত ইগনোর করে):
php artisan down --retry=60বাইপাস করা (সিক্রেট টোকেন)
php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"তারপর এই URL-এ গেলে বাইপাস কুকি সেট হবে এবং স্বাভাবিকভাবে ব্রাউজ করতে পারবেন:
https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515লারাভেলকে নিজে সিক্রেট বানাতে বললে:
php artisan down --with-secretহিডেন রুটে গেলে / এ রিডাইরেক্ট হবে এবং কুকি সেট হবে। সিক্রেট সাধারণত অ্যালফানিউমেরিক ও ড্যাশ হলে ভাল। ? বা & এড়িয়ে চলুন।
একাধিক সার্ভারে মেইনটেন্যান্স
ডিফল্টে ফাইল-ভিত্তিক, তাই প্রতিটি সার্ভারে php artisan down চালাতে হয়। বিকল্পভাবে ক্যাশ-ভিত্তিক ড্রাইভার নিন—এক সার্ভার থেকেই যথেষ্ট। .env এ সেট করুন, সব সার্ভার থেকে অ্যাক্সেসযোগ্য স্টোর বাছুন:
APP_MAINTENANCE_DRIVER=cache
APP_MAINTENANCE_STORE=databaseপ্রি-রেন্ডার ভিউ
ডিপ্লয়মেন্টে ডিপেনডেন্সি আপডেটের সময়ে এরর এড়াতে রিকোয়েস্টের একদম শুরুতে ফেরানোর জন্য প্রি-রেন্ডার করা টেমপ্লেট দিন:
php artisan down --render="errors::503"রিডাইরেক্ট সব রিকোয়েস্ট
মেইনটেন্যান্সে সব রিকোয়েস্ট নির্দিষ্ট URL এ পাঠাতে:
php artisan down --redirect=/মেইনটেন্যান্স মোড বন্ধ করা
php artisan upডিফল্ট টেমপ্লেট কাস্টমাইজ করতে:
resources/views/errors/503.blade.phpকিউস
মেইনটেন্যান্স মোডে কোনো queued job রান হবে না। মোড বন্ধ হলে আবার স্বাভাবিকভাবে চলবে।
বিকল্প
জিরো-ডাউনটাইম ডিপ্লয়ের জন্য ম্যানেজড প্ল্যাটফর্ম যেমন Laravel Cloud বিবেচনা করুন।