شبکه ایمن

تنظیم و پیکربندی فریم ورک لاراول – آموزش لاراول

تنظیم و پیکربندی فریم ورک لاراول

تمام فایل های مربوط به تنظیمات و پیکربندی لاراول در داخل پوشه config قرار دارد. بخش های مختلف موجود این پوشه به صورت مناسب کامنت گذاری شده اند و می توانید با مطالعه آن ها متوجه بشید که هر کدام برای چه کاری است. با استفاده از این فایل ها می توانید مواردی مثل اطلاعات اتصال به دیتابیس، اطلاعات سرور ایمیل، منقطه زمانی، زبان پیشفرض و غیره را پیکربندی کنید.

پیکربندی محیط

در اکثر پروژه ها لازم است تا تنظیمات و پیکربندی متفاوتی بر اساس محیط اجرایی داشته باشیم. به عنوان مثال ممکن است بخواهید از یک درایور کش (cache) متفاوت به صورت محلی نسبت به سرور اصلی (Production) خود استفاده کنید.

برای دستیابی به این هدف لاراول از کتابخانه DotEnv زبان PHP استفاده می کند. هنگامی که یک پروژه لاراول جدید ایجاد می کنید، در داخل پوشه ریشه یک فایل با نام .env.example نیز ایجاد می شود که شامل تنظیمات رایج محیطی برای یک پروژه است. محتوای این فایل در طول نصب و آماده‌سازی پروژه لاراول به داخل فایل .env کپی می شود. مقادیری که در این فایل ذخیره می شوند را بعدا می توانید توسط تابع env لاراول بازیابی کرده و استفاده کنید.

اگر به صورت تیمی بر روی یک پروژه کار میکنید و یا میخواهید آن را به صورت متن باز و عمومی منتشر کنید بهتر است یک فایل .env.example داشته باشد تا اگر فرد دیگری بخواهد بر روی آن کار کند، بفهمد که چه تنظیمات و پیکربندی برای اجرا شدن پروژه لازم است. محتوای فایل .env.example نباید شامل مقادیر واقعی باشد.

توجه! متغیرهای تعریف شده در داخل فایل .env می توانند توسط متغیرهای خارجی override شوند. برای مثلا اگر متغیر X در داخل فایل .env تعریف شود و همچنین متغیری با همین نام در سطح سرور یا سیستم به عنوان متغیر محیطی تنظیم شده باشد، از مقدار اختصاص داده شده در سطح سرور یا سیستم استفاده می شود.

امنیت فایل .env

همانطور که در بخش قبلی گفته شده فایل .env نباید به داخل git یا هر source control دیگری کامیت شود زیرا توسعه دهنده های دیگر ممکن است تنظیمات محیلی متفاوتی داشته باشند و مهم تر از آن ممکن است فایل .env شامل اطلاعات حساسی مثل آدرس سرور اصلی، رمز عبور، کلیدهای رمزنگاری و موارد مهم دیگر باشد و با کامیت شدن به داخل git، هر کسی که به ریپازیتوری دسترسی داشته باشد می توانید این اطلاعات را مشاهده کند.

فایل های محیطی اضافی

قبل از بارگذاری شدن فایل .env پیشفرض لاراول بررسی می کند که آیا متغیر محیطی APP_ENV به صورت محیطی تنظیم شده است یا آرگومان –env به خط فرمان ارسال شده است یا خیر. این موارد برای شناسایی محیط جاری که پروژه بر روی آن اجرا می شود، بررسی می شوند و اگر تنظیم شده باشند، لاراول تلاش می کند تا فایل .env.[APP_ENV] را بارگذاری کند و اگر آن فایل وجود نداشته باشد، فایل پیشفرض بارگذاری می شود. برای مثال اگر مقدار local برای متغیر APP_ENV تنظیم شده باشد، لاراول تلاش می کند تا فایل .env.local را بارگذاری کند.

انواع متغیرهای محیطی

تمام متغیرهای تعریف شده در فایل .env معمولا به صورت رشته پارس می شوند. بنابراین تعداد مقادیر رزرو شده وجود دارد تا بتوانیم نوع داده ای به جز رشته هم داشته باشیم. در جدول زیر مقداری که در فایل .env تنظیم شده و همچنین نحوه پارس شدن آن مقدار توسط تابع env را مشاهده می کنید.

.env Value env() Value
true (bool) true
(true) (bool) true
false (bool) false
(false) (bool) false
empty (string) ”
(empty) (string) ”
null (null) null
(null) (null) null

اگر می خواهید متغیر محیطی تعریف کنید که مقدارش شامل فضای خالی است، می توانید مانند نمونه زیر مقدار آن را در بین دابل کوتیشن قرار دهید:

APP_NAME="My Application"

1 APP_NAME="My Application"

بازیابی تنظیمات محیطی

زمانی که برنامه شما یک درخواست دریافت می کند، تمام متغیرهای تعریف شده در داخل فایل .env به داخل متغیر سراسری $_ENV بارگذاری می شوند. در نتیجه می توانید با استفاده از $_ENV یا تابع سراسری env مربوط به لاراول مقادیر مورد نظر را بگیرید. اگر به داخل فایل های پیکربندی لاراول نگاه کنید متوجه می شوید که اکثرا از تابع env استفاده شده است. برای نمونه:

'debug' => env('APP_DEBUG', false),

1 'debug' => env('APP_DEBUG', false),

در نمونه کد بالا مقدار دوم ارسال شده به تابع env به عنوان مقدار پیشفرض ارسال شده است. زمانی که متغیری با کلید مشخص شده وجود نداشته باشد، مقدار پیشفرض برگشت داده می شود. در این نمونه اگر متغیر APP_DEBUG تعریف نشده باشد، مقدار false بازگشت داده می شود.

تشخیص محیط اجرایی جاری

برای تشخیص محیط اجرایی جاری می توانید از متغیر APP_ENV که در داخل .env تعریف شده استفاده کنید. یکی از راه های دسترسی به مقدار این متغیر استفاده از متد environment مربوط به کلاس App است:

use IlluminateSupportFacadesApp; $environment = App::environment();

123 use IlluminateSupportFacadesApp; $environment = App::environment();

همچنین با ارسال اسم محیط به عنوان پارامتر به این متد می توانید تشخیص دهید که آیا در آن محیط قرار دارید یا خیر. برای نمونه:

if (App::environment('local')) { // The environment is local } if (App::environment(['local', 'staging'])) { // The environment is either local OR staging… }

123456 if (App::environment('local')) { // The environment is local}if (App::environment(['local', 'staging'])) { // The environment is either local OR staging…}

توجه! تعیین محیط اجرایی جاری می تواند با تعریف شدن متغیر APP_ENV در سطح سرور یا سیستم override شود.

دسترسی تنظیمات

با استفاده از تابع کمکی config به راحتی و در کل برنامه می توانید به تنظیمات مورد نظر دسترسی داشته باشید. برای دسترسی به تنظیمات موجود در یک فایل خاص می توانید از نقطه استفاده کنید. یعنی نام فایل + نقطه + تنظیمات مورد نظر. همچنین می توانید یک مقدار پیشفرض نیز برای زمانی که مقداری پیدا نشد، تنظیم کنید:

$value = config('app.timezone'); // Retrieve a default value if the configuration value does not exist… $value = config('app.timezone', 'Asia/Seoul');

1234 $value = config('app.timezone'); // Retrieve a default value if the configuration value does not exist…$value = config('app.timezone', 'Asia/Seoul');

با استفاده از تابع config می توانید مقادیر مورد نظر را تنظیم کنید. برای اینکار باید مانند نمونه زیر یک آرایه را که شامل کلید و مقدار است را به تابع ارسال کنید:

config(['app.timezone' => 'America/Chicago']);

1 config(['app.timezone' => 'America/Chicago']);

کش کردن تنظیمات

به منظور افزایش سرعت برنامه باید تمام تنظیمات و پیکربندی های مربوط به برنامه را با استفاده از دستور config:cache در داخل یک فایل کش کنید. این دستور تمام تنظیمات را در داخل یک فایل ترکیب می کند. بنابراین برنامه به جای بارگذاری چندین فایل فقط یک فایل را بارگذاری می کند و در نتیجه سرعت برنامه افزایش می یابد. نباید این دستور را در محیط لوکال که تنظیمات تغییرات زیادی می کنند، اجرا کنید.

بهترین زمان برای اجرای این دستور در هنگام انتشار و دیپلوی کردن برنامه است. بعد از اجرا کردن این دستور در محیط اصلی (Production) باید مطمئن شوید که از تابع env فقط در داخل فایل های پیکربندی استفاده می کنید. هنگامی که تنظیمات کش شوند، فایل .env بارگذاری نمی شود و تابع env مقادیر را از متغیرهای محیطی که در سطح سرور یا سیستم تعریف شده اند، بازیابی می کند.

حالت اشکال زدایی

گزینه debug موجود در فایل config/app.php تعیین می کند که چه مقدار اطلاعات درباره یک خطا به کاربر نمایش داده شود. به صورت پیشفرض مقدار این متغیر از مقدار متغیر محیطی APP_DEBUG که در داخل فایل .env تعریف شده است، پیروی می کند.

در هنگام توسعه برنامه در حالت لوکال (محیط Development) باید مقدار متغیر APP_DEBUG بر روی true تنظیم شود تا بتوانید در صورت بروز مشکل بدانید کجای کار ایراد دارد. اما در محیط اصلی (Production) مقدار متغیر APP_DEBUG همیشه باید false باشد. اگر مقدار آن در محیط اصلی true باشد، برنامه شما در خطر نمایش اطلاعات حساس پیکربندی به کاربران نهایی است.

حالت تعمیر

زمانی که حالت تعمیر (Maintenance Mode) برنامه را فعال کنید، یک صفحه (View) سفارشی برای همه درخواست های ارسالی به برنامه نمایش داده می شود. این موضوع باعث می شود تا کاربران بدانند که سایت در حال تعمیر یا به روزرسانی است. بررسی حالت تعمیر توسط middleware زیر که در داخل فایل kernel.php در آرایه middleware ها تنظیم شده است، انجام می شود:

AppHttpMiddlewarePreventRequestsDuringMaintenance::class

1 AppHttpMiddlewarePreventRequestsDuringMaintenance::class

اگر برنامه در حالت تعمیر باشد، یک نمونه از SymfonyComponentHttpKernelExceptionHttpException ایجاد و با کد وضعیت ۵۰۳ بازگشت داده می شود.

به منظور فعال سازی حالت تعمیر کافیت دستور زیر را اجرا کنید:

php artisan down

1 php artisan down

اگر می خواهید هدر Refresh را به پاسخ های برنامه در حالت تعمیر اضافه کنید می توانید از گزینه –refresh استفاده کنید. اضافه شدن این هدر HTTP به مرورگر می گوید که باید در هر مثلا ۱۵ ثانیه به طور خودکار صفحه را رفرش کند. برای نمونه:

php artisan down –refresh=15

1 php artisan down –refresh=15

همچنین ممکن است بخواهید هدر Retry-After را به پاسخ اضافه کنید (اگرچه اغلب توسط مرورگرها نادیده گرفته می شود). این گزینه باعث می شود تا مرورگر بعد از زمان مشخص شده دوباره درخواست خود را ارسال کند. برای نمونه:

php artisan down –retry=60

1 php artisan down –retry=60

عبور از حالت تعمیر

با استفاده از گزینه –secret می توانیم یک کلید خصوصی برای عبور از حالت تعمیر تعریف کنیم. برای نمونه:

php artisan down –secret="1630542a-246b-4b66-afa1-dd72a4c43515"

1 php artisan down –secret="1630542a-246b-4b66-afa1-dd72a4c43515"

بعد از اجرا شدن دستور فوق اگر آدرس زیر را در مرورگر خود باز کنید، لاراول یک کوکی مربوط به عبور از حالت تعمیر را در مرورگر شما ذخیره کرده و کاربر را به صفحه اول منتقل می کند.

https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

1 https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

توجه داشته باشید که ما از example.com به عنوان مثال استفاده کردیم. زمانی که کوکی فوق تنظیم شود، می توانید مانند زمانی که سایت در حالت تعمیر نبود، از آن استفاده کنید.

پیش رندر کردن ویوی حالت تعمیر

زمانی که دستور php artisan down در هنگام دیپلوی کردن برنامه اجرا می کنید، ممکن است کاربران در هنگام دسترسی به سایت با خطاهایی مواجه شوند. دلیل این موضوع این است که بخش قابل توجهی از لاراول باید بوت شود تا بتواند تشخیص دهد که برنامه در حالت تعمیر قرار دارد یا خیر.

برای رفع این مشکل لاراول گزینه –render را در اختیار ما قرار داده است تا با کمک آن می توانیم یک صفحه مربوط به حالت تعمیر را برای هر درخواست مشخص کنیم. ویوی مشخص شده قبل از اینکه وابستگی های برنامه بارگذاری شوند، رندر می شود. نحوه از استفاده از این گزینه:

php artisan down –render="errors::503"

1 php artisan down –render="errors::503"

منتقل کردن کاربران در حالت تعمیر

زمانی که برنامه در حالت تعمیر قرار داشته باشد، لاراول برای همه درخواست ها صفحه مربوط به حالت تعمیر را نمایش می دهد. اگر می خواهید تا لاراول همه درخواست ها به یک آدرس خاصی انتقال دهد، می توانید از گزینه –redirect مانند نمونه زیر استفاده کنید:

php artisan down –redirect=/

1 php artisan down –redirect=/

غیرفعال کردن حالت تعمیر

به منظور غیرفعال سازی حالت تعمیر می توانید از دستور up مانند نمونه زیر استفاده کنید:

php artisan up

1 php artisan up

ممکن است بخواهید صفحه مربوط به حالت تعمیر را شخصی سازی کنید. برای این کار می توانید صفحه مورد نظرتان را در مسیر resources/views/errors/503.blade.php ایجاد کنید.

حالت تعمیر و صف ها

زمانی که برنامه در حالت تعمیر باشد، هیچ کدام از عملیات هایی که به صورت Job در صف اجرا هستند، هندل نخواهند شد. البته زمانی که برنامه از حالت تعمیر خارج شود، اجرای عملیات های موجود در صف ادامه پیدا می کند.

دیدگاهتان را بنویسید