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.

Bir image: web, worker, scheduler və birdəfəlik migrate job
Bir image: web, worker, scheduler və birdəfəlik migrate job
RolƏmrÖmür
webphp artisan octane:frankenphp --host=0.0.0.0 --port=8000uzunömürlü, replikalarla miqyaslanır
workerphp artisan queue:work --tries=3 --max-time=3600uzunömürlü, saatda bir özü yenidən başlayır
schedulerphp artisan schedule:workdəqiq bir nüsxə
migratephp artisan migrate --force --isolatedbirdəfəlik, bitir

💡 schedule:work konteynerdə * * * * * 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.

dockerfile
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: