Guia Completo para Deploy de Aplicações Laravel em Produção

Guia Completo para Deploy de Aplicações Laravel em Produção

O deploy de uma aplicação Laravel exige algumas configurações essenciais para garantir segurança, desempenho e estabilidade. Neste artigo, você aprenderá a maneira correta de colocar sua aplicação Laravel em produção, seguindo as melhores práticas.


1. Escolha o Ambiente de Hospedagem

Antes de realizar o deploy, escolha um ambiente adequado para sua aplicação. Algumas opções populares incluem:

  • VPS/Dedicado: DigitalOcean, Linode, AWS, Vultr
  • PaaS (Plataforma como Serviço): Heroku, Laravel Forge, Ploi
  • Hospedagem Compartilhada: Opção menos recomendada, mas pode ser usada para projetos pequenos

Caso esteja utilizando uma VPS, instale um servidor web como Nginx ou Apache e configure um banco de dados (MySQL, PostgreSQL, etc.).


2. Configurando o Servidor para Laravel

Para configurar corretamente o ambiente, siga estes passos:

Instale os Pré-requisitos

Execute os seguintes comandos para instalar PHP, Composer, MySQL e Nginx:

sudo apt update && sudo apt install -y php-cli php-mbstring php-xml unzip curl mysql-server nginx

Crie um Usuário para o Deploy

sudo adduser deploy
sudo usermod -aG www-data deploy

Isso melhora a segurança e evita o uso do usuário root.


3. Subindo a Aplicação no Servidor

Depois de preparar o ambiente, faça upload do código via Git ou SFTP:

Clone o Repositório

git clone https://github.com/seu-repositorio.git /var/www/seu-projeto

Acesse a pasta do projeto e instale as dependências:

cd /var/www/seu-projeto
composer install --no-dev --optimize-autoloader

Crie o arquivo .env e configure as variáveis do ambiente:

cp .env.example .env
php artisan key:generate

4. Configuração do Servidor Web (Nginx)

Para que o Nginx sirva corretamente sua aplicação Laravel, crie um arquivo de configuração:

sudo nano /etc/nginx/sites-available/seu-projeto

Adicione o seguinte conteúdo:

server {
    listen 80;
    server_name seu-dominio.com;
    root /var/www/seu-projeto/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Habilite a configuração e reinicie o Nginx:

sudo ln -s /etc/nginx/sites-available/seu-projeto /etc/nginx/sites-enabled/
sudo systemctl restart nginx

5. Configuração de Permissões

Garanta que o Laravel possa acessar os diretórios necessários:

sudo chown -R www-data:www-data /var/www/seu-projeto
sudo chmod -R 775 /var/www/seu-projeto/storage /var/www/seu-projeto/bootstrap/cache

6. Otimizando a Aplicação para Produção

Antes de finalizar o deploy, aplique as otimizações:

Cache de Configuração e Rotas

php artisan config:cache
php artisan route:cache
php artisan view:cache

Rodando Migrations e Seeders

Se a aplicação usa banco de dados, execute:

php artisan migrate --force
php artisan db:seed --force

7. Configuração do Supervisor para Filas e Jobs

Se sua aplicação usa filas (queues), configure o Supervisor para manter os processos ativos:

Instale o Supervisor:

sudo apt install supervisor

Crie um arquivo de configuração:

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

Adicione o seguinte conteúdo:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/seu-projeto/artisan queue:work --tries=3
autostart=true
autorestart=true
numprocs=1
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/laravel-worker.log

Reinicie o Supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

8. Configuração de SSL com Let’s Encrypt

Para habilitar HTTPS gratuitamente, instale o Certbot:

sudo apt install certbot python3-certbot-nginx

E gere o certificado:

sudo certbot --nginx -d seu-dominio.com -d www.seu-dominio.com

Configure a renovação automática:

sudo certbot renew --dry-run

9. Automatizando Deploy com GitHub Actions (Opcional)

Se quiser automação no deploy, utilize GitHub Actions para fazer o deploy automaticamente após cada push.

Crie um arquivo .github/workflows/deploy.yml com o seguinte conteúdo:

name: Deploy Laravel

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Acessar Servidor via SSH
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /var/www/seu-projeto
          git pull origin main
          composer install --no-dev --optimize-autoloader
          php artisan migrate --force
          php artisan config:cache
          php artisan route:cache
          php artisan queue:restart
          sudo systemctl restart nginx

Isso automatiza a atualização do código no servidor ao fazer push no repositório.


Conclusão

Agora sua aplicação Laravel está pronta para produção, com segurança e desempenho otimizados. 🚀

✅ Dica Extra: Use ferramentas como Laravel Forge ou Envoyer para simplificar ainda mais o processo de deploy.

👉 E você, como costuma fazer o deploy do Laravel? Compartilhe suas experiências nos comentários!