فریم‌ورک PHP

هاست Laravel با migrate خودکار

پروژه‌ی Laravel از روی فایل artisan شناخته می‌شود. در هر استقرار php artisan migrate --force و php artisan optimize اجرا می‌شوند و برنامه پشت nginx و PHP-FPM بالا می‌آید.

تشخیص
artisan و composer.json
نسخه‌ها
PHP 8.2، 8.3 و 8.4
در هر استقرار
migrate --force و optimize
پورت
80
لوگوی Laravel

Laravel، از کد تا صف

وجود artisan در ریشه یعنی پروژه‌ی Laravel. وابستگی‌ها با Composer نصب می‌شوند و اگر فرانت‌اند با Vite دارید، npm run build هم در بیلد اجرا می‌شود. ریشه‌ی وب پوشه‌ی public است.

هنگام شروع، php artisan migrate --force و php artisan optimize اجرا و بعد nginx و PHP-FPM با supervisord بالا می‌آیند. APP_KEY و متغیرهای دیتابیس را از تنظیمات اپ بدهید، نه از فایل .env.

مناسب برای

  • پنل مدیریت و سامانه‌ی داخلی
  • API با Sanctum
  • فروشگاه و CMS
  • اپ با صف و Horizon

مسیر بیلد Laravel

  1. تشخیص

    artisan و composer.json در ریشه.

    artisan
  2. نصب

    Composer بدون بسته‌های توسعه و، در صورت وجود، بیلد Vite.

    composer install --no-dev
  3. شروع

    migration ها و کش پیکربندی و مسیرها ساخته می‌شوند.

    php artisan migrate --force
  4. اجرا

    nginx و PHP-FPM روی پورت 80 بالا می‌آیند.

    supervisord

خروجی یک استقرار واقعی

sakoocloud deploy
sakoocloud deploy
✔ Packed 6.8MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [build 1/6] FROM php:8.3-fpm-alpine
#6 [build 3/6] RUN composer install --no-dev --optimize-autoloader
#8 [build 4/6] RUN npm ci && npm run build
#10 [build 5/6] COPY . /var/www/html
#12 exporting to image
✔ Deployed — app is running.
→ https://my-laravel.sakooapps.ir

متغیرهای لازم

این‌ها را از کنسول یا CLI تعریف کنید؛ دیتابیس لینک‌شده متغیرهای DATABASE_* را خودش اضافه می‌کند.

sakoocloud apps create --name my-laravel --runtime laravel --port 80
sakoocloud env set APP_KEY=base64:... APP_ENV=production APP_DEBUG=false
sakoocloud deploy

تنظیمات

نسخه‌ی PHP

PHP 8.2 تا 8.4؛ نسخه از require.php در composer.json خوانده می‌شود.

منبعنمونه
composer.json"php": "^8.3"
فلگ --runtime-version--runtime-version 8.4

در هر شروع اجرا می‌شود

دستورنتیجه
php artisan migrate --forceاعمال migration های جدید
php artisan optimizeکش config، route و view

صف و کش با Redis

Redis را بسازید و با پیشوند REDIS لینک کنید تا REDIS_URL و بقیه تزریق شوند.

terminal
sakoocloud apps link-db <redis-id> --app my-laravel --prefix REDIS
sakoocloud env set QUEUE_CONNECTION=redis CACHE_STORE=redis

دیتابیس‌هایی که معمولاً کنارش می‌آیند

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

خطای ۵۰۰ با پیام No application encryption key

علتAPP_KEY تعریف نشده است.

راه‌حلبا php artisan key:generate --show کلید بسازید و با sakoocloud env set APP_KEY=... تعریف کنید.

خطای ۴۱۹ Page Expired

علتنشست کاربر حفظ نمی‌شود؛ معمولاً چند نمونه با session فایلی یا پروکسی مورد اعتماد تنظیم نشده.

راه‌حلSESSION_DRIVER را redis یا database بگذارید و پروکسی‌ها را در TrustProxies قبول کنید.

migration در شروع شکست می‌خورد

علتاتصال دیتابیس تنظیم نیست یا migration خطا دارد.

راه‌حلدیتابیس را لینک کنید و لاگ زمان اجرا را بررسی کنید.

پاد با OOMKilled متوقف می‌شود

علتمصرف حافظه از سقف منابع اپ بیشتر شده است.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

صف (queue worker) را کجا اجرا کنم؟

در یک اپ جدا از همان مخزن که دستور php artisan queue:work را اجرا می‌کند، با Redis به‌عنوان صف.

زمان‌بند Laravel چطور اجرا شود؟

یک کران‌جاب هر دقیقه با دستور php artisan schedule:run تعریف کنید.

فایل‌های storage کجا بمانند؟

برای فایل‌های کاربر از دیسک s3 با فضای ذخیره‌سازی ابری یا دیسک ماندگار اپ استفاده کنید.

Livewire و Inertia کار می‌کنند؟

بله. اگر package.json و اسکریپت build دارید، assets در بیلد ساخته می‌شوند.

جزئیات بیشتر در راهنمای Laravel در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید