Como fazer deploy de uma aplicação Laravel em uma hospedagem compartilhada

Você está lá, com sua aplicação Laravel prontinha pra ir pra produção, e quando vê, seu cliente possui um host compartilhado onde a pasta “public” se chama na verdade “public_html”? Ou “www”? Ou qualquer outro nome?

Locaweb? KingHost? Qualquer outro? Nós também já passamos por isso.

Aqui vamos mostrar como fazer o deploy dessa aplicação, e ainda configurar o deploy automatizado via GIT.

Sua aplicação não precisa ser especificamente Laravel para seguir estes passos também.

Pré-requisitos:
Sua hospedagem deve possuir GIT instalado e acesso SSH.
Se você chegou até aqui, provavelmente está com uma aplicação Laravel, então seu host vai precisar de no mínimo a versão 5.6 do PHP e do Composer instalado.

Nota especial para a Locaweb
Caso você esteja na Locaweb, você vai precisar configurar sua versão do PHP e configurar o composer. Também, sempre que nos referirmos a utilizar o PHP na linha de comando, você vai trocar por “php70 -c ~/php.ini” (Ou a versão que tiver configurado, por exemplo, “php56 -c ~/php.ini”).

Você também vai precisar remover os comandos registrados no “post-install-cmd”, no seu composer.json.

1- Configurar sua chave SSH

Antes de qualquer coisa, configure sua chave SSH pública no servidor de produção para facilitar o acesso.

Para isso, copie o conteúdo do arquivo ~/.ssh/id_rsa.pub.

$ cat ~/.ssh/id_rsa.pub | pbcopy

Depois acesse seu servidor via SSH, e cole o conteúdo no arquivo ~/.ssh/authorized_keys.

$ vim ~/.ssh/authorized_keys

Este arquivo também precisa ter permissão 700.

$ chmod -R 700 ~/.ssh/authorized_keys

2- Crie o diretório para o seu projeto

Você vai criar uma pasta na raiz da hospedagem (fora da pasta “public” da hospedagem) onde sua aplicação vai residir.

$ mkdir ~/apps/seusite.com

Aqui, você vai trocar seusite.com pelo domínio do seu projeto (ou qualquer outro nome que quiser). E sempre que usarmos seusite.com no restante do post, você sabe o que fazer.

3- Configure o composer na pasta do seu projeto

Acesse a pasta recém criada.

$ cd ~/apps/seusite.com

E execute o seguinte comando para “instalar” o composer no seu servidor.

$ curl -sS https://getcomposer.org/installer | php

Caso você esteja na Locaweb, esqueça o comando acima e execute o seguinte comando (claro que depois de executar as configurações citadas no início do post):

$ curl -sS https://getcomposer.org/installer | php56 -c ~/php.ini

4- Configurar o repositório GIT no servidor de produção

Caso você não queira fazer um deploy automatizado via GIT, pode pular direto para o passo 6.

Acesse a pasta raiz do projeto, e crie uma pasta onde seu(s) repositórios GIT vão residir.

$ mkdir ~/repos && mkdir ~/repos/projeto.git

Depois de criar a pasta, você vai acessa-lá e executar o seguinte comando para iniciar um repositório GIT (do tipo bare).

$ git init --bare

Pronto, você já tem um repositório no servidor de produção, agora você só precisa configurar um “hook”, para que a cada push que você envie para este repositório, os arquivos sejam copiados para a pasta ~/apps/seusite.com.

Para isto, edite vamos editar o arquivo post-receive.

$ touch hooks/post-receive && chmod +x hooks/post-receive && vim hooks/post-receive

E cole o seguinte conteúdo no arquivo:

#!/bin/sh 
GIT_WORK_TREE=/home/[USUARIO-FTP]/apps/seusite.com git checkout -f
cd /home/[USUARIO-FTP]/apps/seusite.com

Substitua o [USUARIO-FTP] pelo seu usuário de FTP.

5- Configurar localmente o repositório GIT de produção

No seu repositório GIT local, vamos adicionar o novo remote para podermos fazer o deploy.

$ git remote add deploy ssh://usuariossh@seudominio.com/~/repos/projeto.git

Claro que trocando todas as variáveis necessárias.

Depois, para fazer deploy, você precisa apenas executar o comando:

$ git push deploy master

Se tudo deu certo até aqui, ao acessar a pasta de sua aplicação no servidor, os arquivos já devem estar nela.

Obs: Caso você não tenha feito deploy via GIT, vai precisar fazer upload via FTP dos arquivos para a pasta ~/apps/seusite.com.

6- Instalar as dependências do composer

Agora precisamos instalar as dependências do composer.

$ php composer.phar install --no-dev

7- Configurações finais da aplicação

Agora, você vai fazer tudo que mais precisar fazer para configurar sua aplicação. Executar as migrations, cache de configurações e rotas e o que mais for necessário.

Estes comandos também podem ser configurados no post-receive hook para que sejam executados automaticamente a cada deploy.

8- Criar um link simbólico para a pasta public

Aqui está o real motivo de você precisar um acesso SSH a hospedagem. Precisamos dizer ao servidor que quando o usuário acessar a pasta public_html (ou www, ou qualquer outra coisa que seja), ele na verdade vai acessar ~/apps/seusite.com/public. Para isto, vamos criar um link simbólico.

$ cd ~ && ln -s ~/apps/seusite.com/public public_html

Teoricamente, neste momento seu site já deve estar funcionando corretamente (A não ser que você esteja na Locaweb, aí provavelmente vai ter que ver o próximo passo).

Extra para hospedagens na Locaweb:

Se você está na Locaweb é muito provável que ainda falte um passo para completar o seu deploy: A configuração do PHP no .htaccess.

Claro que você pode simplesmente ir na pasta ~/apps/seusite.com/public, editar o arquivo .htaccess adicionando as linhas necessárias e dormir feliz. Até você fazer o próximo deploy e ter que fazer isso manualmente de novo, pois o seu deploy vai sobreescrever o .htaccess pelo editado e seu site vai sair do ar.

Pra resolver isso, é necessário você adicionar o arquivo public/.htaccess no seu .gitignore para que ele não seja comitado. Como neste momento ele provavelmente já esteja no seus commits anteriores, é necessário executar o seguinte comando:

$ git rm --cached public/.htaccess

Fazendo isto, faça o commit e o deploy destas alterações. Seu site vai estar com erro ainda.

Mas agora é só você criar um .htaccess na pasta ~/apps/seusite.com/public, colocar o conteúdo do seu .htaccess + as configurações necessárias na Locaweb, e agora sim você pode dormir tranquilamente a noite.

Eu gosto de criar um arquivo chamado htaccess (sem o ponto) e fazer o commit dele junto para que outras pessoas que clonem o projeto possam apenas duplicar o arquivo para .htaccess.

Finalizando

Basicamente é isto, se você faz muito estas configurações e conhece o Envoy, eu criei um script com praticamente todas estas tasks automatizadas.

Se você tiver algum problema, deixa um comentário para tentarmos resolver.

Você também pode automatizar diversas outras tarefas para serem executadas depois do deploy. Alguns exemplos aqui.

E se você gosta de Laravel, confira alguns projetos open source que temos disponíveis.

Like what you read? Give Luís Dalmolin a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.