DEV Community

Cover image for Publicando uma api REST Go no Heroku.
Vinícius Boscardin
Vinícius Boscardin

Posted on • Updated on

Publicando uma api REST Go no Heroku.

Com nossa api pronta, testada e com a documentação em dia, chegou a hora de botar isso rodar em cloud né? Para isso vamos usar uma ferramente sensacional da SalesForce chamada Heroku.
Heroku é uma plataforma de nuvem como serviço que suporta várias linguagens de programação.

Configurando nossa API

Primeiro passo é nós configurar o arquivo docker para rodar no container do heroku. Vamos lá!
Na raiz do projeto crie um arquivo chamado Dockerfile. No arquivo vamos configurar um multstage build para deixar nossa imagem com somente os recursos necessários para rodar a aplicação.

FROM golang:latest AS builder
ADD . /go/api
WORKDIR /go/api

RUN go install github.com/swaggo/swag/cmd/swag@latest
RUN rm -rf deploy
RUN mkdir deploy
RUN swag init -d adapter/http --parseDependency --parseInternal --parseDepth 2 -o adapter/http/docs
RUN go mod tidy
RUN CGO_ENABLED=0 go build -o goapp adapter/http/main.go
RUN mv goapp ./deploy/goapp
RUN mv adapter/http/docs ./deploy/docs
RUN mv config.json ./deploy/config.json
RUN mv database ./deploy/database


FROM scratch AS production
COPY --from=builder /go/api/deploy /api/

WORKDIR /api
ENTRYPOINT  ./goapp
Enter fullscreen mode Exit fullscreen mode

Com o Dockerfile pronto vamos configurar nosso deploy no github actions no arquivo .github/workflows/deploy.yaml.

name: Deploy to heroku app

on:
  create:
    tags:
      - v*

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Config file access
        run: |
          rm -rf config.json
          touch config.json 
          json='{"database": {"url": "://$DB_USER:$DB_PASS@$DB_HOST:$DB_PORT/$DB_NAME"},"server": {"port": ""}}'
          echo "$json" > config.json
          sed -i -e 's/$DB_PORT/'${{ secrets.DB_PORT }}'/g' config.json
          sed -i -e 's/$DB_USER/'${{ secrets.DB_USER }}'/g' config.json
          sed -i -e 's/$DB_PASS/'${{ secrets.DB_PASS }}'/g' config.json
          sed -i -e 's/$DB_NAME/'${{ secrets.DB_NAME }}'/g' config.json
          sed -i -e 's/$DB_HOST/'${{ secrets.DB_HOST }}'/g' config.json
          cat config.json

      - uses: akhileshns/heroku-deploy@v3.10.9
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: "clean-go"
          heroku_email: ${{secrets.HEROKU_MAIL}}
          usedocker: true
Enter fullscreen mode Exit fullscreen mode

Esse arquivo deploy.yaml precisa de algumas variaveis de ambiente para funcionar corretamente.

  • secrets.HEROKU_MAIL: Seu e-mail da conta heroku
  • secrets.HEROKU_API_KEY: Va nas configurações da sua conta

Image description

Image description

  • secrets.DB_PORT, secrets.DB_USER, secrets.DB_PASS, secrets.DB_NAME, secrets.DB_HOST: Adicione um addon com o postgres.

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Copie as credencias do banco de dados e adicione nos secrets do github:

Image description

Image description

Image description

Crie uma release com uma tag com prefixo v:

Image description

E pronto! Seu action esta rodando para o deploy no heroku:

Image description

Image description

Quando ele ficar verdinho. Verifique o endpoint do app no heroku que vai estar rodando lisinho! :D

Image description

Sua vez

Vai na fé! Acredito totalmente em você, independente do seu nível de conhecimento técnico, você vai criar a melhor api em GO.
Se você se deparar com problemas que não consegue resolver, sinta-se à vontade para entrar em contato. Vamos resolver isso juntos.

Como eu rodo os testes no Github Actions?

Próximo post vamos configurar e rodar os testes no actions integrando com a ferramenta do CodeCov.

Discussion (0)