Siz artıq Laravel Sail ilə Docker-də işləməyi bilirsiniz, Docker kursu isə php-fpm + Nginx image-ini və konteynerlərdə worker-ləri göstərir. VPS, Supervisor və Forge yolu VPS deploy, Supervisor və cron və Forge/Envoyer/CI mövzularındadır. Burada yalnız Laravel-ə məxsus production konteyneri var: FrankenPHP üzərində Octane image-i, build və start zamanı nələrin işləməsi, deploy addımı kimi migrasiyalar, health check və vahid compose.yaml.
Bir image, bir neçə rol
Laravel buraxılışı bir image-dir və müxtəlif əmrlərlə işə salınır. Veb server, növbə worker-i, planlaşdırıcı və migrasiya eyni kod üzərində php artisan ...-dır, ona görə versiyalar ayrılmamalıdır.
| Rol | Əmr | Ömür |
|---|---|---|
web | php artisan octane:frankenphp --host=0.0.0.0 --port=8000 | uzunömürlü, replikalarla miqyaslanır |
worker | php artisan queue:work --tries=3 --max-time=3600 | uzunömürlü, saatda bir özü yenidən başlayır |
scheduler | php artisan schedule:work | dəqiq bir nüsxə |
migrate | php artisan migrate --force --isolated | birdəfəlik, bitir |
💡
schedule:workkonteynerdə* * * * *cron sətrini əvəz edir; bir planlaşdırıcı işlədin, əks halda tapşırıqlar iki dəfə işləyər. Worker tənzimləməsi növbələr və Redis mövzusundadır.
Production Dockerfile
Fayl üç qərara söykənir: Vite asset-ləri üçün ayrıca Node mərhələsi (Node production-a düşmür), asılılıqlar koddan əvvəl qurulur (keşlənən lay) və sonda root olmayan istifadəçi. Layihədə composer require laravel/octane və php artisan octane:install --server=frankenphp artıq icra olunmalıdır.
FROM node:22-alpine AS assets
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM dunglas/frankenphp:1-php8.4
RUN install-php-extensions pcntl pdo_mysql redis opcache bcmath
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-scripts --no-autoloader
COPY . .
COPY --from=assets /app/public/build ./public/build
RUN composer dump-autoload --optimize --no-dev \
&& php artisan package:discover \
&& php artisan route:cache \
&& php artisan view:cache \
&& php artisan event:cacheİkinci yarı production dəyərlərini təyin edir, root-u götürür, başlatma əmrini və health check-i elan edir: