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"]