Heroku é um PaaS, Plataforma como serviço. Isso significa que você pode fazer deploy de seus serviços sem se preocupar (ao menos inicialmente) com configs de hardware e sistema operacional.

Você só precisa se focar na aplicação e nos componentes de infra estrutura necessários (ex: banco de dados, cache, log, filas, etc)

Não é necessário conhecimento em docker

Criando uma conta

O processo é bem simples. Antigamente precisava de cartão de crédito, hj só precisa de nome/sobrenome/email/empresa e confirmar o email.

O plano free é limitado, mas ao mesmo tempo poderoso: ele permite criar quantas apps forem necessário, mas só uma pode rodar 24x7. O default é a aplicação desligar depois de 30 min sem acesso.

Criando uma aplicação, fazendo deploy

Para criar uma nova app, a única informação requerida é a região (US or EU). O nome da aplicação é opcional (se não informar o heroku gera um nome aleatório).

Sobre linguagens, o Heroku suporta Ruby, Python, Node, Php, Go, Java (e outras linguagens da JVM como scala / clojure / groovy). Mas é possível usar buildpacks de terceiros para outras linguagens, como elixir, meteor, etc

Fazendo deploy

É possível fazer deploy no heroku de várias formas, sendo as mais simples usar a ferramenta do heroku (heroku-cli), usar git ou dropbox.

Por exemplo, para fazer deploy de uma aplicação de exemplo em node usando terminal:

# autenticar no heroku
heroku login
#baixando código de exemplo e entrando na pasta
git clone https://github.com/heroku/sushi-inc.git
cd sushi-inc
# criando vinculo git com heroku
heroku git:remote -a nomeDaAppCriada
# fazendo deploy usando git push
git push heroku

Agora você pode acessar a aplicação usando http://nomeDaAppCriada.herokuapp.com

PS: caso tenha problema para executar a app, mude o package.json com:

...
"scripts": {
    "start" : "node index.js"
}
...

Pontos importantes:

  • Heroku faz cache do framework de execução (ex: versão do node / java). Por exemplo, para mudar a versão do node a ser usado é só mudar a sessão engines no package.json.

  • Ele tbm faz cache das dependências. Se o descritor não for alterado ele não precisa baixar as dependências novamente (ex: node_modules, bower_components)

  • Heroku já fornece https. Você só precisa alterar sua app para forçar esse uso (se necessário)

Add Ons

Ok, mas como estender minha aplicação no heroku? Bom, o Heroku tem parceria com ~150 serviços. Eles podem ser adicionados na aba resources dentro da app desejada.

Importante salientar que o Heroku é criador do padrão The Twelve-Factor, logo, os addons estarão disponíveis através de variáveis de ambiente. Por exemplo, para usar um banco da mLabs a app precisa pegar a URL da variável MONGOLAB_URI.

Você vai precisar informar o cartão de crédito para adicionar addons (mesmo escolhendo os gratuítos).

Próximos passos

  • Você pode fazer alguns deploys no Heroku e desfazer pelo painel de admin. É muito prático fazer um rollback;

  • Pipelines: você pode ter a versão dev/test/prod de uma app conectadas, e só precisa fazer deploy de código para o primeiro passo. As promoções de ambiente podem ser feita pelo painel admin do heroku;

  • Estudar o Heroku cli, para ver logs, conectar na app por ssh, etc;

  • Disponibilizar uma app com o botão do Heroku. O Rocket.Chat oferece essa feature. A wiki q eu criei de exemplo tbm;

  • Fazer deploy de suas pet apps para lá. Eu tenho umas 20 apps lá, para busca de carros / imóveis (Screen Scraper), bot, wiki, controle de tasks, leitor do twitter, fake apis (para teste), etc

  • Usar Heroku on premise com o dokku