293 lines
6.9 KiB
Markdown
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! 🚀 |