Troubleshooting - Servidor de Ferramentas
🔍 Diagnóstico Rápido
Script de Verificação Completa
#!/bin/bash
echo "=== BITIO Tools Server Health Check ==="
echo "Data: $(date)"
echo ""
# Sistema
echo "🖥️ SISTEMA"
echo "Uptime: $(uptime -p)"
echo "Load Average: $(uptime | awk -F'load average:' '{print $2}')"
echo "Memória: $(free -h | grep '^Mem' | awk '{print $3"/"$2" ("$5" disponível)"}')"
echo "Disco: $(df -h /mnt/forgejo_data | tail -1 | awk '{print $3"/"$2" ("$5" usado)"}')"
echo ""
# Docker
echo "🐳 CONTAINERS"
docker ps --format "{{.Names}}: {{.Status}}"
echo ""
# Rede
echo "🌐 CONECTIVIDADE"
curl -s -o /dev/null -w "Forgejo HTTP: %{http_code}\n" http://localhost
curl -s -o /dev/null -w "Pritunl HTTPS: %{http_code}\n" -k https://localhost:9443
echo ""
# Portas
echo "🚪 PORTAS"
netstat -tln | grep -E ":(80|443|2222|9443|51820)" | awk '{print $4}' | sort
🚫 Problemas Comuns e Soluções
1. SSH Connection Refused
Sintomas
ssh: connect to host 3.208.54.208 port 22: Connection refused
Causas e Soluções
Causa 1: Reboot automático durante inicialização
# Solução: Aguardar 3-5 minutos após deploy
ssh ubuntu@3.208.54.208 'uptime'
Causa 2: Firewall bloqueando
# Verificar regras UFW
sudo ufw status | grep 22
# Se não estiver liberado
sudo ufw allow 22/tcp
Causa 3: Security Group AWS
# Verificar Security Group via AWS CLI
aws ec2 describe-security-groups --group-ids sg-xxxxxx \
--query 'SecurityGroups[0].IpPermissions[?FromPort==`22`]'
2. Containers Não Iniciam
Forgejo Não Inicia
# Verificar logs
docker logs forgejo --tail 50
# Problemas comuns:
# 1. Banco de dados não conecta
docker exec forgejo-db pg_isready -U forgejo
# 2. Porta já em uso
sudo netstat -tlnp | grep :3000
# 3. Volume não montado
ls -la /mnt/forgejo_data/forgejo/data
# Solução: Restart completo
cd /mnt/forgejo_data/forgejo
docker compose down && docker compose up -d
Pritunl Não Inicia
# Verificar logs específicos
docker logs pritunl --tail 50
# Problemas comuns:
# 1. Privilégios insuficientes
docker inspect pritunl | grep -A5 -B5 Privileged
# 2. Device TUN não disponível
ls -la /dev/net/tun
# Solução: Recriar container
cd /mnt/forgejo_data/pritunl
docker compose down
docker compose up -d --force-recreate
3. Problemas de Performance
Alta Utilização de CPU
# Identificar processo problemático
htop
docker stats --no-stream
# Se for container específico
docker exec -it forgejo top
docker exec -it pritunl htop
# Solução: Restart seletivo
docker restart [container-problemático]
Falta de Memória
# Verificar uso de memória
free -h
docker stats --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}"
# Limpeza de cache
sync && sudo sysctl vm.drop_caches=3
# Se persistir, considerar upgrade da instância
# t3.micro -> t3.small
Espaço em Disco Esgotado
# Verificar uso detalhado
df -h /mnt/forgejo_data
du -sh /mnt/forgejo_data/*
# Limpeza de logs Docker
docker system prune -f
sudo truncate -s 0 $(docker inspect --format='{{.LogPath}}' forgejo)
# Limpeza de backups antigos
find /mnt/forgejo_data/backups -name "*.tar.gz" -mtime +30 -delete
# Limpeza de logs de aplicações
find /mnt/forgejo_data/*/logs -name "*.log" -mtime +7 -delete
4. Problemas de Rede
Forgejo Inacessível (Port 80)
# Verificar se Nginx está rodando
sudo systemctl status nginx
# Verificar configuração
sudo nginx -t
# Verificar se está fazendo proxy
curl -v http://localhost
# Verificar se Forgejo responde diretamente
curl -v http://localhost:3000
# Restart do Nginx se necessário
sudo systemctl restart nginx
Pritunl VPN Não Conecta
Problema 1: Porta UDP bloqueada
# Testar conectividade UDP (do cliente)
nc -u 3.208.54.208 51820
# Verificar firewall
sudo ufw status | grep 51820
# Verificar Security Group AWS
aws ec2 describe-security-groups --filters "Name=ip-permission.from-port,Values=51820"
Problema 2: Servidor VPN parado
# Via interface web Pritunl: Servers > Start
# Ou via logs:
docker logs pritunl | grep -i "server.*start"
5. Problemas de Autenticação
Forgejo - Login Falha
# Verificar logs de autenticação
docker logs forgejo | grep -i "auth\|login\|password"
# Reset de senha admin via CLI (se necessário)
docker exec forgejo forgejo admin user change-password --username admin --password nova-senha
# Verificar configuração do banco
docker exec forgejo-db psql -U forgejo -d forgejo -c "SELECT * FROM user WHERE is_admin = true;"
Pritunl - Admin Password Perdida
# Reset password via CLI
docker exec pritunl pritunl reset-password admin
# Ou criar novo admin
docker exec pritunl pritunl add-administrator novo-admin nova-senha
6. Problemas de SSL/TLS
Certificado Auto-Assinado Pritunl
# Gerar novo certificado auto-assinado
docker exec pritunl pritunl set app.server_cert /path/to/cert.pem
docker exec pritunl pritunl set app.server_key /path/to/key.pem
# Restart para aplicar
docker restart pritunl
Setup Let's Encrypt (se necessário)
# Instalar certbot
sudo apt install certbot python3-certbot-nginx
# Obter certificado (substitua pelo seu domínio)
sudo certbot --nginx -d bitio-tools.seudominio.com
# Configurar renovação automática
sudo crontab -e
# Adicionar: 0 12 * * * /usr/bin/certbot renew --quiet
🔧 Ferramentas de Diagnóstico
Logs Centralizados
# Script para coletar todos os logs
#!/bin/bash
LOG_DIR="/tmp/bitio-diagnostics-$(date +%Y%m%d_%H%M%S)"
mkdir -p $LOG_DIR
echo "Coletando logs de diagnóstico..."
# Logs do sistema
cp /var/log/auth.log $LOG_DIR/
cp /var/log/syslog $LOG_DIR/
dmesg > $LOG_DIR/dmesg.log
# Logs Docker
docker logs forgejo > $LOG_DIR/forgejo.log 2>&1
docker logs pritunl > $LOG_DIR/pritunl.log 2>&1
docker logs forgejo-db > $LOG_DIR/postgres.log 2>&1
# Configurações
docker ps > $LOG_DIR/docker-ps.log
df -h > $LOG_DIR/disk-usage.log
free -h > $LOG_DIR/memory.log
netstat -tlnp > $LOG_DIR/network.log
# Compactar
tar -czf bitio-diagnostics-$(date +%Y%m%d_%H%M%S).tar.gz -C /tmp $(basename $LOG_DIR)
echo "Logs coletados em: $(ls /tmp/bitio-diagnostics-*.tar.gz | tail -1)"
Monitoramento em Tempo Real
# Terminal 1: Logs de aplicação
watch -n 2 'docker logs forgejo --tail 10; echo "---"; docker logs pritunl --tail 10'
# Terminal 2: Recursos do sistema
watch -n 1 'echo "=== $(date) ==="; docker stats --no-stream; echo; free -h; echo; df -h /mnt/forgejo_data'
# Terminal 3: Conexões de rede
watch -n 2 'netstat -an | grep -E ":(80|443|2222|9443|51820)" | wc -l; echo "Total connections"; netstat -an | grep ESTABLISHED | wc -l; echo "Established"'
🚨 Problemas Críticos
1. Instância EC2 Não Responde
Diagnóstico via AWS Console
- EC2 Console > Instances
- Verificar Status Checks
- System Log (Actions > Monitor and troubleshoot > Get system log)
- Instance Screenshot (Actions > Monitor and troubleshoot > Get instance screenshot)
Recovery Actions
# Via AWS CLI - Restart da instância
aws ec2 reboot-instances --instance-ids i-0c9f041b25f5df86c
# Se não responder - Stop/Start (perde IP se não for EIP)
aws ec2 stop-instances --instance-ids i-0c9f041b25f5df86c
aws ec2 start-instances --instance-ids i-0c9f041b25f5df86c
2. Volume EBS Corrompido
# Verificar filesystem
sudo fsck /dev/nvme1n1
# Se houver problemas graves, criar snapshot antes
aws ec2 create-snapshot --volume-id vol-xxxxxx --description "Emergency backup"
# Montar volume em read-only para recuperar dados
sudo mount -o ro /dev/nvme1n1 /mnt/recovery
3. Docker Daemon Não Responde
# Restart do Docker daemon
sudo systemctl restart docker
# Se não funcionar - kill forçado
sudo pkill dockerd
sudo systemctl start docker
# Verificar integridade
sudo docker system prune -f
📞 Escalação de Problemas
Nível 1 - Auto Resolução
- Restart de containers individuais
- Limpeza de espaço em disco
- Verificação de logs básicos
Nível 2 - Intervenção Manual
- Restart de serviços do sistema
- Modificação de configurações
- Recovery de backups
Nível 3 - Infraestrutura AWS
- Restart de instância EC2
- Modificação de Security Groups
- Recovery de snapshots EBS
🔄 Procedimentos de Recovery
Recovery Completo
- Backup dos dados atuais (se possível):
tar -czf emergency-backup-$(date +%Y%m%d).tar.gz /mnt/forgejo_data
- Parar todos os serviços:
docker stop $(docker ps -q)
- Verificar integridade dos dados:
sudo fsck /dev/nvme1n1
- Restaurar configurações padrão:
# Re-executar script de inicialização
sudo /home/ubuntu/tools_init.sh
- Restart dos serviços:
cd /mnt/forgejo_data/forgejo && docker compose up -d
cd /mnt/forgejo_data/pritunl && docker compose up -d
Recovery de Backup
# Restaurar de backup específico
DATE="20260703"
cd /mnt/forgejo_data/backups
# Parar serviços
docker compose -f /mnt/forgejo_data/forgejo/docker-compose.yml down
docker compose -f /mnt/forgejo_data/pritunl/docker-compose.yml down
# Restaurar dados
tar -xzf forgejo-config-$DATE.tar.gz -C /mnt/forgejo_data/
tar -xzf pritunl-config-$DATE.tar.gz -C /mnt/forgejo_data/
# Restaurar banco
docker compose -f /mnt/forgejo_data/forgejo/docker-compose.yml up -d forgejo-db
sleep 10
docker exec -i forgejo-db psql -U forgejo -d forgejo < forgejo-db-$DATE.sql
# Iniciar todos os serviços
docker compose -f /mnt/forgejo_data/forgejo/docker-compose.yml up -d
docker compose -f /mnt/forgejo_data/pritunl/docker-compose.yml up -d
🛠️ Scripts de Manutenção Preventiva
Health Check Automático
#!/bin/bash
# /home/ubuntu/health-check.sh
LOGFILE="/var/log/bitio-health.log"
log() {
echo "[$(date)] $1" | tee -a $LOGFILE
}
# Verificar containers
if [ $(docker ps | grep -c "forgejo\|pritunl") -lt 2 ]; then
log "ERRO: Containers não estão rodando"
docker ps >> $LOGFILE
# Tentar restart
docker restart forgejo pritunl
fi
# Verificar espaço em disco
USAGE=$(df /mnt/forgejo_data | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $USAGE -gt 85 ]; then
log "ALERTA: Espaço em disco em ${USAGE}%"
# Limpeza automática
docker system prune -f
find /mnt/forgejo_data/*/logs -name "*.log" -mtime +3 -delete
fi
# Verificar conectividade
if ! curl -f -s http://localhost > /dev/null; then
log "ERRO: Forgejo não responde"
docker restart forgejo nginx
fi
log "Health check concluído"
Cron para Executar Health Check
# Adicionar ao crontab
crontab -e
# Executar a cada 15 minutos
*/15 * * * * /home/ubuntu/health-check.sh
📋 Checklist de Troubleshooting
Antes de Qualquer Ação
- Fazer backup dos dados atuais
- Documentar o problema exato
- Verificar logs relevantes
- Testar em ambiente isolado se possível
Durante o Troubleshooting
- Uma mudança por vez
- Testar após cada mudança
- Documentar o que foi feito
- Manter logs dos comandos executados
Após Resolver o Problema
- Verificar se tudo está funcionando
- Documentar a solução encontrada
- Implementar prevenções se aplicável
- Atualizar documentação e runbooks