6.9 KiB
6.9 KiB
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)
- 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=server1ouserver_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:
/healthendpoint - NGINX:
/nginx-healthendpoint - 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
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - 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! 🚀