ارائه دهنده خدمات ابری PaaS و DBaaS

laravel

برنامه‌های Laravel

(Laravel Apps)

🎯 توضیحات و نکات تکمیلی

لینک‌کردن پوشه‌ی storage به پوشه‌ی public

برای دسترسی به فایل‌های پوشه‌هایstorage، طبق مستندات لاراول باید این پوشه به پوشه‌ی public لینک شود. برای این‌کار، در کامپیوتر خودتان اگر قبلا لینک را ایجاد کرده‌اید آن را حذف کرده و از دستور زیر برای ایجاد دوباره‌ی آن استفاده کنید:

php artisan storage:link --relative

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

بهینه کردن لاراول برای استقرار

Laravel برای دیپلوی در محیط‌های production با اجرای چند دستور ساده می‌تواند عملکرد بهتری داشته باشد. دستور اولphp artisan config:cache است که وظیفه کش کردن کانفیگ‌فایل‌ها را به عهده دارد و دستور دوم php artisan route:cache است که وظیفه کش کردن فایل‌های route را به عهده دارد. برای این که این دستورات به صورت خودکار توسط لیارا در هر استقرار اجرا شود کافیست که در فایل liara.json این فیلد‌ها را اضافه کنیم:

{
  "platform": "laravel",
  "app": "laravel-starter",
  "laravel": {
    "configCache": true,
    "routeCache": true
  }
}
می‌توانید هر فیلد را که خواستید استفاده کنید، مثلا فقط از "configCache": true استفاده کنید و فیلد دیگر را قرار ندهید.
توجه داشته باشید که طبق مستندات لاراول، استفاده از دستور php artisan route:cache تنها زمانی امکان‌پذیر است که شما از Closure ها برای تعریف route ها استفاده نکرده باشید و فقط از Controller استفاده کرده باشید.

تنظیمات اختصاصی 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

بعد از اضافه کردن این فایل، در استقرار بعدی برنامه شما با این تنظیمات شروع به کار خواهد کرد.

اجرای خودکار دستورات دلخواه

بعد از اتمام عملیات build به صورت خودکار برنامه‌ی‌تان اجرا می‌شود. اما ممکن است قبل از اجرای برنامه نیاز داشته باشید که دستوراتی به صورت خودکار روی سرور اجرا شوند. بدین منظور، می‌تونید ازpostBuildCommands داخل فایل liara.json استفاده کنید. برای مثال، می‌توانید migration ها را به صورت خودکار اجرا کنید و یا این که ماژول‌های Apache را فعال کنید.

{
  "laravel": {
    "postBuildCommands": [
      "echo 'Hello World!'",
      "php artisan migrate",
      "a2enmod expires"
    ]
  }
}

همان‌طور که مشاهده می‌کنید،postBuildCommandsآرایه است که شما می‌توانید به هر تعدادی دستور که مایل بودید، به آن اضافه کنید.

تنظیم TimeZone

ابتدا فایلapp/config.phpرا باز کرده و فیلدtimezoneآن را بهAsia/Tehranتغییر دهید و سپس در فایلliara_php.iniخط زیر را اضافه کرده و بعد دیپلوی کنید:

date.timezone = 'Asia/Tehran'

تنظیمات 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

برای اطلاعات بیشتر می‌توانید به لینک‌های زیر مراجعه کنید:

ایجاد CronJob

گاهی اوقات نیاز است کار خاصی در زمان خاصی و به صورت دوره‌ای انجام شود، مثلا تهیه‌ی فایل پشتیبان از پایگاه داده، ارسال ایمیل و خبرنامه و کارهایی نظیر این. برای تعریف کران‌جاب‌هایتان، می‌توانید فیلدی به نامcronرا به فایل liara.json برنامه‌ی‌تان اضافه کنید.

{
  "cron": [
    "* * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1"
  ]
}

همان‌طور که مشاهده می‌کنید، فیلدcronیک آرایه است و این یعنی می‌توانید یک یا چند کران‌جاب تعریف کنید.

مدیریت لاگ‌ها در Laravel

لاگ‌ها وظیفه دارند اتفاقات رخ داده در نرم‌افزار مثل error ها یا exception ها و حتی اطلاعاتی که خود برنامه‌نویس به دلخواه خود در بخش‌های مختلف نرم‌افزار درنظرگرفته را، ثبت کنند. Laravel روش‌های مختلفی برای لاگ‌ کردن دارد که اصطلاحا به آن‌ها Channel Drivers میگوید. برای آشنایی بیشتر به مستندات لاراول درباره‌ی Logs مراجعه کنید.

برای نمونه اگر قصد دارید Log ها را روی Console بریزید، تا در پنل لاگ‌های داشبورد لیارا قابل مشاهده باشد می‌توانید از درایورerrorlogاستفاده کنید. اگر قصد دارید Log ها را داخل یک فایل نگه‌دارید از درایور single استفاده کنید. اگر قصد دارید Log ها را بر اساس روز در فایل‌های مجزایی نگه‌داری کنید تا حجم هر فایل برای بررسی زیاد نشود می‌توانید از درایور daily استفاده کنید. تصمیم نحوه‌ نگه‌داری Log ها با شماست و در صورتی که قصد تغییر آن را دارید به راحتی از طریق بخش تنظیمات برنامه می‌توانید نام درایور موردنظر خودتون رو به env ها اضافه کنید:

LOG_CHANNEL=daily

یا

LOG_CHANNEL=errorlog
Laravel قابلیت خوبی برای استفاده همزمان از چند درایور دارد. اگر شما از درایور stack اسفتاده کنید می‌توانید همزمان Log ها را به چند درایور ارسال کنید. مثلا هم داخل فایل نگه‌داری شود و هم به Console ریخته شود تا در پنل لیارا قابل مشاهده باشد. درباره این درایور در مستندات Laravel بیشتر بخوانید.
برنامه‌های Laravel ای در لیارا به صورت پیشفرض با درایور errorlog مستقر می‌شوند.
در برنامه تستی آموزش راه‌اندازی Laravel در لیارا، از درایور stack برای لاگ همزمان داخل فایل و کنسول استفاده شده است. می‌توانید کد‌های آن ‌را برای بررسی بیشتر مطالعه کنید.

لیست اکستنشن‌های نصب شده

در پلتفرم لاراول، اکستنشن‌های PHP زیر نصب شده‌اند:

[PHP Modules]
amqp
apcu
bcmath
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
gnupg
hash
iconv
igbinary
imagick
imap
intl
json
ldap
libxml
mbstring
mcrypt
memcached
mongodb
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_dblib
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
readline
redis
Reflection
session
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
yaml
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache