diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6ec6561 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,70 @@ +# Dependências +node_modules +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Arquivos de desenvolvimento +.env +.env.local +.env.development +.env.test + +# Arquivos de documentação +*.md +docs/ +HELP-COMMAND-FIX.md +SERVICE-PORT-INFO.md +AUTHENTICATION-SYSTEM.md +SUCCESS-ADD-ONU.md +FINAL-ADD-ONU-FIX.md +ADD-ONU-FIX.md +ADD-ONU-FEATURE.md +RESET-FIX.md + +# Git +.git +.gitignore + +# IDEs +.vscode/ +.idea/ +*.swp +*.swo + +# Logs +logs/ +*.log + +# Runtime data +pids/ +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ + +# Dependency directories +jspm_packages/ + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# Docker +Dockerfile* +docker-compose* +.dockerignore + +# Outros +.DS_Store +Thumbs.db diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..4b6a8fa --- /dev/null +++ b/.env.production @@ -0,0 +1,29 @@ +# ================================= +# CONFIGURAÇÃO DE PRODUÇÃO +# ================================= + +# Token do Bot do Telegram (OBRIGATÓRIO) +# Para obter: fale com @BotFather no Telegram +TELEGRAM_BOT_TOKEN=YOUR_BOT_TOKEN_HERE + +# Configurações SSH (OBRIGATÓRIO) +DEFAULT_SSH_HOST=131.0.192.254 +DEFAULT_SSH_USER=rodrigo +DEFAULT_SSH_PASSWORD=YOUR_SSH_PASSWORD_HERE + +# Configurações do bot +BOT_DEBUG=false +NODE_ENV=production + +# IDs dos usuários autorizados (separados por vírgula) +# Para descobrir seu ID, envie /start para @userinfobot +ALLOWED_USERS=593272271 + +# ================================= +# INSTRUÇÕES DE USO: +# ================================= +# 1. Copie este arquivo para .env +# 2. Substitua YOUR_BOT_TOKEN_HERE pelo token real +# 3. Substitua YOUR_SSH_PASSWORD_HERE pela senha real +# 4. Adicione IDs de usuários autorizados em ALLOWED_USERS +# 5. Execute: docker-compose up -d diff --git a/DOCKER-README.md b/DOCKER-README.md new file mode 100644 index 0000000..03ff25c --- /dev/null +++ b/DOCKER-README.md @@ -0,0 +1,110 @@ +# 🐳 Docker Quick Start - Bot de Ajuda Telegram + +## ⚡ **DEPLOY RÁPIDO** + +### **1. Configurar Ambiente** +```bash +# Copiar template +cp .env.production .env + +# Editar credenciais +nano .env # Linux/Mac +notepad .env # Windows +``` + +### **2. Deploy Automático** +```bash +# Linux/Mac +./deploy.sh + +# Windows +.\deploy.ps1 + +# Manual +docker-compose up -d --build +``` + +### **3. Verificar** +```bash +# Status +docker-compose ps + +# Logs +docker-compose logs -f telegram-bot + +# Teste no Telegram +# Envie: /start +``` + +## 🔧 **COMANDOS ÚTEIS** + +```bash +# Gerenciamento básico +docker-compose up -d # Iniciar +docker-compose down # Parar +docker-compose restart # Reiniciar +docker-compose ps # Status + +# Logs e debug +docker-compose logs -f # Logs em tempo real +docker-compose logs --tail=50 # Últimos 50 logs +docker stats bot-ajuda-telegram # Uso de recursos + +# Build e update +docker-compose build --no-cache # Rebuild +docker-compose up -d --build # Update e restart +``` + +## 📊 **MONITORAMENTO** + +```bash +# Health check +docker-compose exec telegram-bot node -e "console.log('OK')" + +# Verificar conectividade SSH +docker-compose exec telegram-bot ping 131.0.192.254 + +# Ver configuração +docker-compose config +``` + +## 🚨 **TROUBLESHOOTING** + +### **Bot não inicia:** +```bash +docker-compose logs telegram-bot | grep ERROR +``` + +### **Problema SSH:** +```bash +docker-compose logs telegram-bot | grep SSH +``` + +### **Erro Telegram:** +```bash +docker-compose logs telegram-bot | grep TelegramError +``` + +## 📋 **ESTRUTURA** + +``` +bot-ajuda/ +├── Dockerfile # Configuração da imagem +├── docker-compose.yml # Orquestração +├── .dockerignore # Otimização build +├── .env.production # Template configuração +├── deploy.sh # Script deploy Linux/Mac +├── deploy.ps1 # Script deploy Windows +└── logs/ # Logs persistentes +``` + +## ✅ **PRONTO!** + +Seu bot está rodando em produção com: +- 🔒 Segurança (usuário não-root) +- 📊 Monitoramento (health checks) +- 🔄 Restart automático +- 📝 Logs persistentes +- ⚡ Performance otimizada + +**Teste enviando `/start` para o bot no Telegram!** 🎉 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7a5465e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,42 @@ +# Use Node.js LTS (Long Term Support) como base +FROM node:22-alpine + +RUN apk add git nano openssh + +# Definir o diretório de trabalho +WORKDIR /app + +# Copiar arquivos de dependências +COPY package*.json ./ + +# Instalar dependências de produção +RUN npm ci --only=production && npm cache clean --force + +# Criar usuário não-root para segurança +RUN addgroup -g 1001 -S nodejs && \ + adduser -S botuser -u 1001 -G nodejs + +# Copiar código fonte +COPY . . + +# Criar diretório de logs e definir permissões +RUN mkdir -p /app/logs && \ + chown -R botuser:nodejs /app && \ + chmod -R 755 /app + +# Mudar para usuário não-root +USER botuser + +# Expor porta (se necessário para health checks) +EXPOSE 3000 + +# Definir variáveis de ambiente padrão +ENV NODE_ENV=production +ENV BOT_DEBUG=false + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD node -e "console.log('Bot is running')" || exit 1 + +# Comando para iniciar o bot +CMD ["npm", "start"] diff --git a/PRODUCTION-DEPLOY.md b/PRODUCTION-DEPLOY.md new file mode 100644 index 0000000..bb11c99 --- /dev/null +++ b/PRODUCTION-DEPLOY.md @@ -0,0 +1,304 @@ +# 🐳 Deploy em Produção - Bot de Ajuda Telegram + +## 📦 **ARQUIVOS CRIADOS** + +### 🔧 **Arquivos Docker** +- ✅ `Dockerfile` - Configuração da imagem Docker +- ✅ `docker-compose.yml` - Orquestração de containers +- ✅ `.dockerignore` - Otimização do build + +### ⚙️ **Arquivos de Configuração** +- ✅ `.env.production` - Template de configuração de produção +- ✅ `deploy.sh` - Script de deploy para Linux/Mac +- ✅ `deploy.ps1` - Script de deploy para Windows + +## 🚀 **INSTRUÇÕES DE DEPLOY** + +### **Pré-requisitos:** +- 🐳 Docker instalado +- 🔧 Docker Compose instalado +- 🔑 Token do bot do Telegram +- 🌐 Acesso SSH aos equipamentos + +### **1. Configurar Ambiente** + +**Linux/Mac:** +```bash +# Copiar template de configuração +cp .env.production .env + +# Editar configurações +nano .env +``` + +**Windows:** +```powershell +# Copiar template de configuração +Copy-Item .env.production .env + +# Editar configurações +notepad .env +``` + +### **2. Configurar Variáveis (arquivo .env)** + +```properties +# Token do Bot (OBRIGATÓRIO) +TELEGRAM_BOT_TOKEN=7673419014:AAGK7HNBYMMWl-bTNc5VBAl4FDLutMBx7pc + +# SSH (OBRIGATÓRIO) +DEFAULT_SSH_HOST=131.0.192.254 +DEFAULT_SSH_USER=rodrigo +DEFAULT_SSH_PASSWORD=@102030Rod + +# Bot +BOT_DEBUG=false +NODE_ENV=production + +# Usuários autorizados +ALLOWED_USERS=593272271 +``` + +### **3. Deploy Automatizado** + +**Linux/Mac:** +```bash +chmod +x deploy.sh +./deploy.sh +``` + +**Windows:** +```powershell +.\deploy.ps1 +``` + +### **4. Deploy Manual** + +```bash +# Build e iniciar +docker-compose up -d --build + +# Verificar status +docker-compose ps + +# Ver logs +docker-compose logs -f telegram-bot +``` + +## 🏗️ **ARQUITETURA DO CONTAINER** + +### **Base Image:** `node:18-alpine` +- 📦 Tamanho otimizado (~50MB) +- 🔒 Segurança aprimorada +- ⚡ Performance superior + +### **Características de Segurança:** +- 👤 Usuário não-root (`botuser`) +- 🛡️ Permissões restritivas +- 🔐 Variáveis de ambiente seguras +- 📋 Health checks automáticos + +### **Recursos do Container:** +- 💾 **Memória:** 256MB-512MB +- ⚡ **CPU:** 0.25-0.5 cores +- 📊 **Logs:** Rotação automática (10MB, 3 arquivos) +- 🔄 **Restart:** unless-stopped + +## 🎛️ **GERENCIAMENTO** + +### **Comandos Essenciais:** + +```bash +# Ver status +docker-compose ps + +# Ver logs em tempo real +docker-compose logs -f telegram-bot + +# Reiniciar bot +docker-compose restart telegram-bot + +# Parar bot +docker-compose down + +# Atualizar e reiniciar +docker-compose up -d --build + +# Limpar logs +docker-compose logs --tail=0 telegram-bot + +# Executar comando no container +docker-compose exec telegram-bot npm --version +``` + +### **Monitoramento:** + +```bash +# CPU e Memória +docker stats bot-ajuda-telegram + +# Health check +docker-compose ps telegram-bot + +# Logs de erro +docker-compose logs telegram-bot | grep ERROR +``` + +## 📊 **VOLUMES E PERSISTÊNCIA** + +### **Logs Persistentes:** +- 📁 `./logs` → `/app/logs` +- 🔄 Rotação automática +- 📝 Formato JSON estruturado + +### **Configuração:** +- 🔧 Variáveis via `.env` +- 🔒 Secrets via Docker Compose +- 📋 Configuração read-only no container + +## 🚨 **TROUBLESHOOTING** + +### **Bot não inicia:** +```bash +# Verificar configuração +docker-compose config + +# Ver logs de erro +docker-compose logs telegram-bot + +# Verificar variáveis +docker-compose exec telegram-bot env | grep TELEGRAM +``` + +### **Erro de SSH:** +```bash +# Testar conectividade +docker-compose exec telegram-bot ping 131.0.192.254 + +# Verificar credenciais +docker-compose logs telegram-bot | grep SSH +``` + +### **Bot não responde:** +```bash +# Health check manual +docker-compose exec telegram-bot node -e "console.log('Bot is running')" + +# Verificar logs do Telegram +docker-compose logs telegram-bot | grep TelegramError +``` + +## 🔄 **ATUALIZAÇÕES** + +### **Atualizar código:** +```bash +# Parar bot +docker-compose down + +# Atualizar código (git pull, etc.) + +# Rebuild e reiniciar +docker-compose up -d --build +``` + +### **Atualizar dependências:** +```bash +# Rebuild sem cache +docker-compose build --no-cache +docker-compose up -d +``` + +## 🔒 **SEGURANÇA EM PRODUÇÃO** + +### **Variáveis Sensíveis:** +- 🔑 Nunca commitar arquivo `.env` +- 🔐 Usar Docker secrets em produção +- 🛡️ Restringir acesso ao servidor + +### **Monitoramento:** +- 📊 Logs de tentativas de acesso +- 🚨 Alertas de falhas +- 📈 Métricas de uso + +### **Backup:** +- 💾 Backup regular da configuração +- 📋 Documentar usuários autorizados +- 🔄 Plano de disaster recovery + +## 📈 **MÉTRICAS E LOGS** + +### **Logs Importantes:** +```bash +# Comandos executados +docker-compose logs telegram-bot | grep "📨 Mensagem" + +# Operações SSH +docker-compose logs telegram-bot | grep "SSH" + +# Acessos negados +docker-compose logs telegram-bot | grep "🚫 Acesso negado" + +# Errors +docker-compose logs telegram-bot | grep "❌" +``` + +### **Monitoramento Automático:** +- 🔍 Health checks a cada 30s +- 📊 Restart automático em falhas +- 📝 Logs estruturados para análise + +## 🎯 **COMANDOS DE PRODUÇÃO** + +### **Deploy inicial:** +```bash +git clone +cd bot-ajuda +cp .env.production .env +# Editar .env com credenciais reais +./deploy.sh +``` + +### **Manutenção diária:** +```bash +# Ver status +docker-compose ps + +# Ver logs recentes +docker-compose logs --tail=50 telegram-bot + +# Restart se necessário +docker-compose restart telegram-bot +``` + +### **Deploy de atualização:** +```bash +git pull +docker-compose down +docker-compose up -d --build +docker-compose logs --tail=20 telegram-bot +``` + +## ✅ **RESULTADO FINAL** + +**Após o deploy bem-sucedido, você terá:** + +- 🤖 **Bot rodando em container Docker** +- 🔒 **Usuário restrito e seguro** +- 📊 **Logs persistentes e organizados** +- 🔄 **Restart automático em falhas** +- 📈 **Monitoramento via health checks** +- 🛡️ **Variáveis de ambiente seguras** +- ⚡ **Performance otimizada** + +**Para testar:** Envie `/start` para o bot no Telegram! + +## 🎉 **PRONTO PARA PRODUÇÃO!** + +Seu bot agora está: +- ✅ Containerizado e isolado +- ✅ Configurado para produção +- ✅ Monitorado automaticamente +- ✅ Seguro e restrito +- ✅ Fácil de gerenciar e atualizar + +**Deploy completo e bot em produção!** 🚀🎯 diff --git a/deploy.ps1 b/deploy.ps1 new file mode 100644 index 0000000..e251131 --- /dev/null +++ b/deploy.ps1 @@ -0,0 +1,78 @@ +# Script de Deploy - Bot de Ajuda Telegram (Windows) +# =================================================== + +Write-Host "🚀 Iniciando deploy do Bot de Ajuda Telegram..." -ForegroundColor Green + +# Verificar se Docker está instalado +if (-not (Get-Command docker -ErrorAction SilentlyContinue)) { + Write-Host "❌ Docker não encontrado. Instale o Docker Desktop primeiro." -ForegroundColor Red + exit 1 +} + +# Verificar se Docker Compose está instalado +if (-not (Get-Command docker-compose -ErrorAction SilentlyContinue)) { + Write-Host "❌ Docker Compose não encontrado. Instale o Docker Compose primeiro." -ForegroundColor Red + exit 1 +} + +# Verificar se arquivo .env existe +if (-not (Test-Path .env)) { + Write-Host "⚠️ Arquivo .env não encontrado!" -ForegroundColor Yellow + Write-Host "📋 Copiando template de produção..." -ForegroundColor Cyan + Copy-Item .env.production .env + Write-Host "✅ Arquivo .env criado a partir do template." -ForegroundColor Green + Write-Host "" + Write-Host "🔧 AÇÃO NECESSÁRIA:" -ForegroundColor Yellow + Write-Host " 1. Edite o arquivo .env" + Write-Host " 2. Configure TELEGRAM_BOT_TOKEN" + Write-Host " 3. Configure DEFAULT_SSH_PASSWORD" + Write-Host " 4. Configure ALLOWED_USERS" + Write-Host " 5. Execute este script novamente" + Write-Host "" + exit 1 +} + +# Verificar configurações +$envContent = Get-Content .env -Raw +if ($envContent -match "YOUR_BOT_TOKEN_HERE" -or $envContent -match "YOUR_SSH_PASSWORD_HERE") { + Write-Host "❌ Arquivo .env contém valores de template. Configure as variáveis necessárias." -ForegroundColor Red + exit 1 +} + +Write-Host "✅ Configurações validadas" -ForegroundColor Green + +# Parar containers existentes +Write-Host "🛑 Parando containers existentes..." -ForegroundColor Yellow +docker-compose down 2>$null + +# Build da imagem +Write-Host "🔨 Construindo nova imagem..." -ForegroundColor Cyan +docker-compose build --no-cache + +# Iniciar containers +Write-Host "🚀 Iniciando containers..." -ForegroundColor Green +docker-compose up -d + +# Aguardar inicialização +Write-Host "⏳ Aguardando inicialização..." -ForegroundColor Yellow +Start-Sleep -Seconds 10 + +# Verificar status +Write-Host "📊 Verificando status dos containers..." -ForegroundColor Cyan +docker-compose ps + +# Mostrar logs +Write-Host "📜 Últimos logs do bot:" -ForegroundColor Cyan +docker-compose logs --tail=20 telegram-bot + +Write-Host "" +Write-Host "🎉 Deploy concluído!" -ForegroundColor Green +Write-Host "" +Write-Host "📋 Comandos úteis:" -ForegroundColor Cyan +Write-Host " Ver logs: docker-compose logs -f telegram-bot" +Write-Host " Parar bot: docker-compose down" +Write-Host " Reiniciar bot: docker-compose restart telegram-bot" +Write-Host " Status: docker-compose ps" +Write-Host "" +Write-Host "🔍 Para verificar se o bot está funcionando:" -ForegroundColor Yellow +Write-Host " Envie /start para o bot no Telegram" diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..592a44a --- /dev/null +++ b/deploy.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +# Script de Deploy - Bot de Ajuda Telegram +# ======================================== + +set -e + +echo "🚀 Iniciando deploy do Bot de Ajuda Telegram..." + +# Verificar se Docker está instalado +if ! command -v docker &> /dev/null; then + echo "❌ Docker não encontrado. Instale o Docker primeiro." + exit 1 +fi + +# Verificar se Docker Compose está instalado +if ! command -v docker-compose &> /dev/null; then + echo "❌ Docker Compose não encontrado. Instale o Docker Compose primeiro." + exit 1 +fi + +# Verificar se arquivo .env existe +if [ ! -f .env ]; then + echo "⚠️ Arquivo .env não encontrado!" + echo "📋 Copiando template de produção..." + cp .env.production .env + echo "✅ Arquivo .env criado a partir do template." + echo "" + echo "🔧 AÇÃO NECESSÁRIA:" + echo " 1. Edite o arquivo .env" + echo " 2. Configure TELEGRAM_BOT_TOKEN" + echo " 3. Configure DEFAULT_SSH_PASSWORD" + echo " 4. Configure ALLOWED_USERS" + echo " 5. Execute este script novamente" + echo "" + exit 1 +fi + +# Verificar se variáveis obrigatórias estão configuradas +source .env + +if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ "$TELEGRAM_BOT_TOKEN" = "YOUR_BOT_TOKEN_HERE" ]; then + echo "❌ TELEGRAM_BOT_TOKEN não configurado no arquivo .env" + exit 1 +fi + +if [ -z "$DEFAULT_SSH_PASSWORD" ] || [ "$DEFAULT_SSH_PASSWORD" = "YOUR_SSH_PASSWORD_HERE" ]; then + echo "❌ DEFAULT_SSH_PASSWORD não configurado no arquivo .env" + exit 1 +fi + +echo "✅ Configurações validadas" + +# Parar containers existentes +echo "🛑 Parando containers existentes..." +docker-compose down 2>/dev/null || true + +# Build da imagem +echo "🔨 Construindo nova imagem..." +docker-compose build --no-cache + +# Iniciar containers +echo "🚀 Iniciando containers..." +docker-compose up -d + +# Aguardar inicialização +echo "⏳ Aguardando inicialização..." +sleep 10 + +# Verificar status +echo "📊 Verificando status dos containers..." +docker-compose ps + +# Mostrar logs +echo "📜 Últimos logs do bot:" +docker-compose logs --tail=20 telegram-bot + +echo "" +echo "🎉 Deploy concluído!" +echo "" +echo "📋 Comandos úteis:" +echo " Ver logs: docker-compose logs -f telegram-bot" +echo " Parar bot: docker-compose down" +echo " Reiniciar bot: docker-compose restart telegram-bot" +echo " Status: docker-compose ps" +echo "" +echo "🔍 Para verificar se o bot está funcionando:" +echo " Envie /start para o bot no Telegram" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fe822a4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,59 @@ +version: '3.8' + +services: + telegram-bot: + build: . + container_name: bot-ajuda-telegram + restart: unless-stopped + environment: + # Token do Bot do Telegram + - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} + + # Configurações SSH + - DEFAULT_SSH_HOST=${DEFAULT_SSH_HOST} + - DEFAULT_SSH_USER=${DEFAULT_SSH_USER} + - DEFAULT_SSH_PASSWORD=${DEFAULT_SSH_PASSWORD} + + # Configurações do bot + - BOT_DEBUG=${BOT_DEBUG:-false} + - NODE_ENV=production + + # Usuários autorizados + - ALLOWED_USERS=${ALLOWED_USERS} + + # Volumes para logs persistentes + volumes: + - ./logs:/app/logs + + # Health check + healthcheck: + test: ["CMD", "node", "-e", "console.log('Bot is running')"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + # Limites de recursos + deploy: + resources: + limits: + memory: 512M + cpus: '0.5' + reservations: + memory: 256M + cpus: '0.25' + + # Logs + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + + # Rede + networks: + - bot-network + +networks: + bot-network: + driver: bridge diff --git a/package.json b/package.json index 3bf06e1..d06dd7e 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,16 @@ "scripts": { "start": "node src/index.js", "dev": "nodemon src/index.js", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "docker:build": "docker build -t bot-ajuda-telegram .", + "docker:run": "docker run -d --name bot-ajuda --env-file .env bot-ajuda-telegram", + "docker:stop": "docker stop bot-ajuda && docker rm bot-ajuda", + "docker:logs": "docker logs -f bot-ajuda", + "compose:up": "docker-compose up -d", + "compose:down": "docker-compose down", + "compose:logs": "docker-compose logs -f telegram-bot", + "compose:restart": "docker-compose restart telegram-bot", + "compose:build": "docker-compose up -d --build" }, "keywords": [ "telegram",