Loading...

آموزش / استقرار

چگونه یک اپلیکیشن Laravel را روی cdn.com.tr مستقر کنیم

یک اپلیکیشن Laravel را بدون اجاره و وصله‌کردن یک سرور به محیط تولید ببرید. دو مسیر: یک محیط اجرای PHP کاملاً مدیریت‌شده، یا کانتینر خودتان که از Git مستقر می‌شود — هر دو پشت edge شبکه CDN با یک دیتابیس مدیریت‌شده، HTTPS خودکار و یک WAF.

۹ دقیقه مطالعه متوسط Updated

چگونه یک اپلیکیشن Laravel را روی cdn.com.tr مستقر کنیم

دو راه برای استقرار

به یک اپلیکیشن Laravel، یک مخزن Git و یک حساب cdn.com.tr نیاز دارید. دو مسیر وجود دارد و می‌توانید هر کدام را انتخاب کنید. پلتفرم PHP مدیریت‌شده اپلیکیشن Laravel شما را روی یک محیط اجرای مدرن PHP 8 با یک دیتابیس مدیریت‌شده، Redis، SSL خودکار و یک WAF اجرا می‌کند — بدون Dockerfileای برای نوشتن. مسیر کانتینر کنترل کامل می‌دهد: شما یک Dockerfile ارائه می‌دهید، و پلتفرم آن را به‌عنوان یک اپلیکیشن کانتینری مدیریت‌شده می‌سازد و اجرا می‌کند. هر دو پشت edge شبکه CDN قرار می‌گیرند. این راهنما مسیر کانتینر را با جزئیات پوشش می‌دهد و در جایی که ساده‌تر است به پلتفرم مدیریت‌شده اشاره می‌کند.

چگونه یک اپلیکیشن Laravel را روی cdn.com.tr مستقر کنیم — دو راه برای استقرار
پلتفرم‌های مدیریت‌شده و container apps روی cdn.com.tr.

پیکربندی و رازها

هرگز .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 — افزودن دیتابیس و Redis، سپس migrate
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.

موارد مناسب

SaaS و وب‌اپلیکیشن‌ها

Laravel را با یک دیتابیس مدیریت‌شده و Redis، HTTPS خودکار و یک WAF اجرا کنید، مستقرشده مستقیماً از Git.

مدرن‌سازی PHP قدیمی

یک اپلیکیشن PHP قدیمی‌تر را روی پلتفرم مدیریت‌شده به PHP 8 منتقل کنید، پشت CDN و WAF، بدون بازطراحی آن.

APIها و backendها

مسیرهای 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 شما با کد همگام می‌ماند.