Pular para o conteúdo principal

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

  1. EC2 Console > Instances
  2. Verificar Status Checks
  3. System Log (Actions > Monitor and troubleshoot > Get system log)
  4. 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

  1. Backup dos dados atuais (se possível):
tar -czf emergency-backup-$(date +%Y%m%d).tar.gz /mnt/forgejo_data
  1. Parar todos os serviços:
docker stop $(docker ps -q)
  1. Verificar integridade dos dados:
sudo fsck /dev/nvme1n1
  1. Restaurar configurações padrão:
# Re-executar script de inicialização
sudo /home/ubuntu/tools_init.sh
  1. 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