برنامههای Laravel
(Laravel Apps)🎯 توضیحات و نکات تکمیلی
فهرست عناوین:
- لینککردن پوشهی storage به پوشهی public
- بهینه کردن لاراول برای استقرار
- تنظیمات اختصاصی php.ini
- تنظیمات TrustedProxies (برای مشاهده IP واقعی کاربران)
- فایلهای CSS و JS به صورت خودکار build میشوند
- کار با Queue ها
- مدیریت لاگها در Laravel
- انتخاب نسخهی PHP
- تنظیم منطقهی زمانی (TimeZone)
- لیست اکستنشنهای نصب شده
لینککردن پوشهی storage به پوشهی public
برای دسترسی به فایلهای پوشههایstorage، طبق مستندات لاراول باید این پوشه به پوشهی public لینک شود. لیارا بهصورت خودکار، در زمان استقرار، دستورphp artisan storage:linkرا اجرا میکند و نیازی نیست که اقدام خاصی انجام دهید.
بهینه کردن لاراول برای استقرار
Laravel برای دیپلوی در محیطهای production با اجرای چند دستور ساده میتواند عملکرد بهتری داشته باشد. دستور اولphp artisan config:cache است که وظیفه کش کردن کانفیگفایلها را به عهده دارد و دستور دوم php artisan route:cache است که وظیفه کش کردن فایلهای route را به عهده دارد. برای این که این دستورات به صورت خودکار توسط لیارا در هر استقرار اجرا شود کافیست که در فایل liara.json این فیلدها را اضافه کنیم:
{
"platform": "laravel",
"app": "laravel-starter",
"laravel": {
"configCache": true,
"routeCache": true
}
}
تنظیمات اختصاصی php.ini
از طریق ایجاد یک فایل با نامliara_php.iniداخل ریشهی برنامهیتان میتوانید تنظیمات PHP را شخصیسازی کنید. برای مثال، ممکن است بخواهید که حداکثر حجم مجاز برای آپلود فایل در سایت لاراولیتان را شخصیسازی کنید. پس لازم است که فایلliara_php.iniرا به برنامهیتان اضافه کرده و محتویات آن را برابر تکهکد قرار دهید:
file_uploads = On
memory_limit = 128M
upload_max_filesize = 64M
post_max_size = 128M
max_execution_time = 600
بعد از اضافه کردن این فایل، در استقرار بعدی برنامه شما با این تنظیمات شروع به کار خواهد کرد.
تنظیمات TrustedProxies (برای مشاهده IP واقعی کاربران)
تمامی درخواستها به سمت برنامهی شما توسط Reverse proxy های لیارا هدایت میشوند. برای این که در برنامهیتان بتوانید به آیپی واقعی کاربر دسترسی داشته باشید و یا این که از قابلیت Signed URL های Laravel استفاده کنید، لازم است که تغییراتی را در فایلapp/Http/Middleware/TrustProxies.phpاعمال کنید.
در این فایل، یک متغیر با نام$proxiesوجود دارد. فقط کافیست که مقدار آن را به*تغییر دهید.
<?php
namespace AppHttpMiddleware;
use IlluminateHttpRequest;
use FideloperProxyTrustProxies as Middleware;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array|string
*/
protected $proxies = '*';
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}
فایلهای CSS و JS به صورت خودکار build میشوند
همانطور که اطلاع دارید، در برنامههای لاراولی با اجرای دستورnpm run productionفایلهای SASS به CSS تبدیل میشوند و همینطور کدهای جاوا اسکریپت ES6 به بالا به ES5 تبدیل شده و یکپارچه میشوند.
هر زمان که برنامهیتان را روی لیارا مستقر میکنید، ما این دستور را برایتان اجرا میکنیم تا مطمئن شویم که فایلهای CSS و JS شما به صورت صحیح در اختیار کاربرانتان قرار گیرند.
اما اگر از Laravel فقط برای ساخت یک API استفاده کردهاید و یا به طور کلی نیازی به این ندارید که لیارا پکیجهای npm را برایتان نصب و فایلهای CSS و JavaScript تان را build کند، میتوانید در فایل liara.json برنامه، یک فیلد با نام laravel و داخل آن یک فیلد با نامbuildAssetsبسازید و این قابلیت را غیر فعال کنید.
{
"laravel": {
"buildAssets": false
}
}
با این تغییر، هر بار که دیپلوی کنید، لیارا از اجرای دستورات npm خودداری میکند.
کار با Queue ها
یکی از امکانات مهم Laravel، قابلیت تعریف صف (Queue) است. در پلتفرم لاراول، Supervisor نصب شده و شما با ایجاد یک فایل به نام supervisor.conf در ریشهی برنامه، میتوانید تنظیمات صفهای مختلفتان را در آن وارد کنید. و در نهایت با یکبار دیپلویکردن، صفهای شما شروع به کار خواهند کرد.
Supervisor برنامهی بسیار مفیدی است که سعی میکند صفهای شما را همیشه در حال اجرا نگهدارد. اگر به هر دلیلی صفهایتان به خطا بخورند و خاموش شوند، Supervisor آنها را دوباره ایجاد و فعال میکند.
از بخش خط فرمان (کنسول) برنامهیتان هم میتوانید با supervisorctl کار کنید و وضعیت صفهایتان را مشاهده کنید.
$ supervisorctl status
یک نمونه کانفیگ ساده برای یک صف با نام sms که وظیفهی ارسال پیامک به کاربران را به عهده دارد:
[program:scheduler]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --queue=sms --tries=3
autostart=true
autorestart=true
numprocs=1
user=www-data
redirect_stderr=true
stdout_logfile=/tmp/sms-queue.log
برای اطلاعات بیشتر میتوانید به لینکهای زیر مراجعه کنید:
مدیریت لاگها در Laravel
لاگها وظیفه دارند اتفاقات رخ داده در نرمافزار مثل error ها یا exception ها و حتی اطلاعاتی که خود برنامهنویس به دلخواه خود در بخشهای مختلف نرمافزار درنظرگرفته را، ثبت کنند. Laravel روشهای مختلفی برای لاگ کردن دارد که اصطلاحا به آنها Channel Drivers میگوید. برای آشنایی بیشتر به مستندات لاراول دربارهی Logs مراجعه کنید.
برای نمونه اگر قصد دارید Log ها را روی Console بریزید، تا در پنل لاگهای داشبورد لیارا قابل مشاهده باشد میتوانید از درایورerrorlogاستفاده کنید. اگر قصد دارید Log ها را داخل یک فایل نگهدارید از درایور single استفاده کنید. اگر قصد دارید Log ها را بر اساس روز در فایلهای مجزایی نگهداری کنید تا حجم هر فایل برای بررسی زیاد نشود میتوانید از درایور daily استفاده کنید. تصمیم نحوه نگهداری Log ها با شماست و در صورتی که قصد تغییر آن را دارید به راحتی از طریق بخش تنظیمات برنامه میتوانید نام درایور موردنظر خودتون رو به env ها اضافه کنید:
LOG_CHANNEL=daily
یا
LOG_CHANNEL=errorlog
انتخاب نسخهی PHP
بهصورت پیشفرض، برنامهی شما در نسخهی PHP 7.4 اجرا میشود. در صورتی که قصد دارید نسخه دیگری را برای اجرای برنامهیتان استفاده کنید میتوانید داخل فایل liara.json بخش زیر را اضافه کنید: (فایل زیر برای یک برنامه تستی در نظر گرفته شده است.)
{
"platform": "laravel",
"app": "laravel-starter",
"laravel": {
"phpVersion": "7.2"
}
}
در حال حاضر، از نسخههای زیر پشتیبانی میکنیم:
- 7.2
- 7.3
- 7.4
تنظیم منطقهی زمانی (TimeZone)
به صورت پیشفرض، منطقهی زمانی بر روی Asia/Tehran تنظیم شده است. برای تغییر مقدار پیشفرض، میتوانید از پارامترtimezoneدر فایل liara.jsonاستفاده کنید. برای نمونه:
{
"platform": "laravel",
"app": "laravel-starter",
"laravel": {
"timezone": "America/Los_Angeles"
}
}
لیست اکستنشنهای نصب شده
در پلتفرم لاراول، اکستنشنهای PHP زیر نصب شدهاند:
[PHP Modules]
amqp
apcu
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
gnupg
hash
iconv
igbinary
imagick
imap
intl
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_dblib
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
xsl
yaml
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache