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
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
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
- secrets.DB_PORT, secrets.DB_USER, secrets.DB_PASS, secrets.DB_NAME, secrets.DB_HOST: Adicione um addon com o postgres.
Copie as credencias do banco de dados e adicione nos secrets do github:
Crie uma release com uma tag com prefixo v
:
E pronto! Seu action esta rodando para o deploy no heroku:
Quando ele ficar verdinho. Verifique o endpoint do app no heroku que vai estar rodando lisinho! :D
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.
Top comments (0)