Skip to content

✈️ Golang, Docker, gRPC, GraphQL, Github Actions, Microsoft Azure

Notifications You must be signed in to change notification settings

JailtonJunior94/partners

Repository files navigation

Go Challenge

Solução de cadastro de parceiros com integração ViaCep e Google GeoCode, projeto baseado no desafio do Zé Delivery.

Tecnologias Utilizadas

  1. Golang
  2. gRPC
  3. GraphQL
  4. Microsoft Azure
  5. Azure Cosmos DB
  6. Azure Container Registry
  7. Azure Kubernetes Service
  8. Github Actions
  9. Docker
  10. Terraform

Desenho da Solução

Funcionalidades

  1. Criar um parceiro
  2. Parceiros
  3. Parceiros por ID
  4. Parceiros por localização (distância por kilômetro)

Executando local com docker

  1. Executar o seguinte comando.
    docker-compose up -d --build
    

Infra as code (terraform)

  1. Iniciando o terraform. na pasta terraform executar:
    terraform init
    
  2. Aplicar a formatação
    terraform fmt
    
  3. Validação do que foi criado
    terraform validate
    
  4. Aplicar o plano (planejamento dos recursos que serão criados)
    terraform plan
    
  5. Executar a criação da infra
    terraform apply -auto-approve
    
  6. Executar a remoção da infra
    terraform destroy -auto-approve
    

Microsoft Azure

  1. Autenticação no azure (Precisamos instalar o (Azure CLI)
    az login
    
  2. Obtendo credenciais do cluster AKS
    az aks get-credentials --resource-group $RESOURCE_GROUP --name $NAME
    
  3. Build da imagem docker
    docker image build -t partnersregistry.azurecr.io/address:latest -f address/Dockerfile .
    
    docker image build -t partnersregistry.azurecr.io/partner:latest -f partner/Dockerfile .
    
  4. Autenticação no ACR
    docker login partnersregistry.azurecr.io -u $USERNAME -p $PASSWORD
    
  5. Upload da imagem no ACR
    docker image push partnersregistry.azurecr.io/address:latest
    
    docker image push partnersregistry.azurecr.io/partner:latest
    

Kubernetes

  1. Aplicar os manifestos do k8s

    kubectl apply -f .\.k8s\namespaces\ -R
    kubectl apply -f .\.k8s\deployments\ -R -n partner
    kubectl apply -f .\.k8s\services\ -R -n partner
    kubectl apply -f .\.k8s\ingress\ -R -n partner
    
  2. Ingress Controller Acessar o site nginx

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml
    

    Verificar o service nginx

    kubectl get services -n ingress-nginx
    

    Aplicar o ingress

    kubectl apply -f .\.k8s\ingress\ -R -n partner
    

    Verificar o ingress

    kubectl get ingress
    

    Verificando cert manager

    kubectl get clusterissuer -n partner
    kubectl get certificate -n partner
    kubectl describe certificate -n partner
    
  3. Utilizando url Microsoft Azure (Ingress-tls)

    $IP="MY_EXTERNAL_IP"
    
    $DNSNAME="demo-aks-ingress"
    
    $PUBLICIPID=$(az network public-ip list --query '[?ipAddress!=null]|[?contains(ipAddress, '$IP')].[id]" --output tsv)
    
    az network public-ip update --ids $PUBLICIPID --dns-name $DNSNAME
    
    az network public-ip show --ids $PUBLICIPID --query "[dnsSettings.fqdn]" --output tsv
    
  4. Verificar o quanto de memória o pod está utilizando

    kubectl top pods
    

gRPC e GraphQL

  1. gRPC

    protoc --go_out=address/pb --go_opt=paths=source_relative --go-grpc_out=address/pb --go-grpc_opt=paths=source_relative --proto_path=address/protofiles address/protofiles/*.proto
    
  2. GraphQL

    go get github.com/99designs/gqlgen
    
    go run github.com/99designs/gqlgen init
    
    go run github.com/99designs/gqlgen generate
    

About

✈️ Golang, Docker, gRPC, GraphQL, Github Actions, Microsoft Azure

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published