Skip to content

lexops/mern-shop

Repository files navigation

Hotmart DevOps Challenge

Introdução

Overview da aplicação

Esse repositório foi criado com base no repo aplicação mern-ecommerce. Trata-se um app MERN (MongoDB, ExpressJS, React e NodeJS). Recomendo ler a documentação original também.

Note

Foram realizadas modificações simples no código-fonte da aplicação. Como, por exemplo, subir o backend na rota /api.

Criei os arquivos Dockerfile para o frontend e backend, assim como o docker-compose. Para acelerar o processo de criação dos manifestos Kubernetes utilizei a ferramenta Kompose. Para criar um "esqueleto" Helm a partir dos manifestos utilizei o Helmify.

Overview de Infraestrutura

A infraestrutura foi erguida utilizando Terraform.

  • O módulo networking cria uma VPC contando com 4 subnets, em 2 AZs diferentes. Sendo 2 públicas com máscara /20 e duas privadas com máscara /24.
  • O módulo k8s cria um cluster EKS com node group simples com 3 instâncias t3.medium.
  • O módulo k8s-addons implementa o aws-load-balancer-controller, além do external-dns para resolução automática do nome do ALB.
  • A configuração de roteamento do tráfego para o frontend lexops.xyz e o backend lexops.xyz/api é feito através de annotations no kind Ingress e no kind Service do backend.
  • O deploy da aplicação é feito utilizando Helm via resource helm_release do Terraform.
  • O repositório conta com uma série de pre-commit hooks. Eles são utilizados para formatar e gerar automaticament as documentações do Terraform e do Helm. Além de "lintar" os workflows, evitando commits que iriam falhar.
  • A ferramenta pre-commit pode ser instalada com pip install -r requirements.txt. Certifique de também se referir a documentação oficial dos "hooks" que pretende utilizar.

Configuração das Pipelines CICD (Esteiras)

Autenticação GitHub OIDC x AWS

As esteiras obtém a permissão para gerenciar recurso na AWS através de uma role autenticada via OIDC. Por favor, leia a documentação: Github OIDC x AWS

Como subir e desligar o ambiente

Automatico

  1. Vá para Actions e clique no workflow Deploy Infra

  2. Na lado direito, clique em Run workflow. Isso abrir um pop-up.

  3. Escolhe um ambiente para subir no menu drop-down.

  4. Clique no botão verde Run workflow. ![[Pasted image 20241118131920.png]]

  5. Espere a conclusão do workflow. ![[Pasted image 20241118132213.png]]

  6. Para destruir o ambiente o processo é muito similar. Porém você deverá rodar o workflow chamado Tear Down Infra

Manual

  1. Clone o repositório:

    git clone https://github.com/lexops/mern-shop.git
  2. Navegue até o diretório do ambiente terraform que deseja subir (ex.: dev):

    cd terraform/dev
  3. Instale as dependências:

    terraform init
  4. Execute o projeto:

    terraform apply
  5. Isso irá criar um plano para subir a infraestrutura. Leia o plano gerado no terminal e aprove-o digitando yes.

  6. Para desligar o ambiente basta executar e confirmar digitando yes.

    terraform destroy

Como atualizar a versão da app

Em desenvolvimento

Automático

Para atualizar a versão da aplicação em desenvolvimento basta abrir um PR para a branch develope conseguir aprová-lo.

Important

É obrigatório submeter o PR com exatamente uma das seguintes labels : major, minor ou patch. Isso garante que automação que realiza o semver não quebre. ![[Pasted image 20241118134548.png]]

Isso rodará o workflow chamado Continous Integration, realizando o build das imagens docker e fará um commit automático mudando o valor da variável mern_shop_version no arquivo terraform/dev/terraform.tfvars.

Manual

Também é possível fazer o mesmo manualmente, alterando a variável mern_shop_version no arquivo [terraform/dev/terraform.tfvars] e rodando os comandos ensinados anteriormente: terraform init e terraform apply.

Em produção

Manual

Em produção é necessário alterar a variável mern_shop_version no arquivo [terraform/prod/terraform.tfvars] e submeter um PR a branch main. Isso rodará o workflow Create terraform plan for prod, que gera o plano do terraform e posta um comentário no PR. Caso o PR seja aprovado, o workflow Terraform Apply in prod realizar a mudança proposta.

Note

Não é possível alterar a versão de produção automaticamente por motivos de segurança.

Como modificar a infraestrutura

Para modificar a infraestrutura é necessário realizar alterações no arquivos dos diretório terraform e realizar um PR para a branch main. O processo é o similar ao da alteração da versão da app em produção. Após feito o PR, a automação criado um comentário com o plan gerado e caso seja mergeado, aplicará as mudanças.

Roadmap

Contribuições

Explicação sobre como contribuir com o projeto.

Licença

Informações sobre a licença do projeto.

About

No description, website, or topics provided.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages