Criando um servidor de homologação para aplicações Laravel usando o Heroku
Tags: laravel, github, heroku, devops
Published: 2020-06-01 22:03:16

<p align="center">
  <img src="https://i.ibb.co/LZz77hF/1-jr-Vi4-Zt-H-Ld-SUj-BS8j-BWvg.jpg" alt="Heroku + Laravel + Github" border="0"  height="300" ></p>

Muita das vezes precisamos testar nossas aplicações em um servidor antes de lançarmos em produção, mas nem todos tem familiaridade com deploy ou possuem um servidor de homologação (testes). Dessa forma, o Heroku pode se tornar uma alternativa, pois é fácil de usar (abstrai muita coisa) e o melhor de tudo, é free! :tada: 

Este artigo é para mostrar o passo a passo de como podemos publicar nossos projetos em Laravel utilizando o Heroku e criar um servidor de homologação simples com deploy automatizado usando o [Github](https://github.com/). Se você não conhece o Heroku, pode saber mais sobre ele clicando [aqui](https://www.heroku.com/).

## Instalando o Heroku

Para esse tutorial vou partir da premissa que você já está com o seu projeto no GitHub e com uma conta criada no Heroku (só acessar [https://www.heroku.com](https://www.heroku.com/))

<p align="center">
  <img src="https://i.ibb.co/TrTc7dy/dash-heroku.png" alt="Heroku DashBoard" border="0"  height="300" ></p>

Depois da conta criada, você pode instalar o Heroku CLI acessando [https://devcenter.heroku.com/articles/heroku-cli](https://devcenter.heroku.com/articles/heroku-cli) . 
No meu caso que uso Linux, instalei via npm rodando o seguinte comando: 
```npm install -g heroku```
Se foi instalado com sucesso você irar conseguir ver a versão rodando o comando: 
```heroku -v``` 

## Configurando o Heroku

Dentro da raiz da sua aplicação Laravel, vamos criar um arquivo chamado "Procfile" (conforme a figura abaixo), nele vamos informar o "perfil" do nosso servidor, que no meu caso vai ser o apache2 (Mas você pode usar o nginx por exemplo). 

<p align="center">
  <img src="https://i.ibb.co/1vKfbm5/create-file-terminal.png" alt="Create File Procfile" border="0"  height="200" ></p>

No arquivo vamos escrever a seguinte linha:
```web: vendor/bin/heroku-php-apache2 public/```

### Criando um novo app no Heroku

Agora vamos criar um app no Heroku rodando o seguinte comando:  ```heroku create```

<p align="center">
  <img src="https://i.ibb.co/JjNSQTp/heroku-create.png" alt="Create File Procfile" border="0"   ></p>
Você deve ter um resultado parecido com a imagem acima. 

Se você acessar [https://dashboard.heroku.com/apps](https://dashboard.heroku.com/apps) irá ver que a aplicação que acabamos de criar está listada. :raised_hands:


### Subindo o projeto para o servidor
Antes vamos configurar um script para quando subirmos a nossa aplicação ele dar a permissão na pasta `public/` , em seu  `composer.json` na sessão de scripts adicione o seguinte trecho: 
``` "post-install-cmd": [
     "php artisan clear-compiled",
     "chmod -R 775 public/"
 ]```

Se você rodar o comando  ```git remote -v``` irá ver que foi criado um novo remote além do `origin` com o nome `heroku`, é ele que iremos utilizar para dar push em nosso código para disponibilizar no servidor com:
```git push heroku master```

Pela aba "Overview" em seu dashboard do Heroku, irá ver que sua aplicação já está disponível: 
 
<p align="center">
  <img src="https://i.ibb.co/jfqdQsB/heroku-on.png" alt="Aplicação Disponível" border="0"   ></p>

### Configurando as variáveis do .env 

Para configurar as variáveis do nosso .env, é só acessar a aba "Settings" e ir até  "Config Vars". Adicione a KEY e o valor correspondente conforme a imagem:
<p align="center">
  <img src="https://i.ibb.co/KK37NJk/env-heroku.png" alt="Variáveis no Heroku" border="0"></p>

### Criando o banco de dados

Pelo dashboard só que agora na aba `Resources` em `Add-ons` pesquise por `postgres` (você pode escolher o banco de sua preferência) e selecione o Heroku Postgres: 

<p align="center">
  <img src="https://i.ibb.co/0XbcsHM/postgres.png" alt="Banco no Heroku" border="0"></p>

Selecione o plano `Hobby Dev - Free`.

Agora, no terminal de sua aplicação vamos obter as credenciais do Banco de Dados que acabamos de criar executando: 

```heroku pg:credentials:url``` 

Será exibida as credencias para conectar ao banco, o próximo passo é adicionar elas assim como fizemos para as demais do `.env` como já foi exemplificado. 

Agora podemos rodar nossas `migrations` e `seeders` executando: 
```heroku run php artisan migrate --seed```.

## Configurando o Deploy automático a partir da master

Com nossa aplicação rodando e tudo funcionando, vamos configurar para que sempre que houver alteração na branch `master` o Heroku faça o deploy automático. 

Esse passo é bem simples, na aba de `deploy` vamos selecionar o `Deployment method` GitHub. Irá pedir para você fazer a autenticação na sua conta e em seguida selecionar o repositório. Pronto, só isso e está tudo configurado para o nosso servidor de testes atualizar sozinho quando a `master` sofrer alterações. 

<p align="center">
  <img src="https://i.ibb.co/JHKg7wd/deployautomatic.png" alt="Create File Procfile" border="0"  height="200" ></p>

Caso queira desabilitar essa opção para fazer o deploy de forma manual como fizemos na primeira vez para subir o código, na mesma sessão em `App connected to GitHub` clique em `disconnect`.