Skip to content

Instantly share code, notes, and snippets.

@nailton
Forked from 3runoDesign/Procfile
Created January 3, 2016 16:52
Show Gist options
  • Save nailton/a1f75479206f6ffc5844 to your computer and use it in GitHub Desktop.
Save nailton/a1f75479206f6ffc5844 to your computer and use it in GitHub Desktop.
Deploy Heroku [Laravel 5.1]

#Deploy Heroku - Laravel 5.1 Tive alguns problemas ao tentar fazer o deploy ao Heroku, para mais detalhes vejam esse post Deployment broken when upgrading to Laravel 5.1.

Criando projeto Laravel

Caso você esteja criando um projeto do zero utilize via Laravel Installer:

laravel new nome_app

ou via Composer:

composer create-project laravel/laravel --prefer-dist

##Iniciar o git Vamos da um git init.

##Criar os arquivos Os arquivos .buildpacks e Procfile são arquivos específicos do Heroku, são eles que fazem a setting do server. Já o app_boot.sh é um shell que iremos rodar quando for montado o server. Vamos criar os arquivos com o comando touch na raiz do projeto:

touch .buildpacks Procfile app_boot.sh

##Criar app no Heroku

heroku create name_app

##Configurando os arquivos Agora vamos configurar o nosso server. Primeiramente a nossa BuildPacks usando a heroku-buildpack-multi, assim vamos especificar que tipo de servidor queremos montar (PHP e NodeJS).

heroku buildpacks:set https://github.com/heroku/heroku-buildpack-multi.git

Agora que o nosso servidor ja sabe que tem que ler o arquivo .buildpacks que criamos, vamos especificar os builds que queremos:

curl -s https://gist.githubusercontent.com/3runoDesign/7c4c8652c7c4543c9a3b/raw/5bb673135c6498abf8512b623e3d362efcfbd59c/buildpacks > .buildpacks

Como falei do arquivo app_boot.sh que é um shell que iremos rodar quando for montado o server. Nele vamos rodar o clear-compiled e o optimize do artisan e vamos fazer o Boot up na pasta public/.

curl -s https://gist.githubusercontent.com/3runoDesign/7c4c8652c7c4543c9a3b/raw/bdc5e201a7949c6d90c53ee2fd12dd164a173247/app_boot.sh > app_boot.sh

Agora vamos configurar o Procfile, com eles vamos "falar" em que momento vamos rodar o app_boot.sh e outros worker, para mais detalhes:

curl -s https://gist.githubusercontent.com/3runoDesign/7c4c8652c7c4543c9a3b/raw/2dec75e90b8d8c9ac165b412ec7d2b18861136c9/Procfile > Procfile

Algo extremamente importante é configurar o arquivo composer.json.

...
"scripts": {
  "post-install-cmd": [
    "php artisan clear-compiled"
  ],
  "post-update-cmd": [
    "php artisan clear-compiled"
  ],

Tanto no post-install-cmd quanto em post-update-cmd deixe somente o comando php artisan clear-compiled.

##Adicionar as variáveis de ambiente

heroku config:set APP_ENV=production
heroku config:set APP_KEY=suaKeyAqui
heroku config:set APP_DEBUG=false

##E por fim...

git add .
git commit -m "Start"
git push heroku master #&& git push origin master

#Segundo [Banco de dados] Adicionar ClearDB (MySQL)

heroku addons:create cleardb:ignite

Na documentação do Heroku ele sugere usar algo como. Veja aqui

$url = parse_url(getenv("CLEARDB_DATABASE_URL"));

$host = $url["host"];
$username = $url["user"];
$password = $url["pass"];
$database = substr($url["path"], 1);
'mysql' => array(
        'driver'    => 'mysql',
        'host'      => $host,
        'database'  => $database,
        'username'  => $username,
        'password'  => $password,
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

Só que eu particulamente não gosto, então faço assim. Ainda não conseguir bolar uma melhor forma mas é muito simples:

Ao adicionar o ClearDB ele criar por padrão na variável de ambiente chamada CLEARDB_DATABASE_URL, para você ver a seu valor:

heroku config:get CLEARDB_DATABASE_URL

Veja como é composta a url: mysql://{USERNAME}:{PASSWORD}@{HOST}/{DATABASE}?reconnect=true;

Entendido isso basta configurar suas variáveis:

heroku config:set DB_HOST=HOST
heroku config:set DB_DATABASE=DATABASE
heroku config:set DB_USERNAME=USERNAME
heroku config:set DB_PASSWORD=PASSWORD
#!/bin/bash
# Artisan commands
/app/.heroku/php/bin/php /app/artisan clear-compiled
/app/.heroku/php/bin/php /app/artisan optimize
# Boot up!
vendor/bin/heroku-php-apache2 public/
https://github.com/heroku/heroku-buildpack-nodejs
https://github.com/heroku/heroku-buildpack-php
web: sh app_boot.sh
worker: php artisan queue:listen
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment