Como desenvolvi um substituto para o Heroku e cortei meus custos de plataforma em 4 vezes

Você pode pular para a seção O que isso faz se quiser ir diretamente ao negócio.

ATUALIZAÇÃO DE 2019 : CaptainDuckDuck agora é renomeado e distribuído como CapRover. Veja //github.com/caprover/caprover

A dor

Alguns anos atrás, comecei a brincar com linguagens do lado do servidor - principalmente Node JS. Depois de alguns dias de luta, consegui implantar um aplicativo Hello World no meu localhost. Foi divertido, até que decidi dar o próximo passo e implantar um dos meus projetos na internet para que as pessoas pudessem acessá-lo de uma URL pública como //www.some-awesome-web-app.com.

Nesse ponto, percebi que havia todo um novo conjunto de tecnologias que precisava aprender para implantar meu aplicativo da web. Eu precisava saber como construir ferramentas e pipelines de implantação, como o roteamento nginx e SSL funcionam e muito mais ...

Desnecessário dizer que a implantação foi uma experiência dolorosa. Percebi que gastava quase a mesma quantidade de tempo que gastava codificando, implantando código no servidor, criando, instalando dependências e mantendo o servidor. É simplesmente estúpido! Tive de passar um tempo fazendo exatamente as mesmas coisas indefinidamente.

Prefiro gastar meu tempo codificando um produto / serviço que será usado pelos usuários, não gastando horas e dias em como configurar HTTPS. Afinal, meu HTTPS não é diferente de outras centenas de milhares de sites HTTPS na Internet. Tinha que haver uma maneira mais simples.

O Salvador Temporário

Essa experiência dolorosa chegou ao fim quando me deparei com o Heroku, uma plataforma pronta para uso para implantação de aplicativos. Eu disse a mim mesmo “Ótimo! Isso é o que uma plataforma de implantação precisa ser! ” Adorei como eles abstraíram toda a complexidade por trás de uma interface fácil. Você pode apenas criar um aplicativo com um simples clique e empurrá-lo. Ele fica imediatamente disponível com um URL público. Ele está disponível gratuitamente com um pequeno custo para dormir após 30 minutos de inatividade. As coisas não poderiam estar melhores!

Estava tudo bem. Até que me envolvi com alguns projetos que exigiam uma execução contínua de 24 horas (um bot leitor). Tive que fazer upgrade para o serviço pago. Não foi tão ruim, apenas US $ 7 por mês. Mas as coisas começaram a ficar malucas depois que comecei a implantar mais e mais aplicativos. Alguns eram projetos pessoais e outros relacionados a negócios que exigiam mais do que 512 MB (limite gratuito) de RAM ou disponibilidade contínua 24 horas.

Não demorou muito até que percebi que estava pagando $ 100 + para Heroku. Simplesmente não fazia sentido. Alguns dos meus leitores bots que exigem disponibilidade 24 horas consomem apenas 128 MB de RAM. Ainda assim, tive que pagar pela RAM não utilizada também. Não consegui compartilhar RAM / CPU entre aplicativos. Fica pior com aplicativos de alto uso de RAM. Se eu tiver um aplicativo que precisa de 1 GB de RAM - tenho que pagar no mínimo $ 50 por mês.

Na esperança de encontrar negócios melhores, comecei a pesquisar AWS, Digital Ocean, Vultr e outros provedores de servidor. O preço que vi simplesmente explodiu minha mente. No Digital Ocean, por exemplo, eu poderia obter um servidor com 2 GB de RAM por US $ 20 por mês. Eu poderia colocar 2 instâncias do meu 1 GB de RAM naquela máquina por $ 20 em vez de $ 100. Eu poderia cortar meus custos em 4x !

Este preço mais barato tem um problema. Se você não sabe o que é isso, você não leu o primeiro parágrafo, The Pain . O problema de usar esses provedores de servidor barebones (ao contrário de serviços como o Heroku) é que tenho que fazer todo o trabalho que o Heroku fez para mim.

Em busca do Salvador Eterno

Eu sabia o que queria: precisava de algo que transformasse um servidor barebone (como AWS ou Digital Ocean) em uma plataforma semelhante ao Heroku. À medida que ganhava mais experiência, sabia que devia haver algum tipo de código aberto equivalente ao Heroku em algum lugar do Github. Com certeza, eu estava certo. Não existe apenas um, mas uma tonelada deles.

No entanto, depois de passar uma ou duas horas com cada um, percebi que nenhum deles era a solução verdadeiramente Heroku fácil que eu procurava. Alguns eram super básicos e tinham apenas uma camada de interface fina com pouca ou nenhuma documentação. Alguns eram extremamente avançados com toneladas de recursos que não eram usados. E ter esses recursos significava simplesmente um complicado processo de configuração e manutenção. Eu estava procurando uma solução fácil, mas eficiente.

Construindo o Salvador Eterno

Como não tive sorte em encontrar um bom substituto para o Heroku, decidi construir um. Felizmente, todas as ferramentas de que eu precisava estavam disponíveis gratuitamente - do servidor web HTTP nginx para solicitações de roteamento, ao Docker para aplicativos de contêiner e assim por diante.

Depois de alguns meses de planejamento, desenho, construção, exclusão e começando do zero, o projeto estava pronto.

Eu lancei a versão inicial do CaptainDuckDuck em outubro de 2017. Faz apenas cerca de dois meses e houve uma tonelada de feedbacks positivos. Após o primeiro lançamento, que foi principalmente para implantação de aplicativos da web, a comunidade pediu mais. Eles queriam principalmente a capacidade de implantar bancos de dados e aplicativos de um clique. Ainda esta semana, lancei a versão 0.2.1 com todos esses recursos solicitados :)

O que isso faz

Meu objetivo era permitir que um desenvolvedor de aplicativo da web típico criasse uma instância de servidor semelhante ao Heroku em menos de 10 minutos. Estou feliz em dizer que consegui!

Basta copiar e colar uma linha em seu servidor e você terá um Heroku próprio.

  • Você pode implantar aplicativos da web (nodejs, php, etc ...) com um simples comando de implantação CLI.
  • Você pode habilitar o HTTPS clicando no botão “Habilitar HTTPS”.
  • Você pode escolher entre aplicativos / bancos de dados de um clique, como WordPress, MongoDB, MySQL, Parse e outros.
  • Você pode conectar vários servidores para criar um cluster de servidores apenas inserindo os endereços IP e as credenciais dos servidores na IU da web.

CaptainDuckDuck é escrito em NodeJS. Mas não é o NodeJS com o qual os usuários finais lidam. Os principais motores que o Captain usa sob o capô são o nginx e o docker. Ambas estão entre as ferramentas prontas para produção mais confiáveis. A parte NodeJS do CaptainDuckDuck está sendo usada apenas ao implantar um aplicativo no servidor. Teoricamente, você pode eliminar o processo CaptainDuckDuck em seu servidor após a implantação e os usuários não perceberão nenhuma alteração.

Tutorial

Se você quiser um guia completo, recomendo assistir ao tutorial em vídeo e ler a página do Github. O vídeo foi feito com o primeiro lançamento para que não tenha banco de dados e aplicativos de um clique. Mas é um bom ponto de partida.