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
تشخیص
artisanوcomposer.jsonدر ریشه.artisanنصب
Composer بدون بستههای توسعه و، در صورت وجود، بیلد Vite.
composer install --no-devشروع
migration ها و کش پیکربندی و مسیرها ساخته میشوند.
php artisan migrate --forceاجرا
nginx و PHP-FPM روی پورت 80 بالا میآیند.
supervisord
خروجی یک استقرار واقعی
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
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
],
تنظیمات
نسخهی 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 و بقیه تزریق شوند.
sakoocloud apps link-db <redis-id> --app my-laravel --prefix REDIS
sakoocloud env set QUEUE_CONNECTION=redis CACHE_STORE=redis
دیتابیسهایی که معمولاً کنارش میآیند
همراه هر استقرار
اینها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعالاند. بعضی، مثل مقیاسدهی خودکار و کرانجاب، به پلن بستگی دارند.
- دامنهی اختصاصی و SSLدامنه را اضافه کنید؛ گواهی خودکار صادر و تمدید میشود.
- متغیرهای محیطی و سکرتمقادیر رمزگذاریشده فقط در زمان اجرا به اپ میرسند.
- مرحلهی انتشارmigration بعد از بیلد و پیش از جایگزینی نسخهی قبلی اجرا میشود.
- لاگ زندهلاگ بیلد و زمان اجرا، در CLI و کنسول.
- بازگشت به نسخهی قبلهر استقرار قبلی با یک دستور برمیگردد.
- مقیاسدهیمنابع و تعداد نمونهها را تغییر دهید یا خودکارش کنید.
- دیسک ماندگاربرای فایلهایی که باید بعد از هر استقرار بمانند.
- کرانجابدستور زمانبندیشده با همان ایمیج و متغیرها.
- استقرار خودکار با گیتهر push روی شاخهی هدف بیلد و مستقر میشود.
خطاهای رایج
خطای ۵۰۰ با پیام 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 متوقف میشود
علتمصرف حافظه از سقف منابع اپ بیشتر شده است.
راهحلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.
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.
