{"id":31551376,"url":"https://github.com/devjpmello/docker-swarm-demo","last_synced_at":"2025-10-04T18:42:10.545Z","repository":{"id":315304846,"uuid":"1054431684","full_name":"devJPMello/docker-swarm-demo","owner":"devJPMello","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-17T19:49:36.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-17T21:44:43.385Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/devJPMello.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-10T20:33:26.000Z","updated_at":"2025-09-17T19:49:39.000Z","dependencies_parsed_at":"2025-09-17T21:44:47.138Z","dependency_job_id":"aea2e056-08ba-4ae9-a5cc-d56253d0034d","html_url":"https://github.com/devJPMello/docker-swarm-demo","commit_stats":null,"previous_names":["devjpmello/docker-swarm-demo"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/devJPMello/docker-swarm-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devJPMello%2Fdocker-swarm-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devJPMello%2Fdocker-swarm-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devJPMello%2Fdocker-swarm-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devJPMello%2Fdocker-swarm-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devJPMello","download_url":"https://codeload.github.com/devJPMello/docker-swarm-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devJPMello%2Fdocker-swarm-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278358489,"owners_count":25973946,"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","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"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":[],"created_at":"2025-10-04T18:42:03.336Z","updated_at":"2025-10-04T18:42:10.500Z","avatar_url":"https://github.com/devJPMello.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐳 Docker Swarm Demo - Aplicação com Réplicas e Balanceamento\n\nEste projeto demonstra a implantação de uma aplicação web containerizada em um cluster Docker Swarm, com escala horizontal (réplicas) e balanceamento de carga automático entre serviços.\n\n## 📋 Visão Geral\n\nA aplicação consiste em:\n- **Frontend**: Serviço HTTP que exibe informações da instância e chama o backend\n- **Backend**: API simples que retorna informações da instância (hostname, container ID)\n- **Rede Overlay**: Comunicação entre os serviços\n- **Balanceamento**: Automático entre múltiplas réplicas\n\n## 🏗️ Arquitetura\n\n```\nInternet → Frontend (3 réplicas) → Backend (3 réplicas)\n              ↓\n         Rede Overlay (swarm-network)\n```\n\n### Topologia\n- **Serviços**: frontend, backend\n- **Rede**: swarm-network (overlay)\n- **Portas**: 8080 (frontend) → 5000 (interno)\n- **Réplicas**: 3 frontend, 3 backend (configurável)\n\n## 🚀 Como Executar\n\n### Pré-requisitos\n- Docker Desktop ou Docker Engine\n- Docker Compose\n- Acesso ao terminal/PowerShell\n\n### 1. Inicializar o Docker Swarm\n\n```bash\n# Inicializar o swarm (se ainda não estiver inicializado)\ndocker swarm init\n\n# Verificar status\ndocker node ls\n```\n\n### 2. Fazer Deploy da Aplicação\n\n```bash\n# Deploy da stack completa\ndocker stack deploy -c docker-compose.yml swarm-demo\n\n# Verificar serviços\ndocker service ls\n```\n\n### 3. Verificar Status\n\n```bash\n# Listar serviços\ndocker service ls\n\n# Ver detalhes do frontend\ndocker service ps frontend\n\n# Ver detalhes do backend\ndocker service ps backend\n\n# Ver logs\ndocker service logs frontend\ndocker service logs backend\n```\n\n### 4. Acessar a Aplicação\n\nAbra seu navegador em: **http://localhost:8080**\n\n## 🧪 Testando o Balanceamento\n\n### Teste Manual\n1. Acesse http://localhost:8080\n2. Recarregue a página várias vezes (F5)\n3. Observe as mudanças nos hostnames e container IDs\n4. Note que tanto frontend quanto backend alternam entre réplicas\n\n### Teste Automatizado\n\n**Windows (PowerShell):**\n```powershell\n.\\test-load-balancing.ps1\n```\n\n**Linux/Mac (Bash):**\n```bash\n./test-load-balancing.sh\n```\n\n### Teste com cURL\n```bash\n# Múltiplas requisições para ver balanceamento\nfor i in {1..10}; do\n  echo \"Requisição $i:\"\n  curl -s http://localhost:8080 | grep -E \"(Hostname|Container ID)\"\n  sleep 1\ndone\n```\n\n## 📈 Escalando os Serviços\n\n### Aumentar Réplicas\n```bash\n# Escalar frontend para 5 réplicas\ndocker service scale frontend=5\n\n# Escalar backend para 5 réplicas\ndocker service scale backend=5\n\n# Verificar escalonamento\ndocker service ps frontend\ndocker service ps backend\n```\n\n### Diminuir Réplicas\n```bash\n# Reduzir para 2 réplicas\ndocker service scale frontend=2\ndocker service scale backend=2\n```\n\n## 🔧 Comandos Úteis\n\n### Monitoramento\n```bash\n# Status dos serviços\ndocker service ls\n\n# Detalhes de um serviço\ndocker service inspect frontend\n\n# Logs em tempo real\ndocker service logs -f frontend\n\n# Estatísticas de recursos\ndocker stats\n```\n\n### Gerenciamento\n```bash\n# Atualizar serviço\ndocker service update --image swarm-demo-frontend:latest frontend\n\n# Remover serviço\ndocker service rm frontend\n\n# Remover stack completa\ndocker stack rm swarm-demo\n```\n\n### Rede\n```bash\n# Listar redes\ndocker network ls\n\n# Inspecionar rede overlay\ndocker network inspect swarm-demo_swarm-network\n```\n\n## 🐳 Portainer (Opcional)\n\nPara visualização via interface web:\n\n1. Instalar Portainer:\n```bash\ndocker service create \\\n  --name portainer \\\n  --publish 9000:9000 \\\n  --constraint 'node.role == manager' \\\n  --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \\\n  portainer/portainer-ce\n```\n\n2. Acessar: http://localhost:9000\n\n## 📁 Estrutura do Projeto\n\n```\ndocker-swarm-demo/\n├── frontend/\n│   ├── app.py              # Aplicação Flask frontend\n│   ├── requirements.txt    # Dependências Python\n│   └── Dockerfile         # Imagem Docker frontend\n├── backend/\n│   ├── app.py             # Aplicação Flask backend\n│   ├── requirements.txt   # Dependências Python\n│   └── Dockerfile        # Imagem Docker backend\n├── configs/\n│   └── app-config.yml    # Configurações da aplicação\n├── secrets/\n│   └── api-key.txt       # Chave API (demonstração)\n├── docker-compose.yml    # Stack Docker Swarm\n├── test-load-balancing.sh    # Script de teste (Linux/Mac)\n├── test-load-balancing.ps1   # Script de teste (Windows)\n└── README.md             # Esta documentação\n```\n\n## 🔍 O que Observar\n\n### Balanceamento de Carga\n- **Frontend**: Cada refresh mostra hostname/container ID diferente\n- **Backend**: Chamadas internas distribuem entre réplicas\n- **Algoritmo**: Round-robin do Docker Swarm\n\n### Alta Disponibilidade\n- **Restart**: Containers reiniciam automaticamente em falhas\n- **Rolling Updates**: Atualizações sem downtime\n- **Health Checks**: Monitoramento automático de saúde\n\n### Escalabilidade\n- **Horizontal**: Aumentar/diminuir réplicas dinamicamente\n- **Recursos**: Limites de CPU/memória configurados\n- **Rede**: Comunicação eficiente via overlay\n\n## 🛠️ Troubleshooting\n\n### Problemas Comuns\n\n1. **Porta 8080 ocupada**:\n   ```bash\n   # Verificar processos na porta\n   netstat -ano | findstr :8080\n   # Alterar porta no docker-compose.yml\n   ```\n\n2. **Serviços não iniciam**:\n   ```bash\n   # Verificar logs\n   docker service logs frontend\n   docker service logs backend\n   ```\n\n3. **Rede não funciona**:\n   ```bash\n   # Verificar rede overlay\n   docker network ls\n   docker network inspect swarm-demo_swarm-network\n   ```\n\n### Limpeza\n```bash\n# Remover stack\ndocker stack rm swarm-demo\n\n# Remover imagens\ndocker image rm swarm-demo-frontend:latest\ndocker image rm swarm-demo-backend:latest\n\n# Limpar sistema (cuidado!)\ndocker system prune -a\n```\n\n## 📚 Conceitos Demonstrados\n\n- ✅ **Docker Swarm**: Cluster nativo do Docker\n- ✅ **Overlay Networks**: Comunicação entre nós\n- ✅ **Service Discovery**: Resolução automática de nomes\n- ✅ **Load Balancing**: Distribuição automática de tráfego\n- ✅ **Health Checks**: Monitoramento de saúde\n- ✅ **Rolling Updates**: Atualizações sem downtime\n- ✅ **Scaling**: Escalonamento horizontal\n- ✅ **High Availability**: Alta disponibilidade\n\n## 🎯 Próximos Passos\n\n- Implementar persistência de dados\n- Adicionar monitoramento (Prometheus/Grafana)\n- Configurar SSL/TLS\n- Implementar CI/CD\n- Adicionar testes automatizados\n\n---\n\n**Desenvolvido para demonstração de Docker Swarm com balanceamento de carga e alta disponibilidade.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevjpmello%2Fdocker-swarm-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevjpmello%2Fdocker-swarm-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevjpmello%2Fdocker-swarm-demo/lists"}