# 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 ```bash # Configurar servidores OCI ./scripts/setup-servers.sh ``` ### 2. Configurar SSL ```bash # Configurar certificados SSL cd nginx && ./setup-ssl.sh ``` ### 3. Deploy da Aplicação ```bash # Deploy para produção ./scripts/deploy-to-servers.sh ``` ### 4. Teste Local ```bash # 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 ```bash ./scripts/setup-servers.sh ``` - Instala Docker se necessário - Configura Docker Swarm - Configura firewall básico - Cria estrutura de diretórios ### Deploy Automatizado ```bash # 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 ```bash # Teste completo ./scripts/test-connectivity.sh # Gerar relatório ./scripts/test-connectivity.sh --report ``` ### Limpeza de Recursos ```bash # 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) - **Aplicação**: https://bcards.site - **Health Check**: https://bcards.site/health - **Server Info**: https://bcards.site/server-info - **NGINX Status**: https://bcards.site/nginx-health ### Teste Local (localhost) - **Aplicação**: http://localhost - **NGINX Status**: http://localhost:8081/nginx_status - **Prometheus**: http://localhost:9090 - **Grafana**: http://localhost:3000 (admin/bcards123) ## 🔧 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 ```bash # Verificar conectividade ssh -o ConnectTimeout=10 ubuntu@129.153.123.92 "echo 'ok'" ``` #### Docker Swarm não funciona ```bash # 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 ```bash # 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 ```bash # Testar múltiplas requisições for i in {1..10}; do curl -s http://bcards.site/server-info | jq -r '.ServerName'; done ``` ### Logs Úteis ```bash # 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 ```bash # 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 ```bash # 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: - **Email**: admin@bcards.site - **Issues**: GitHub Issues - **Documentação**: README.md --- **BCards Infrastructure** - Deploy com confiança! 🚀