دو راه برای استقرار
به یک اپلیکیشن Laravel، یک مخزن Git و یک حساب cdn.com.tr نیاز دارید. دو مسیر وجود دارد و میتوانید هر کدام را انتخاب کنید. پلتفرم PHP مدیریتشده اپلیکیشن Laravel شما را روی یک محیط اجرای مدرن PHP 8 با یک دیتابیس مدیریتشده، Redis، SSL خودکار و یک WAF اجرا میکند — بدون Dockerfileای برای نوشتن. مسیر کانتینر کنترل کامل میدهد: شما یک Dockerfile ارائه میدهید، و پلتفرم آن را بهعنوان یک اپلیکیشن کانتینری مدیریتشده میسازد و اجرا میکند. هر دو پشت edge شبکه CDN قرار میگیرند. این راهنما مسیر کانتینر را با جزئیات پوشش میدهد و در جایی که سادهتر است به پلتفرم مدیریتشده اشاره میکند.
پیکربندی و رازها
هرگز .env خود را در image نپزید یا رازها را در Git کامیت نکنید. در عوض، پیکربندی Laravel خود را بهصورت متغیرهای محیطی (و رازها) روی پلتفرم تنظیم کنید، تا همان image بهطور امن در محیط تولید اجرا شود. دستکم کلید اپلیکیشن، محیط، و اتصالات دیتابیس مدیریتشده و Redis خود را تنظیم خواهید کرد.
مقادیر محیطی برای تنظیم روی پلتفرم
APP_ENV=production
APP_KEY=base64:... # php artisan key:generate --show
APP_DEBUG=false
APP_URL=https://app.example.com
DB_CONNECTION=mysql
DB_HOST=<managed-db-host>
DB_DATABASE=<db>
DB_USERNAME=<user>
DB_PASSWORD=<secret>
CACHE_STORE=redis
SESSION_DRIVER=redis
REDIS_HOST=<managed-redis-host>
یک Dockerfile اضافه کنید
یک Dockerfile را به ریشه مخزن خود commit کنید. این نمونه وابستگیهای Composer را نصب میکند و اپلیکیشن را روی پورت 8000 سرویس میدهد. سرور داخلی Laravel نمونه را ساده نگه میدارد؛ برای ترافیک بالا، خط آخر را به Laravel Octane (FrankenPHP یا Swoole) تغییر دهید یا بهجای آن از پلتفرم PHP مدیریتشده استفاده کنید.
Dockerfile
FROM php:8.2-cli
# افزونههای PHP که Laravel معمولاً نیاز دارد
RUN apt-get update && apt-get install -y libzip-dev \
&& docker-php-ext-install pdo_mysql zip opcache
# Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY . .
RUN composer install --no-dev --optimize-autoloader --no-interaction
EXPOSE 8000
CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
استقرار از Git
در پنل cdn.com.tr، یک اپلیکیشن کانتینری بسازید و مخزن Git خود را متصل کنید. پلتفرم Dockerfile شما را میخواند، image را میسازد و کانتینر را اجرا میکند. پس از آن، استقرار فقط push به شاخه شماست — هر push یک image تازه میسازد و آن را با صفر زمان توقف عرضه میکند.
یک تغییر را عرضه کنید
git add .
git commit -m "Add invoices page"
git push origin main
# cdn.com.tr بهطور خودکار image را میسازد و عرضه میکند
دیتابیس مدیریتشده، Redis و migrationها
با یک دستور cdnctl برای هرکدام، یک دیتابیس مدیریتشده و Redis متصل کنید — آنها اتصال را بهصورت متغیرهای محیطی به اپلیکیشن شما سیمکشی میکنند، پس مقادیر .env از گام ۲ برای شما تنظیم میشوند. Redis یک cache و انبار session سریع به Laravel میدهد؛ دیتابیس مدیریتشده پشتیبانگیری میشود و از اپلیکیشن قابل دسترسی است. سپس migrationهای خود را بهعنوان بخشی از استقرار روی آن اجرا کنید تا schema همگام بماند.
cdnctl accounts use <account_uuid>
cdnctl container addons enable-database --app <app_uuid> --url-scheme mysql
cdnctl container addons enable-redis --app <app_uuid> --env-prefix REDIS
# اجرای migrationها روی دیتابیس مدیریتشده
php artisan migrate --force
دامنه، HTTPS و edge
دامنه خود را به اپلیکیشن اشاره دهید و cdn.com.tr گواهی SSL را بهطور خودکار صادر و تمدید میکند. اکنون اپلیکیشن Laravel شما پشت edge شبکه CDN اجرا میشود: داراییهای ثابت کش و نزدیک بازدیدکنندگان سرویس میشوند، یک WAF ترافیک مخرب را فیلتر میکند، و هجومها در edge جذب میشوند. اگر ترجیح میدهید اصلاً یک Dockerfile را مدیریت نکنید، پلتفرم PHP مدیریتشده همان نتیجه را میدهد — محیط اجرای PHP 8، دیتابیس و Redis مدیریتشده، HTTPS خودکار و WAF — بدون ساختن یک image.
موارد مناسب
Laravel را با یک دیتابیس مدیریتشده و Redis، HTTPS خودکار و یک WAF اجرا کنید، مستقرشده مستقیماً از Git.
یک اپلیکیشن PHP قدیمیتر را روی پلتفرم مدیریتشده به PHP 8 منتقل کنید، پشت CDN و WAF، بدون بازطراحی آن.
مسیرهای API مربوط به Laravel را بهعنوان یک کانتینر مدیریتشده با healthcheckها، رازها و مسیریابی edge در جلو سرویس دهید.
پرسشهای پرتکرار استقرار Laravel
آیا به Docker نیاز دارم یا میتوانم از پلتفرم مدیریتشده استفاده کنم؟
هر دو. پلتفرم PHP مدیریتشده Laravel را بدون یک Dockerfile اجرا میکند — یک محیط اجرای PHP 8 با یک دیتابیس مدیریتشده، Redis، HTTPS و یک WAF میگیرید. مسیر کانتینر برای تیمهایی است که کنترل کامل روی image میخواهند؛ هر دو پشت edge اجرا میشوند.
صفها و scheduler کجا اجرا میشوند؟
scheduler و queue workerهای Laravel را بهعنوان کارهای زمانبندیشده یا بلندمدت در کنار اپلیکیشن اجرا کنید، متصل به همان Redis/دیتابیس مدیریتشده. رازها را در متغیرهای محیطی نگه دارید تا هر پردازه یک پیکربندی مشترک داشته باشد.
migrationهای دیتابیس هنگام استقرار چگونه کار میکنند؟
'php artisan migrate --force' را بهعنوان بخشی از استقرار خود روی دیتابیس مدیریتشده اجرا کنید. چون یک بیلد ناموفق باعث میشود نسخه قبلی همچنان سرویس دهد، بهطور امن رو به جلو حرکت میکنید و schema شما با کد همگام میماند.