{"id":37041974,"url":"https://github.com/luizcarlosfaria/eshop-cloudnative","last_synced_at":"2026-01-14T04:57:26.013Z","repository":{"id":41536513,"uuid":"493928417","full_name":"luizcarlosfaria/eshop-cloudnative","owner":"luizcarlosfaria","description":"Loja Virtual feita com .NET seguindo Cloud Native (Containers, Microservice, DevOps, Continuous Delivery), Cloud Agnostic, Hexagonal Architecture, Event Driven Architecture. Desenvolvido com .NET 6, usando Visual Studio e Docker, pronto para ser executado no kubernetes em produção.","archived":false,"fork":false,"pushed_at":"2024-01-30T18:22:33.000Z","size":4906,"stargazers_count":66,"open_issues_count":36,"forks_count":9,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-08-01T01:32:30.242Z","etag":null,"topics":["cloudnative","continuous-delivery","devops","microservices"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luizcarlosfaria.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-05-19T05:09:31.000Z","updated_at":"2025-06-05T14:37:15.000Z","dependencies_parsed_at":"2024-01-30T20:00:25.012Z","dependency_job_id":null,"html_url":"https://github.com/luizcarlosfaria/eshop-cloudnative","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/luizcarlosfaria/eshop-cloudnative","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizcarlosfaria%2Feshop-cloudnative","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizcarlosfaria%2Feshop-cloudnative/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizcarlosfaria%2Feshop-cloudnative/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizcarlosfaria%2Feshop-cloudnative/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luizcarlosfaria","download_url":"https://codeload.github.com/luizcarlosfaria/eshop-cloudnative/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizcarlosfaria%2Feshop-cloudnative/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28409963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudnative","continuous-delivery","devops","microservices"],"created_at":"2026-01-14T04:57:25.504Z","updated_at":"2026-01-14T04:57:26.005Z","avatar_url":"https://github.com/luizcarlosfaria.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://cloudnative.net.br/?utm_source=github\u0026utm_medium=image\u0026utm_campaign=eshop-cloudnative\"\u003e\n   \u003cimg src=\"https://github.com/luizcarlosfaria/eshop-cloudnative/raw/main/docs/assets/eshop.webp\" alt=\"eShop logo\" title=\"eShopOnContainers\" align=\"right\" height=\"200\" /\u003e\n\u003c/a\u003e\n\n# e-Shop | Cloud Native \n## Cloud Native | Cloud Agnostic | Hexagonal Architecture | Event Driven Architecture\n\nLoja Virtual feita com .NET seguindo Cloud Native (Containers, Microservice, DevOps, Continuous Delivery), Cloud Agnostic, Hexagonal Architecture, Event Driven Architecture. Desenvolvido com .NET 6, usando Visual Studio e Docker, pronto para ser executado no kubernetes em produção.\n\n## Baixando e Executando o projeto\n\nEsse projeto foi pensado em endereçar problemas reais de um cenário crítico de microsserviços. Assim uma das necessidades em um projeto dessa natureza é poder controlar versões de cada microsserviço de forma independente. Permitindo que os times trabalhem de forma independente. Dada a forma como o git trabalha, gitmodules é uma das estratégias para conseguir o mínimo de sanidade nessa tarefa.\n\n🎯 **Esse projeto usa git modules, portanto não ignore o parâmetro `--recursive` na hora do clone.**\n\n```\ngit clone https://github.com/luizcarlosfaria/eshop-cloudnative.git --recursive\ncd ./eshop-cloudnative\n```\n\n### Subindo Serviços de Infra\n\n### Opção 1 - Serviços mínimos\n```\n./_run-infra-light.sh\n\n```\n\nNesta opção os seguintes serviços **não** são criados:\n\n* OpenSearch (Similar ao ElasticSearch)\n* OpenSearch Dashboard  (Similar ao Kibana)\n* LogStash\n\n### Opção 2 - Serviços mínimos + Enterprise Application Log\n\nno WSL 2 execute\n\n```\nsysctl -w vm.max_map_count=262144\n```\n\n```\n./_run-infra-full.sh\n```\n\nAgora basta abrir o visual studio e rodar a aplicação pelo docker compose.\n\nOu executar `docker compose up --build`\n\nAgora basta acessar http://localhost:90/ no seu navegador.\n\n\n## 100% Cloud Agnostic\n\nNenhuma dependência de NENHUM CLOUD PROVIDER! \n\nTodas os serviços, aplicações e dependências podem ser instaladas em qualquer Cloud Provider, nosso setup tem única e exclusiva dependência: o Kubernetes.\nAs instalações podem ser realizadas em qualquer cloud provider, como **Azure**, **AWS**, **GCP** em soluções como **AKS**, **EKS** ou **GKE** ou ainda em serviços como **Hetzner**, **Scaleway** e **Digital Ocean** ou mesmo em **máquinas virtuais** ou **bare metal** na nuvem ou On-Premise.\n\nUm dos objetivos desse projeto é demonstrar como podemos não depender dos Cloud Providers para criar soluções incríveis.\n\n## Sub Modules\n\n### [Infra](../../../eshop-cloudnative-infra) | Infraestrutura de Produção\n\n### [Catalog](../../../eshop-cloudnative-catalog) | Produtos, Categorias, Menu, Imagens\n\n### [Profile](../../../eshop-cloudnative-profile) | Endereço e Dados Pessoais\n\n### [Architecture](../../../eshop-cloudnative-architecture) | Infraestrutura base que molda a aplicação.\n\n## Foco da Solução\n\n* Backend\n\n* Arquitetura\n\n* Containers\n\n* Microsserviços\n\n* Mensageria\n\n* Event Driven Architecture\n \n* Agnostic Service\n\n* Hexagonal Architecture\n\n# Entendendo a stack\n\n```mermaid\nsequenceDiagram\n    autonumber\n    actor Usuario\n    participant VarnishCache\n    participant WebApp\n    participant Kong\n    participant WebAPI\n    participant Postgres\n    participant Minio\n    \n    Usuario-\u003e\u003eVarnishCache: Exibir home\n    activate VarnishCache\n    VarnishCache-\u003e\u003eWebApp: GET /\n    activate WebApp\n    WebApp-\u003e\u003eKong:  GET /catalog/Category/HomeCatalog\n    activate Kong\n    Kong-\u003e\u003eWebAPI: GET /Category/HomeCatalog\n    activate WebAPI\n    WebAPI-\u003e\u003ePostgres: Select * from...\n    activate Postgres\n    Note over VarnishCache,Postgres: Obtenção de dados\n    Postgres--\u003e\u003eWebAPI: {dados}\n    deactivate Postgres\n    WebAPI--\u003e\u003eKong: Response...\n    deactivate WebAPI\n    Kong--\u003e\u003eWebApp: Response...\n    deactivate Kong\n    WebApp--\u003e\u003eVarnishCache: Response...    \n    deactivate WebApp\n    VarnishCache--\u003e\u003eUsuario: Response... \n    deactivate VarnishCache\n    \n\n    Usuario-\u003e\u003eVarnishCache: Exibir imagem\n    activate VarnishCache\n    VarnishCache-\u003e\u003eKong: GET /minio/catalog-images/67001dd3-b0e1-4ed2-80f7-8cdf9454f556\n    activate Kong\n    Kong-\u003e\u003eMinio:  GET /catalog-images/67001dd3-b0e1-4ed2-80f7-8cdf9454f556\n    activate Minio\n    Note over VarnishCache,Minio: Obtenção de Imagens\n    Minio--\u003e\u003eKong: {stream}\n    deactivate Minio\n    Kong--\u003e\u003eVarnishCache: Response...   \n    deactivate Kong \n    VarnishCache--\u003e\u003eUsuario: Response...  \n    deactivate VarnishCache\n```\n\nO Varnish tem o papel de simular Akamai e qualquer outro cache service. \n\nA web app é nossa aplicação web. Nesse momento ela ainda é uma aplicação ASP.NET Core MVC, com front-end desenvolvido com Tailwind CSS e VueJS.\n\nEntre a aplicação web e a WebAPI temos o Kong como nosso API Gateway. \n\nTodas as API's só aceitam requisições oriundas do Kong. Assim garantimos autenticação (e não autorização), visando conseguir determinar com clareza, quais serviços estão consumindo quais API's. No banco de dados temos o Postgres, implantado no Kubernetes em um cluster totalizando 1 master e 2 replicas. \n\nO minio é nosso Object Storage, ele, assim como o cluster RabbitMQ e o cluster Postgres estão usando Longhorn para block storage com volumes replicados em todo o cluster.\n\n# Entendendo os serviços\n\n\u003cimg src=\"https://raw.githubusercontent.com/luizcarlosfaria/eshop-cloudnative/main/docs/assets/DiagramaVisio02.png\" alt=\"eShop logo\" title=\"eShopOnContainers\"  /\u003e\n\n\n# Projeto final Cloud Native .NET\n\nEsse projeto tem a missão de ser o projeto final do Cloud Native .NET. \n\nEle aglutina diversas jornadas de entendimento do desenho de uma arquitetura. Com ele podemos falar de agnóstic services, podemos falar de mensageria, de event driven architecture, de injeção de dependência, de exception management, de alm, gerência de configuração, RabbitMQ, Redis, Logging, Métricas, API Gateway e muito mais.\n\nCaso queira participar e ver aulas sobre esse projeto, visite [cloudnative.net.br](https://cloudnative.net.br/?utm_source=github\u0026utm_medium=markdown\u0026utm_campaign=eshop-cloudnative) e descubra como se tornar aluno.\n\n# Quer entender as decisões técnicas desse projeto?\n\nEsse projeto conta com um **Decision Log** contendo todas as grandes decisões de arquitetura, design e estratégia de codificação do projeto. \n\n\u003ca href=\"https://github.com/users/luizcarlosfaria/projects/2/views/2\"\u003e\n   \u003cimg src=\"https://github.com/luizcarlosfaria/eshop-cloudnative/raw/main/docs/assets/EShop-Cloud-Native-Decision-Log.png\" alt=\"eShop logo\" title=\"eShopOnContainers\" align=\"center\" /\u003e\n\u003c/a\u003e\n\n 🚨 *Clique na imagem acima para ver ler sobre as decisões técncias do projeto*\n\n\nParte importante é demonstrar como conseguimos endereçar cada assunto do nosso board no código.\n\n# Ação e reação \n\nOs eventos que produzem mudanças na arquitetura, no design, na infraestrutura. \n\nUm guia sobre a história do projeto.\n\n\u003ca href=\"https://github.com/luizcarlosfaria/eshop-cloudnative/blob/main/HISTORY.md\"\u003e\n   \u003cimg src=\"https://github.com/luizcarlosfaria/eshop-cloudnative/raw/main/docs/assets/EShop-Cloud-Native-AcaoReacao03.png\" alt=\"eShop logo\" title=\"eShopOnContainers\" align=\"center\" /\u003e\n\u003c/a\u003e\n\n🚨  *Clique na imagem acima para ver toda a história do projeto*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizcarlosfaria%2Feshop-cloudnative","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluizcarlosfaria%2Feshop-cloudnative","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizcarlosfaria%2Feshop-cloudnative/lists"}