💻 Exemplos: Capítulo 19: Conteinerização com Laravel Sail e Deploy com Octane
Especialização em Backend com PHP & Laravel • Demonstrações Práticas Compiláveis
💻 Exemplo 1 — docker-compose.yml de Desenvolvimento (Sail)
# docker-compose.yml
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.3
dockerfile: Dockerfile
image: sail-8.3/app
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER:-1000}'
LARAVEL_SAIL: 1
volumes:
- '.:/var/www/html'
depends_on:
- pgsql
- redis
pgsql:
image: postgres:16-alpine
environment:
POSTGRES_DB: '${DB_DATABASE}'
POSTGRES_PASSWORD: '${DB_PASSWORD}'
volumes:
- sail-pgsql:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
- sail-redis:/data
volumes:
sail-pgsql:
driver: local
sail-redis:
driver: local
💻 Exemplo 2 — Configuração e Reset de Estado do Octane
<?php
// config/octane.php
return [
'server' => env('OCTANE_SERVER', 'frankenphp'),
'https' => env('OCTANE_HTTPS', false),
'workers' => env('OCTANE_WORKERS', 'auto'),
'max_requests' => env('OCTANE_MAX_REQUESTS', 500),
'warm' => [
...config('octane.warm', []),
],
];
<?php
// app/Providers/AppServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Event;
use Laravel\Octane\Events\RequestReceived;
use Laravel\Octane\Events\RequestTerminated;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Event::listen(RequestReceived::class, function () {
// Limpa qualquer estado acumulado em Singletons antes da próxima requisição.
app(\App\Support\RequestScopedCache::class)->flush();
});
Event::listen(RequestTerminated::class, function () {
// Ponto seguro para liberar conexões ou buffers abertos manualmente.
});
}
}
💻 Exemplo 3 — Dockerfile Multi-stage de Produção
# Dockerfile.prod
FROM composer:2 AS vendor
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist
FROM php:8.3-fpm-alpine AS app
RUN apk add --no-cache postgresql-dev \
&& docker-php-ext-install pdo pdo_pgsql opcache
WORKDIR /var/www/html
COPY --from=vendor /app/vendor ./vendor
COPY . .
RUN composer dump-autoload --optimize \
&& php artisan config:cache \
&& php artisan route:cache
EXPOSE 9000
CMD ["php-fpm"]