Meta descrição: Guia prático para configurar deploy Laravel na VPS com Git hook: bare repo, post-receive, .env seguro, permissões, migrações e rollback.

Configurar deploy automático no Laravel usando Git hook permite publicar novas versões com um simples git push. A estratégia clássica é usar um repositório bare na VPS para receber os pushes e um hook post-receive que atualiza o código em uma pasta do app, instala dependências, roda migrações e otimiza o Laravel. A ideia central é separar repositório (onde o Git recebe commits) do diretório do app em produção (onde o código roda). Com isso, o processo fica reprodutível, seguro e fácil de reverter.
O que é deploy automático de Laravel com Git hook?
Você envia git push para a VPS, o repositório bare recebe as refs e o hook post-receive executa o deploy. Fluxo: 1) Desenvolve localmente; 2) git push vps main; 3) VPS recebe no bare repo; 4) post-receive dispara; 5) script publica o código e roda passos do Laravel. Vantagens: simplicidade, rapidez e reprodutibilidade. Atenções: permissões, segurança e possibilidade de inconsistência momentânea se atualizar arquivos enquanto requisições acontecem. Estrutura comum: /var/repo/meuapp.git (bare) e /var/www/meuapp (app em produção).
🤖 Próximo passo: automações e Agentes de IA com n8n
Depois do deploy sólido, automatize tarefas e crie agentes de IA (classificação de leads, triagem de tickets, integrações) sem travar em código. A Formação Agentes de IA (n8n) da Hora de Codar traz 11+ cursos, 221+ aulas, 20h+ e 21+ projetos, com comunidade ativa (8100+ alunos). Veja: https://app.horadecodar.com.br/lp/formacao-agentes-de-ia-n8n?utm_source=blog
Preparando a VPS: dependências e bare repository
Pré-requisitos: PHP compatível + extensões (openssl, mbstring, pdo, tokenizer, xml, curl, etc.), Composer, Git, Nginx/Apache com PHP-FPM. Verifique php -v, composer -V e git –version. Estrutura de pastas sugerida: /var/repo/meuapp.git (bare), /var/www/meuapp (app), /var/www/meuapp/shared (itens persistentes como .env e storage compartilhado). Crie um usuário dedicado (ex.: deploy) para evitar rodar tudo como root. Passos básicos: 1) mkdir -p /var/repo/meuapp.git e git init –bare; 2) no projeto local, git remote add vps deploy@SEU_IP:/var/repo/meuapp.git; 3) teste com git push vps main; 4) crie /var/www/meuapp e ajuste dono/grupo (deploy:www-data).
Vídeo recomendado para complementar (VPS na prática)
Título: COMO INSTALAR n8n NA VPS EM 5 MINUTOS! Ajuda a entender a rotina de acesso e configuração de uma VPS, útil antes de colocar um Laravel em produção. Link: https://www.youtube.com/watch?v=VCKzXFk_XjM
Configurando o post-receive para deploy automático
Local do hook: /var/repo/meuapp.git/hooks/post-receive (tornar executável). Lógica do script: 1) Filtrar branch (ex.: main); 2) Fazer checkout/atualização em /var/www/meuapp usando GITWORKTREE; 3) composer install –no-dev –prefer-dist –no-interaction –optimize-autoloader; 4) php artisan migrate –force; 5) php artisan config:cache, route:cache (se aplicável), view:cache; 6) php artisan storage:link (se necessário). Dicas: usar while read oldrev newrev ref para lidar com múltiplas refs; usar –force nas migrações; considerar reinício de PHP-FPM/limpeza de OPcache conforme o ambiente. Teste com git push vps main e observe a saída do hook.
Segurança, .env e permissões
Não versione o .env. Use /var/www/meuapp/shared/.env e um symlink para /var/www/meuapp/.env. Garanta permissões corretas em storage/ e bootstrap/cache/ (evite chmod 777; prefira dono deploy e grupo www-data com escrita apenas onde necessário). Execute o hook como um usuário específico (deploy) para evitar arquivos como root. Proteja o SSH: use chaves, restrinja acesso e mantenha firewall e sistema atualizados. Persistência de uploads: mantenha storage/app/public (ou storage inteiro) como compartilhado e faça symlink para a versão em uso.
💻 VPS para rodar seu Laravel em produção (sugestão: Hostinger)
Uma VPS estável ajuda no Composer, espaço para releases e pushes confiáveis. A Hostinger oferece planos NVMe com painel amigável e 30 dias de garantia. Link de indicação: https://www.hostinger.com.br/horadecodar | Cupom: HORADECODAR. Comece pequeno e escale quando precisar (queues, mais serviços, etc.).
Boas práticas: rollback e releases
Rollback rápido: use tags (ex.: v1.2.0) para versões estáveis e faça checkout da tag anterior se necessário. Releases com symlink: /var/www/meuapp/releases/AAAAmmddHHMMSS para cada versão e /var/www/meuapp/current apontando para a release atual; trocar o symlink reduz inconsistências durante o deploy. Migrations: prefira mudanças pequenas e reversíveis; use –force em produção; planeje mudanças destrutivas em etapas. Diagnóstico comum: falha no Composer (extensões/memória/zip), permissão em storage/cache, APP_KEY ausente (.env), route:cache com rotas closure. Considere registrar logs do hook em arquivo local para debug.
O que são Git hooks e como eles funcionam no deploy do Laravel?
Git hooks são scripts executados automaticamente em determinados eventos no repositório Git. Para deploy do Laravel, os hooks mais usados são no servidor VPS (como o post-receive) para automatizar a atualização do código assim que um push é feito para o repositório bare hospedado na VPS, evitando a necessidade de uploads manuais.
Como garantir que o .env e permissões estejam corretos no deploy via Git hook?
Após o Git hook atualizar os arquivos do projeto, certifique-se de que o arquivo .env esteja presente e configurado com dados da produção. Em seguida, ajuste as permissões das pastas de cache e storage com comandos como ‘chmod’ e ‘chown’, garantindo que o servidor web tenha acesso adequado.
É possível reverter rapidamente um deploy feito via Git hook (rollback)?
Sim, é possível implementar rollback. Basta manter backups dos releases anteriores ou usar branches/tags para identificar versões estáveis. No post-receive, você pode criar scripts adicionais para trocar rapidamente o symlink da pasta do projeto para uma versão anterior, restaurando o estado rapidamente em caso de erro no deploy.
Conclusão
O deploy de Laravel na VPS com Git hook combina um bare repository que recebe pushes e um post-receive que publica o código, instala dependências e roda migrações. O segredo da confiabilidade está nos detalhes: .env fora do Git, permissões corretas, storage persistente e SSH seguro. Com isso, você ganha velocidade e previsibilidade. Se quiser evoluir, adote releases com symlink, rollback por tags e logs do hook, e só então considere um pipeline CI/CD completo quando o projeto exigir.

