Deployment
Introdução
Quando estiver pronto para distribuir o seu aplicativo Laravel à produção, existem algumas coisas importantes a ter em atenção para garantir que o aplicativo funciona da forma mais eficiente possível. Neste documento, discutimos alguns pontos de partida que podem ajudar a distribuir com sucesso o seu aplicativo Laravel.
Requisitos do servidor
O framework Laravel exige alguns requisitos mínimos do seu sistema. Verifique se o servidor Web tem as seguintes versões e extensões mínimas de PHP:
- PHP >= 8.2
- Ctype PHP
- cURL PHP
- DOM PHP
- Fileinfo PHP
- Filter PHP
- Hash PHP
- Mbstring PHP
- OpenSSL PHP
- PCRE PHP
- PDO PHP
- Session PHP
- Tokenizer PHP
- XML PHP
Configuração do servidor
NGINX
Se estiver a implementar a sua aplicação num servidor que execute o Nginx, poderá utilizar o seguinte ficheiro de configuração como ponto de partida para configurar o seu servidor web. Provavelmente, este ficheiro terá de ser personalizado com base na configuração do seu servidor. Se pretender assistência na gestão do seu servidor, poderá recorrer a um serviço de gestão e implementação de servidores Laravel como o Laravel Forge.
Verifique se o servidor web direciona todas as solicitações para o arquivo public/index.php
do aplicativo, conforme a configuração abaixo. Nunca tente mover o arquivo index.php
para a raiz do projeto, pois isso exporia vários arquivos de configuração sensíveis à Internet pública:
server {
listen 80;
listen [::]:80;
server_name example.com;
root /srv/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
FrankenPHP
O FrankenPHP também pode ser usado para hospedar seu aplicativo Laravel. O FrankenPHP é um servidor de aplicativos PHP moderno escrito em Go. Para servir um aplicativo PHP do Laravel utilizando o FrankenPHP, você pode invocar seu comando php-server
da seguinte maneira:
frankenphp php-server -r public/
Para aproveitar recursos mais poderosos suportados pelo FrankenPHP, como a integração com o Laravel Octane, HTTP/3, compressão moderna ou a capacidade de empacotar aplicações do Laravel como binários autônomos, consulte a documentação do FrankenPHP para o Laravel no site FrankenPHP's Laravel documentation.
Permissões do diretório
O Laravel precisará escrever nas pastas bootstrap/cache
e storage
, portanto, você deve garantir que o proprietário do processo do servidor web tenha permissão para escrever nessas pastas.
Otimização
Ao implementar sua aplicação na produção, uma série de arquivos deve ser armazenado em cache, incluindo a configuração, eventos, rotas e visualizações. O Laravel fornece um único comando do Artisan optimize
que permite o armazenamento destes arquivos em cache. Este comando normalmente é acionado como parte do processo de implementação da sua aplicação:
php artisan optimize
O método optimize:clear
pode ser usado para remover todos os arquivos do cache gerados pelo comando optimize
:
php artisan optimize:clear
Na documentação a seguir, discutiremos cada um dos comandos de otimização detalhada que são executados pelo comando optimize
.
Configuração de Armazenamento em Cache
Ao implantar seu aplicativo na produção, você deve certificar-se de executar o comando do Artisan config:cache
durante seu processo de implementação:
php artisan config:cache
Este comando combina todos os arquivos de configuração do Laravel em um único arquivo, que é armazenado em cache, reduzindo consideravelmente a quantidade de vezes que o framework precisa se conectar ao sistema de arquivos para carregar seus valores de configuração.
AVISO
Se você executar o comando config:cache
durante seu processo de implantação, certifique-se que está chamando a função env
somente a partir de dentro dos seus arquivos de configuração. Uma vez que a configuração foi armazenada em cache, o arquivo .env
não será mais carregado e todas as chamadas à função env
para variáveis .env
retornarão null
.
Armazenamento em cache de eventos
Deve armazenar em cache os mapeamentos de evento a um ouvinte identificados automaticamente no seu aplicativo durante o processo de implantação. Isso pode ser realizado ao invocar a ordem event:cache
do Artisan durante a implantação:
php artisan event:cache
Armazenar rotas
Se estiver a construir um aplicativo grande com vários caminhos, deve certificar-se de executar o comando route:cache
do Artisan durante o processo de implementação:
php artisan route:cache
Este comando reduz todas as suas inscrições de rota em uma única chamada de método dentro de um arquivo de cache, melhorando o desempenho da inscrição de rota quando se registram centenas de rotas.
Memorização das visualizações
Ao implementar sua aplicação em produção, certifique-se de executar o comando Artisan view:cache
durante seu processo de implementação:
php artisan view:cache
Esse comando pré-compila todas as suas visualizações do Blade para que elas não sejam compiladas conforme necessário, o que melhora o desempenho de cada solicitação que retorna uma visualização.
Modo de Depuração
A opção debug
em seu arquivo de configuração config/app.php
determina quais informações sobre um erro serão realmente exibidas ao usuário. Por padrão, esta opção respeita o valor da variável de ambiente APP_DEBUG
, que está armazenada no arquivo .env
do aplicativo.
ATENÇÃO
No ambiente de produção, este valor deve ser sempre false
. Se a variável APP_DEBUG
estiver definida como true
na produção, corre-se o risco de expor valores sensíveis da aplicação aos finais utilizadores.
Rota de Integridade
O Laravel inclui uma rota de verificação de integridade que pode ser usada para monitorar o estado da aplicação. Na produção, essa rota pode ser usada para informar o estado da sua aplicação a um sistema de monitoramento do tempo de atividade, balanceador de carga ou sistema de orquestração, como o Kubernetes.
Por padrão, a rota de verificação da integridade é servida em /up
e retorna uma resposta HTTP 200 se o aplicativo iniciou-se sem exceções. Caso contrário, será enviado um resposta HTTP 500. Você pode configurar o URI desta rota no ficheiro bootstrap/app
, da aplicação:
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up', // [tl! remove]
health: '/status', // [tl! add]
)
Quando uma requisição HTTP é feita para este roteamento, o Laravel envia também um evento Illuminate\Foundation\Events\DiagnosingHealth
, permitindo que você faça verificações de saúde adicionais relevantes à aplicação. Em um ouvinte para este evento, é possível verificar o status do banco de dados ou cache da sua aplicação. Se você detectar algum problema com a aplicação, pode simplesmente lançar uma exceção a partir do ouvinte.
Implementação fácil com o Forge/Vapor
Laravel Forge
Se você não estiver pronto para gerenciar sua própria configuração de servidor ou não se sentir à vontade para configurar todos os vários serviços necessários para executar uma aplicação Laravel robusta, o Laravel Forge é uma excelente alternativa.
O Laravel Forge pode criar servidores em vários fornecedores de infraestrutura, como DigitalOcean, Linode e AWS, entre outros. Além disso, o Forge instala e gere todas as ferramentas necessárias para construir aplicações robustas com Laravel, tais como Nginx, MySQL, Redis, Memcached e Beanstalk, entre outras.
NOTA
Quer um guia completo para implantação com Laravel Forge? Confira o Laravel Bootcamp e o Forge nesta série de vídeos disponíveis no Laracasts.
Laravel Vapor
Se você gostaria de uma plataforma de implantação totalmente sem servidor, com escala automática ajustada para o Laravel, confira o Laravel Vapor. O Laravel Vapor é uma plataforma de implantação sem servidor para o Laravel, executado pela AWS. Inicie sua infraestrutura do Laravel na Vapor e se apaixone pela simplicidade escalável de um sistema sem servidor. O Laravel Vapor foi ajustado pelos criadores do Laravel para funcionar perfeitamente com o framework, permitindo que você siga escrevendo seus aplicativos do Laravel exatamente como está acostumado.