Voltar ao blog

Implantando uma aplicação web Go usando o Nginx no Ubuntu 22.04

Implantando uma aplicação web Go usando o Nginx no Ubuntu 22.04

Go é uma linguagem de programação de código aberto e uso geral. Foi inspirada pela produtividade do Python ao mesmo tempo em que oferece a capacidade do C. Foi originalmente desenvolvida pelo Google para lidar com problemas que eles enfrentavam em sua base de código (complexidade de código e longo tempo de compilação). Como qualquer outra linguagem de programação moderna, o Go é adequado para todos os tipos de propósitos. Por exemplo, pode ser utilizado para desenvolvimento web, scripts de linha de comando, aplicativos de servidor de rede, desenvolvimento front-end, etc.

Neste guia, nós vamos orientá-lo pelas etapas de implantação de uma aplicação web simples em Go no Ubuntu 22.04 LTS. Também implementaremos um proxy reverso Nginx para lidar com a carga de tráfego.

Pré-requisitos

Para realizar as etapas demonstradas neste guia, você precisará dos seguintes componentes pré-configurados:

Se o serviço deve ser acessível por um nome de domínio, você deve ter um FQDN apontado para o servidor. Nesse caso, é recomendável proteger o Nginx com SSL. Você pode aprender mais sobre proteger o Nginx com Let’s Encrypt no Ubuntu a partir do nosso tutorial.

Passo 1 – Criando um App Web em Go

Vamos construir um aplicativo web simples em Go que imprimirá “Hello World” na tela ao acessar o domínio. Além disso, o aplicativo saudará o usuário ao acessar <domain>/greet/<username>.

Comece criando um novo projeto sob $GOPATH. Crie o diretório do projeto:

Go Web Application Make Dir

Altere o diretório atual:

Go Web Application Change Dir

Em seguida, inicie um projeto:

Go Web Application Init Project

Em seguida, crie main.go que servirá como a raiz da nossa aplicação Go. Ele hospedará o código-fonte do nosso aplicativo web:

Abra o projeto no VS Code:

Cole o seguinte código no arquivo main.go:

Go Web Application Main Go

Vamos fazer uma rápida análise do programa Go que acabamos de criar:

  • O termo package main serve como o ponto de entrada para a nossa aplicação. Ele também instrui o compilador Go a compilar o arquivo como um executável em vez de uma biblioteca compartilhada.
  • A instrução import importa todos os módulos adicionais necessários para o funcionamento do programa. Aqui, importamos os pacotes fmt (para imprimir textos) e net/http (para aplicações de servidor web).
  • Usando a função http.HandleFunc, estabelecemos duas rotas:
    • A primeira rota / serve como a rota pai dentro de func main.
    • A segunda rota /greet/ aceita um parâmetro de URL (uma string, neste caso). A string é então exibida acompanhada pela mensagem de saudação.
      • URL Path é usado para armazenar o valor após /greet/. O valor é então passado como o name do parâmetro de URL.
    • A http.ListenAndServe inicia o servidor web. Aqui, ela está escutando na porta 9990.

Agora que o nosso programa está pronto, compile o arquivo em um executável:

O compilador Go criará um executável com o mesmo nome do arquivo. Confira a saída:

Go Web Application ls -lh

Passo 2 – Configurando um Arquivo de Unidade do systemd para Execução em Segundo Plano

Até agora, se o usuário atual fizer logout do sistema, o aplicativo web Go parará de funcionar. Isso é um design ruim para um servidor web. Para resolver esse problema, criaremos um arquivo de unidade do systemd para mantê-lo rodando em segundo plano, mesmo quando o usuário fizer logout do servidor. Isso deixa a configuração um passo mais próxima de uma implantação de nível de produção.

Crie um arquivo systemd dedicado goweb.service sob /lib/systemd/system:

Adicione o seguinte trecho no arquivo de unidade:

go web service

Aqui,

  • A variável ExecStart indica o ponto de entrada para o serviço através do executável principal localizado no diretório do nosso projeto ( $GOPATH/go-web). Observe que, em vez de mencionar $GOPATH, digitamos o caminho completo para o arquivo executável. Isso ocorre porque a $GOPATH variável só é visível para o usuário.
  • A variável Restart diz ao systemd o que fazer no caso de o programa parar de funcionar. O valor always diz ao systemd para reiniciar o programa toda vez que ele parar de ser executado.
  • A variável RestartSec diz ao systemd para aguardar uma quantidade específica de tempo antes de tentar reiniciar o programa. Aqui, o valor está definido como 5s (5 segundos).
  • A instrução WantedBy=multi-user.target especifica em qual estado o systemd ativará o serviço.

Salve o arquivo e feche o editor. Inicie o serviço:

go web start

Verifique se o serviço está ativo e em execução:

go web status

Como a saída sugere, o aplicativo está ativo e em execução. Agora estamos prontos para usar o Nginx como proxy reverso.

Passo 3 – Configurando o Nginx como um Proxy Reverso

Agora, criaremos um bloco de servidor para o Nginx agir como um proxy reverso. O aplicativo web será exposto à internet através do proxy reverso (para desempenho e segurança adicionais).

Altere o diretório ativo atual para sites-available:

cd

Agora, crie um arquivo com o nome de domínio que você deseja expor seu aplicativo. Para demonstração, usaremos example.com:

 

Insira o seguinte código no arquivo de bloco:

example.com

Aqui, estamos usando proxy_pass para servir o aplicativo web Go no endereço IP do servidor (localhost) na porta 9990.

Para habilitar o bloco do Nginx, crie um symlink (também conhecido como link simbólico) do arquivo para a pasta sites-enabled:

create sym

Recarregue a configuração do Nginx para que as alterações entrem em vigor:

reload nginx

Passo 4 – Verificação

Se tudo ocorreu como esperado, então a aplicação web deve agora estar acessível em localhost:9990 e o domínio que configuramos. Abra a URL em um navegador web:

Hello World

Como esperado, a aplicação está exibindo “Hello World” na tela. Esse é o papel da rota primária. Em seguida, teste a segunda rota visitando a seguinte URL:

Hello Cloud

A aplicação está retornando com sucesso a mensagem simples de saudação com o nome a partir do parâmetro recebido da URL.

Voilà! Implantamos com sucesso uma aplicação web Go em nosso servidor local!

Considerações Finais

Neste guia, demonstramos a implantação de uma aplicação web Go simples com a ajuda das bibliotecas padrão do Go. Também implantamos um proxy reverso usando o Nginx. Embora a demonstração tenha sido realizada em um servidor local, para um servidor público, é altamente recomendável implementar um certificado SSL para uma exposição segura à internet. Para mais programação em Go, você pode conferir nosso tutorial sobre Compilando e Instalando Programas Go.

Boa computação!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.