Go to file
2025-07-22 21:24:07 -03:00
.claude first commit 2025-07-22 21:24:07 -03:00
mongodb/init first commit 2025-07-22 21:24:07 -03:00
monitoring first commit 2025-07-22 21:24:07 -03:00
nginx first commit 2025-07-22 21:24:07 -03:00
redis first commit 2025-07-22 21:24:07 -03:00
scripts first commit 2025-07-22 21:24:07 -03:00
test-app first commit 2025-07-22 21:24:07 -03:00
bcards-infrastructure.sln first commit 2025-07-22 21:24:07 -03:00
docker-compose.test.yml first commit 2025-07-22 21:24:07 -03:00
README-NEW-ARCHITECTURE.md first commit 2025-07-22 21:24:07 -03:00
README.md first commit 2025-07-22 21:24:07 -03:00

BCards Infrastructure

Infraestrutura completa para deploy do BCards com load balancer, SSL e zero-downtime deployment.

📋 Visão Geral

Arquitetura

  • 2 Servidores OCI: 129.153.123.92 e 129.146.116.218
  • Load Balancer: NGINX com SSL (Let's Encrypt)
  • Orquestração: Docker Swarm
  • Domínio: bcards.site
  • Registry: registry.redecarneir.us

Componentes

  • Aplicação ASP.NET Core: App de teste com identificação de servidor
  • NGINX: Load balancer com SSL e health checks
  • Docker Swarm: Orquestração de containers
  • Fluentd: Agregação de logs
  • Monitoramento: Prometheus + Grafana (opcional)

🚀 Início Rápido

1. Setup dos Servidores

# Configurar servidores OCI
./scripts/setup-servers.sh

2. Configurar SSL

# Configurar certificados SSL
cd nginx && ./setup-ssl.sh

3. Deploy da Aplicação

# Deploy para produção
./scripts/deploy-to-servers.sh

4. Teste Local

# Testar localmente
docker-compose -f docker-compose.test.yml up

📁 Estrutura do Projeto

bcards-infrastructure/
├── scripts/
│   ├── setup-servers.sh      # Setup inicial dos servidores
│   ├── deploy-to-servers.sh  # Deploy automatizado
│   ├── test-connectivity.sh  # Testes de conectividade
│   └── cleanup.sh           # Limpeza de recursos
├── test-app/               # Aplicação ASP.NET Core de teste
│   ├── Controllers/
│   ├── Views/
│   ├── Program.cs
│   ├── Dockerfile
│   └── docker-compose.yml
├── nginx/                  # Configurações NGINX
│   ├── nginx.conf         # Configuração produção
│   ├── nginx-test.conf    # Configuração teste
│   ├── setup-ssl.sh       # Script SSL
│   └── fluentd/          # Configurações logs
├── monitoring/            # Monitoramento
│   └── prometheus.yml
├── mongodb/              # Configurações MongoDB
│   └── init/
└── docker-compose.test.yml # Ambiente de teste

🛠️ Scripts Disponíveis

Setup dos Servidores

./scripts/setup-servers.sh
  • Instala Docker se necessário
  • Configura Docker Swarm
  • Configura firewall básico
  • Cria estrutura de diretórios

Deploy Automatizado

# Deploy versão latest
./scripts/deploy-to-servers.sh

# Deploy versão específica
./scripts/deploy-to-servers.sh v1.2.3

# Deploy sem rebuild
./scripts/deploy-to-servers.sh latest --skip-build

# Deploy com rollback automático
./scripts/deploy-to-servers.sh latest --auto-rollback

Testes de Conectividade

# Teste completo
./scripts/test-connectivity.sh

# Gerar relatório
./scripts/test-connectivity.sh --report

Limpeza de Recursos

# Limpeza básica
./scripts/cleanup.sh

# Parar serviços e limpar
./scripts/cleanup.sh --stop-services

# Limpeza completa (cuidado!)
./scripts/cleanup.sh --full

🌐 Endpoints

Produção (bcards.site)

Teste Local (localhost)

🔧 Configuração

Variáveis de Ambiente

Aplicação

  • SERVER_NAME: Nome do servidor (ex: "BCards Server 1")
  • SERVER_COLOR: Cor do tema (ex: "#28a745")
  • ASPNETCORE_ENVIRONMENT: Ambiente (Production/Development)

Docker Swarm

  • Labels dos nodes: server_id=server1 ou server_id=server2

Portas Utilizadas

Produção

  • 80: HTTP (redirect para HTTPS)
  • 443: HTTPS
  • 2377: Docker Swarm management
  • 7946: Docker Swarm communication
  • 4789: Docker overlay network

Teste Local

  • 80: NGINX Load Balancer
  • 3000: Grafana
  • 6379: Redis
  • 9090: Prometheus
  • 24224: Fluentd
  • 27017: MongoDB

📊 Monitoramento

Logs

  • NGINX: /var/log/nginx/
  • Aplicação: Docker logs via Fluentd
  • Sistema: journalctl

Health Checks

  • Aplicação: /health endpoint
  • NGINX: /nginx-health endpoint
  • Docker: Container health checks

Métricas

  • Prometheus: Coleta de métricas
  • Grafana: Visualização de dashboards

🔒 Segurança

SSL/TLS

  • Let's Encrypt: Certificados automáticos
  • Renovação: Automática via cron
  • HSTS: Habilitado
  • Strong Ciphers: TLS 1.2+

Firewall

  • SSH: Porta 22
  • HTTP/HTTPS: Portas 80/443
  • Docker Swarm: Portas necessárias
  • Resto: Bloqueado

Docker

  • Usuário não-root: Containers executam como usuário limitado
  • Resources limits: Limites de CPU/memória
  • Health checks: Monitoramento de saúde

🚨 Troubleshooting

Problemas Comuns

SSH não conecta

# Verificar conectividade
ssh -o ConnectTimeout=10 ubuntu@129.153.123.92 "echo 'ok'"

Docker Swarm não funciona

# Verificar status do swarm
ssh ubuntu@129.153.123.92 "sudo docker node ls"

# Reinicializar se necessário
./scripts/setup-servers.sh

SSL não funciona

# Verificar certificados
sudo openssl x509 -in /etc/letsencrypt/live/bcards.site/fullchain.pem -text -noout

# Renovar certificados
sudo /usr/local/bin/renew-ssl.sh

Load balancer não balanceia

# Testar múltiplas requisições
for i in {1..10}; do curl -s http://bcards.site/server-info | jq -r '.ServerName'; done

Logs Úteis

# Logs do NGINX
sudo docker service logs bcards-nginx

# Logs da aplicação
sudo docker service logs bcards-app_app-server1
sudo docker service logs bcards-app_app-server2

# Logs do sistema
sudo journalctl -u docker -f

📚 Recursos Adicionais

Comandos Docker Swarm

# Listar serviços
sudo docker service ls

# Escalar serviço
sudo docker service scale bcards-app_app-server1=2

# Atualizar serviço
sudo docker service update --image registry.redecarneir.us/bcards-test-app:v2 bcards-app_app-server1

# Rollback
sudo docker service rollback bcards-app_app-server1

Backup e Restore

# Backup da configuração
tar -czf bcards-backup-$(date +%Y%m%d).tar.gz scripts/ nginx/ test-app/

# Backup do banco (se usando MongoDB)
docker exec bcards-mongodb mongodump --out /backup

🤝 Contribuição

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

📞 Suporte

Para suporte, entre em contato:


BCards Infrastructure - Deploy com confiança! 🚀