TL;DR

O Google Cloud disponibiliza gratuitamente uma instância de máquina virtual micro-f1 no Computer Engine (IaaS), este artigo mostra as etapas iniciais para configurar e acessar um servidor linux na plataforma de cloud.

Motivação

A todo momento temos ideias malucas e naturalmente algumas acabam saindo do papel, gerando sistemas, sites e aplicativos. Na maioria das vezes, não pretendemos ter custos e as aplicações levam um certo tempo até começarem a ser rentáveis.

Atualmente, você encontra serviços de hospedagem gratuitos na internet, na maioria das vezes de má qualidade e extremamente limitados tecnologicamente. Algumas empresas como Hostinger, Heroku e Openshift fornecem soluções prontas para tecnologias como PHP, Node, Golang, entre outras. São containers pré-configurados com certas limitações de configuração de domínio ou limitações de hardware e tráfego.

Aplicações complexas

Eu sou o tipo de programador que gosta de misturar diversas tecnologias em um mesmo projeto como Golang, Memcached, Nginx, Spring Boot, Docker, entre outros. Dificilmente encontraria um serviço de container gratuito que atenda todas as minhas necessidades. Nesses casos, é necessário possuir um Virtual Private Server (VPS), uma instância virtual totalmente dedicada onde o desenvolvedor é capaz de instalar qualquer ambiente ou biblioteca necessária.

Em uma rápida busca pela internet, você verá que um servidor VPS com 1 processador e 1 GB de memória pode chegar a mais de 30 reais por mês. Muitas vezes inviável para quem gostaria de hospedar uma pequena ideia e testar um MVP.

Google Cloud

Em março de 2017, a Google oficializou a cota Always Free do Google Cloud, um plano gratuito que inclui diversos recursos, tais como:

  • 28 horas diárias na App Engine (PaaS – Plataform as a Service)
  • 5 GB de armazenamento
  • 1 Instância f1-micro no Computer Engine (IaaS – Infrastructure as a Service)
  • Além de 300 dólares de cortesia para gastar com qualquer outro produto do GCloud.

Tanto o App Engine quanto o Computer Engine podem ser utilizados para publicar suas aplicações. Porém o foco de hoje será o Computer Engine, o VPS gratuito que estávamos almejando no início do post. Que por sua vez traz muito mais liberdade para personalização do que um container da App Engine.

Criando meu primeiro servidor

Primeiramente, é necessário que você se cadastre no Google Cloud através dessa página. É um formulário de cadastro simples, talvez seja necessário possuir um cartão de crédito para finalizar o processo.

Após finalizar o cadastro, você pode acessar o painel de controle, também conhecido como Console Cloud. O painel é repleto de serviços e funcionalidades, mas o que almejamos é o Computer Engine, que pode ser encontrado no menu lateral.

 

Menu Computer Engine - Google Cloud

 

Na página do Computer Engine, clique em Criar Instância, uma nova janela será exibida e você poderá definir algumas configurações básicas da sua máquina. Defina um nome, e selecione a zona us-east1, existem 3 opções e qualquer uma delas funcionará igualmente, neste tutorial selecionei a us-east1-b. Você encontrará na lista, a zona de São Paulo, porém ela não entra na cota de gratuidade segundo a Google, você pode consultar a lista completa aqui.

Ao selecionar o tipo micro (1 CPU), verá que uma estimativa de aproximadamente $4 dólares por mês aparecerá, mas você notará também que você possuí 744 horas gratuitas por mês, que é a quantidade de horas de um mês com 31 dias (31 x 24 = 744).

Recomendo utilizar a distribuição Linux Ubuntu 16.04, que é a última versão LTS disponível. O Ubuntu proporciona uma certa facilidade para configurar e encontrar materiais de referência na internet.

 

Criação de VPS gratuito na Google Cloud

 

O Google Cloud é extremamente restrito com configurações de rede e autenticação. Diante disso é necessário habilitar o acesso HTTP e HTTPS, na qual irá liberar as portas 80 e 443 doseu servidor, outras portas podem ser liberadas através do menu Rede VPC. Também é possível habilitar chaves SSH para que você possa acessar seu servidor sem utilizar senha. Não é obrigatório, caso queira saber como configurar uma chave SSH na sua máquina, veja esse artigo do meu xará.

 

Configuração de VPS SSH / Portas - Google Cloud

 

Acessando sua máquina

Ao finalizar a criação, verá que um IP externo será disponibilizado. Caso você desligue a máquina, um novo IP será gerado, no entanto ele não irá mudar enquanto sua máquina estiver ligada. O IP interno pode ser utilizado para comunicação via rede local entre diversas instâncias criadas.

VPS - Google Cloud

 

O acesso da máquina é feito via SSH, mas não se preocupe, basta clicar em SSH (Ao lado do IP) que uma janela do navegador irá abrir com um terminal emulado. Caso tenha configurado a chave SSH do seu computador, basta acessar via terminal com o comando ssh <usuario>@<ip>, no meu caso ficaria:

ssh rodrigo@35.227.37.149

Ao acessar o terminal verá que é uma máquina Linux tradicional, onde você poderá instalar qualquer coisa com total liberdade. Abaixo irei mostrar um exemplo simples utilizando Nginx.

 

 

Executando minha primeira aplicação

Recomendo você instalar o Docker na sua máquina, ele irá facilitar a publicação e o controle de diversos serviços que serão publicados futuramente. Mas para simplificar nosso tutorial, não iremos utilizá-lo, Um guia para instalar o Docker no Ubuntu 16.04 pode ser encotrado aqui, mas não se preocupe, isso é assunto para outro post.

Para simplificar, irei instalar o Nginx direto na máquina, sem necessidade do Docker. Para isso basta executar os respectivos comandos:

sudo apt-get update
sudo apt-get install -y nginx

Pronto, basta digital o endereço IP de sua instância no navegador que verá a página de boas vindas do Nginx:

 

 

Através no Nginx você pode registrar vários domínios, incluir vários sistemas de maneira organizada. Uma abordagem aprofundada ao Nginx será feita em um post futuro. Caso queira personalizar esse exemplo básico, qualquer arquivo colocado na pasta /var/www/html, será respondido pelo servidor. Então se você já possui um site pronto, faça uma cópia para esta pasta e se divirta.

O objetivo desse post é ensinar como criar uma instância gratuita, não irei aprofundar muito no envio de aplicações, mas caso tenha interesse em algo específico, deixe seu comentário que tentarei atender o seu pedido ou sanar eventuais dúvidas.

Dicas adicionais

Caso tenha um domínio pessoal (ex: www.rodrigobrito.net), você poderá utilizar serviços gratuitos como a Cloud Flare que permite fazer o mapeamento de DNS para o servidor configurado. No entanto não é obrigatório, você pode utilizar o seu servidor para inúmeras finalidades, como rodar algoritmos de machine learning, crawlers sem precisar de um endereço público. Solte sua criatividade e aproveite seu servidor totalmente gratuito.

Você também pode configurar facilmente um certificado SSL através do Certbot, desta forma você também terá um site servido por HTTPS que é uma maneira segura de trafegar dados pela internet. Já que é de graça, vale o esforço pela segurança dos seus usuários

Utilize cache em tudo que conseguir. Não se esqueça que a máquina é extremamente limitada. Atualmente sirvo 4 sites 2 duas APIs pequenas em uma instância micro, incluindo este site. Sem a ajuda do Memcached, Redis e Nginx isso não seria possível, então use e abuse de cache.

Configure a memória SWAP da sua máquina, se os 600MB de memória forem excedidos, o sistema pode usar uma fatia do disco para impedir que seu serve pare de funcionar. Um guia de configuração pode ser encontrado nesse artigo.

Dúvidas e sugestões? Deixe um comentário.

Share on Facebook120Share on Google+0Share on LinkedIn0Tweet about this on TwitterEmail this to someone


  • Pedro Afonso

    Perfeito, começar o ano bem.

  • Muito massa! 🙂

  • Klaillton Santos

    Vou fazer uma pergunta fora do contexto mas relacionado.
    Tem como usar o Google para armazenar arquivos do site? Tipo PDF, imagem etc?

    • Rodrigo Brito

      Sim, você pode colocar seus arquivos na VM, mas o GCloud tem um serviço específico para storage também. A cota free cobre 5GB de armazenamento e 1GB de tráfego de saída.

      • Klaillton Santos

        Obrigado pela resposta, excelente artigo, muito obrigado mesmo, precisava muito de algo assim para hospedar algumas aplicações Java…
        Aproveitando, talvez você pudesse fazer um artigo sobre como usar a storage do gcloud para os arquivos do site.

  • Hiury Oliveira

    Muito legal mesmo… Vou por em prática.

  • Nathan Ramos Amorim

    Boa brother, favoritado!

  • Mecias

    Olá Rodrigo, eu fiz o cadastro, e na hora de instanciar a VM no Compute Engine foi pedido para eu ‘ativar o faturamento’ e eu fiz isso, depois disso apareceu na barra superior (Você tem R$ 1.122,47 de crédito e 365 dias restantes na sua avaliação gratuita.). Isso significa que vão começar a cobrar após 365 dias? Não vou ter aquele “always free”?

    • Rodrigo Brito

      Olá Mecias. Se você utilizar os serviços gratúitos não será cobrado. Lembrando que O GCE possui cota gratuita apenas para a região us-east1.

      • Mecias

        Muito obrigado por tirar minha dúvida.
        Outra dúvida que eu tive, os 5GB de armazenamento grátis dá pra usar instâncias o MySql tambem?

        • Rodrigo Brito

          Você pode instalar ele dentro da VM.

  • SUPER TUTORIAL

    Muito bom seu artigo amigo. Mais. Parabéns, poderia me uma duvida minha vps está dando o ip da inteface de rede ao local teria como deixa. O ip externo na interface

    • Rodrigo Brito

      Geralemten aparecem ambos na listagem, você lembrou de liberar o tráfego HTTP/HTTPS na máquina? Pode ser um dos motivos de não aparecer.

      • SUPER TUTORIAL

        Fiz a liberação dos HTTP/HTTPSHTTPS. Queria que meu ipv4 na interface pegasse o ip externo. Não oo local será que tem alguma forma sera que e nas configurações VNC REDES ?

        • Rodrigo Brito

          Não precisei de configurar nada, essas informações já apareceram para mim por padrão. Teria que dar uma consultada na documentação.

          • SUPER TUTORIAL

            É meu amigo porque eu tenho um servidor e ele funciona só com IP externo na interface de rede sem o IP externo eu não consigo ligar e se eu ligar ele com IP local só Consigo acesso local. Poferka pesquisa pra mim.