BCards-Scripts-Server/README.md
2025-07-22 21:24:07 -03:00

293 lines
6.9 KiB
Markdown

# 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! 🚀