{"id":27950683,"url":"https://github.com/rodrigo-kelven/project_load_balancer","last_synced_at":"2026-04-11T06:03:15.320Z","repository":{"id":276003792,"uuid":"927894514","full_name":"Rodrigo-Kelven/Project_Load_Balancer","owner":"Rodrigo-Kelven","description":"Este projeto simula um sistema de balanceamento de carga para múltiplas instâncias de APIs. O NGINX é configurado para distribuir as requisições de forma equilibrada entre os containers do Docker. As APIs são implementadas com FastAPI, um framework de alto desempenho para a construção de APIs.","archived":false,"fork":false,"pushed_at":"2025-04-13T01:25:41.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T16:15:19.580Z","etag":null,"topics":["docker","docker-compose","fastapi","nginx","python3"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rodrigo-Kelven.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-05T18:07:12.000Z","updated_at":"2025-04-13T01:26:16.000Z","dependencies_parsed_at":"2025-02-05T19:33:45.376Z","dependency_job_id":"039b0dcf-edf4-4851-9f29-ebcc10330a32","html_url":"https://github.com/Rodrigo-Kelven/Project_Load_Balancer","commit_stats":null,"previous_names":["rodrigo-kelven/project_load_balancer"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rodrigo-Kelven%2FProject_Load_Balancer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rodrigo-Kelven%2FProject_Load_Balancer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rodrigo-Kelven%2FProject_Load_Balancer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rodrigo-Kelven%2FProject_Load_Balancer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rodrigo-Kelven","download_url":"https://codeload.github.com/Rodrigo-Kelven/Project_Load_Balancer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252912964,"owners_count":21824066,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["docker","docker-compose","fastapi","nginx","python3"],"created_at":"2025-05-07T16:15:21.994Z","updated_at":"2025-12-30T23:05:02.152Z","avatar_url":"https://github.com/Rodrigo-Kelven.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Load Balancer com NGINX e FastAPI\n![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54) \n![FastAPI](https://img.shields.io/badge/FastAPI-%23FF4F00.svg?style=for-the-badge\u0026logo=fastapi\u0026logoColor=white)\n![Nginx](https://img.shields.io/badge/nginx-%23009639.svg?style=for-the-badge\u0026logo=nginx\u0026logoColor=white) \n![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white) \n\n## Versão 1.0.1\n#### Este é um projeto de balanceamento de carga usando Docker e NGINX para gerenciar múltiplas instâncias de APIs criadas com FastAPI. O NGINX atua como um proxy reverso para distribuir as requisições entre diferentes containers de API, permitindo escalabilidade e maior disponibilidade.\n\n## Descrição\n\n#### Este projeto simula um sistema de balanceamento de carga para múltiplas instâncias de APIs. O NGINX é configurado para distribuir as requisições de forma equilibrada entre os containers do Docker. As APIs são implementadas com FastAPI, um framework de alto desempenho para a construção de APIs.\n\n### A configuração do NGINX inclui dois clusters de APIs:\n\n- **Cluster 1: APIs 1, 2 e 3 (atendendo em rotas /, balanceadas)**\n- **Cluster 2: APIs 4, 5 e 6 (atendendo em rotas /two, balanceadas)**\n\n### Tecnologias\n\n- **Docker**: Para orquestrar os containers.\n- **NGINX**: Para balanceamento de carga entre as instâncias de API.\n- **FastAPI**: Framework utilizado para criar as APIs.\n- **Docker Compose**: Para orquestrar a configuração dos containers.\n\n## Como Rodar o Projeto\n### Pré-requisitos\n\nAntes de rodar o projeto, certifique-se de ter o Docker e o Docker Compose instalados na sua máquina.\n\n- **Docker**: [Instalar Docke](https://github.com/Rodrigo-Kelven/Script-Docker)\n\n\nPasso a Passo\n\n- **Clone este repositório:**\n\n        git clone https://github.com/Rodrigo-Kelven/Project_Load_Balancer\n        cd Project_Load_Balancer\n\n- **Construa as imagens e inicie os containers com o Docker Compose:**\n\n        docker-compose up --build\n  \n- **Caso queira saber o status do Load Balancer -\u003e NGINX:**\n\n        docker stats project_load_balancer_nginx_1 \n\n- **Para ver os logs do container Load Balancer -\u003e NGINX:**\n\n        docker logs -f project_load_balancer_nginx_1\n\n- ### Este comando irá:\n\n    - Construir as imagens dos containers.\n    - Subir as APIs e o NGINX.\n    - Expor as APIs nas portas 8001-8006 e o NGINX na porta 80.\n\n- ### Após a execução bem-sucedida, o NGINX estará balanceando as requisições para as APIs.\n\n## Estrutura do Projeto\n\n### A estrutura do projeto é a seguinte:\n\n    /Project_Load_Balancer\n    ├── api_1/\n    │    ├── Dockerfile\n    │    ├── main.py\n    │    └── requirements.txt\n    ├── api_2/\n    │    ├── Dockerfile\n    │    ├── main.py\n    │    └── requirements.txt\n    ├── api_3/\n    │    ├── Dockerfile\n    │    ├── main.py\n    │    └── requirements.txt\n    ├── api_4/\n    │    ├── Dockerfile\n    │    ├── main.py\n    │    └── requirements.txt\n    ├── api_5/\n    │    ├── Dockerfile\n    │    ├── main.py\n    │    └── requirements.txt\n    ├── api_6/\n    │    ├── Dockerfile\n    │    ├── main.py\n    │    └── requirements.txt\n    ├── nginx/\n    │    ├── Dockerfile\n    │    └── nginx.conf\n    └── docker-compose.yml\n\n\n## Descrição dos Arquivos\n\n- **api/Dockerfile:** Contém a configuração para construir o container da API com FastAPI.\n- **nginx/nginx.conf:** Arquivo de configuração do NGINX, que define os clusters de APIs e a distribuição de requisições.\n- **docker-compose.yml:** Configuração para orquestrar todos os containers (NGINX e APIs) dentro de uma rede interna.\n\n# Configurações\n\n### O arquivo nginx.conf contém duas seções principais para o balanceamento de carga:\n\n    Upstreams: Define dois clusters de APIs:\n        fastapi_cluster_1 (APIs 1, 2 e 3)\n        fastapi_cluster_2 (APIs 4, 5 e 6)\n\n    Proxy Reverso:\n        /: Roteia para o fastapi_cluster_1.\n        /two: Roteia para o fastapi_cluster_2.\n\n## Exemplo de nginx.conf\n    events {\n        worker_connections 1024;\n    }\n\n    http {\n        upstream fastapi_cluster_1 {\n            server api_1:8000;\n            server api_2:8000;\n            server api_3:8000;\n        }\n\n        upstream fastapi_cluster_2 {\n            server api_4:8000;\n            server api_5:8000;\n            server api_6:8000;\n        }\n\n        server {\n            listen 80;\n\n            location / {\n                proxy_pass http://fastapi_cluster_1;\n                proxy_set_header Host $host;\n                proxy_set_header X-Real-IP $remote_addr;\n                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n                proxy_set_header X-Forwarded-Proto $scheme;\n            }\n\n            location /two {\n                proxy_pass http://fastapi_cluster_2;\n                proxy_set_header Host $host;\n                proxy_set_header X-Real-IP $remote_addr;\n                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n                proxy_set_header X-Forwarded-Proto $scheme;\n            }\n        }\n    }\n\n\n## Como Testar\n\n### Após rodar o projeto, você pode testar as APIs balanceadas pelo NGINX acessando as seguintes rotas:\n\n- API Cluster 1 (APIs 1, 2 e 3):\n    - Acesse http://localhost/ para testar o balanceamento entre as APIs 1, 2 e 3.\n- API Cluster 2 (APIs 4, 5 e 6):\n    - Acesse http://localhost/two para testar o balanceamento entre as APIs 4, 5 e 6.\n\n**Você pode verificar o balanceamento de carga fazendo múltiplas requisições e observando qual API responde.**\n\n## Exemplo de Teste com **curl**:\n\n- ### Teste Cluster 1 (APIs 1, 2, 3):\n        curl http://localhost/\n- ### Teste Cluster 2 (APIs 4, 5, 6):\n        curl http://localhost/two/\n\n## Considerações Finais\n\n**Este projeto oferece uma solução simples de balanceamento de carga usando Docker, NGINX e FastAPI. Ele pode ser expandido para suportar mais APIs e implementações de balanceamento, como round-robin, least connections, etc.**\n\n**Caso precise ajustar o projeto para diferentes cenários ou implementar mais recursos, fique à vontade para modificar os arquivos de configuração e adicionar novas APIs.**\n\n# Contribuições\nContribuições são bem-vindas! Se você tiver sugestões ou melhorias, sinta-se à vontade para abrir um issue ou enviar um pull request.;)\n\n## Autores\n- [@Rodrigo_Kelven](https://github.com/Rodrigo-Kelven)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigo-kelven%2Fproject_load_balancer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodrigo-kelven%2Fproject_load_balancer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigo-kelven%2Fproject_load_balancer/lists"}