# Dockerfile — AKIRA BOT HUGGING FACE SPACES (Atualizado Janeiro 2026) # ✅ Otimizado para ambiente de containers restritos (sistema de arquivos somente leitura) # ✅ Correção de DNS/IPv4 para erro web.whatsapp.com no Hugging Face # ✅ Configuração DNS via NODE_OPTIONS (funciona em sistemas read-only) FROM node:20-alpine # ═══════════════════════════════════════════════════════════════════ # VARIÁVEIS DE AMBIENTE (CORREÇÃO DE CONEXÃO DNS - CRÍTICO) # ═══════════════════════════════════════════════════════════════════ ENV NODE_ENV=production \ PORT=7860 \ TOOLS_INSTALLED=true \ # SOLUÇÃO PARA ERRO DNS NO HUGGING FACE (CRÍTICO PARA QR CODE): # Força IPv4 e usa DNS do Google via NODE_OPTIONS NODE_OPTIONS="--dns-result-order=ipv4first --no-warnings" \ # Configurações de rede otimizadas para containers UV_THREADPOOL_SIZE=128 \ LANG=C.UTF-8 \ # Configurações específicas para Hugging Face: DATA_DIR=/tmp/akira_data # ═══════════════════════════════════════════════════════════════════ # NOTA: /etc/resolv.conf é somente-leitura no HF Spaces! # O DNS é configurado via NODE_OPTIONS no comando de inicialização # e através de variáveis de ambiente do sistema # ═══════════════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════════════ # INSTALAR DEPENDÊNCIAS DO SISTEMA ESSENCIAIS # ═══════════════════════════════════════════════════════════════════ # Removidas ferramentas pesadas de pentesting para reduzir tamanho e evitar problemas RUN apk add --no-cache \ git \ curl \ wget \ python3 \ py3-pip \ make \ g++ \ cairo-dev \ pango-dev \ jpeg-dev \ giflib-dev \ ffmpeg \ yt-dlp \ ca-certificates \ openssl \ openssl-dev \ zlib-dev \ bash # ═══════════════════════════════════════════════════════════════════ # CONFIGURAÇÃO DE DIRETÓRIOS DE DADOS (USANDO /tmp PARA PERMISSÕES) # ═══════════════════════════════════════════════════════════════════ # No Hugging Face, /tmp é o único diretório com permissões de escrita confiáveis RUN mkdir -p /tmp/akira_data && \ mkdir -p /tmp/akira_data/auth_info_baileys && \ mkdir -p /tmp/akira_data/database && \ mkdir -p /tmp/akira_data/logs && \ mkdir -p /tmp/akira_data/temp && \ chmod -R 777 /tmp/akira_data # ═══════════════════════════════════════════════════════════════════ # VERIFICAÇÃO DE CONECTIVIDADE DE REDE # ═══════════════════════════════════════════════════════════════════ RUN echo "🔍 Verificando conectividade de rede..." && \ curl -s --connect-timeout 10 https://httpbin.org/get >/dev/null && echo "✅ Rede OK" || echo "⚠️ Rede pode ter restrições" # ═══════════════════════════════════════════════════════════════════ # INSTALAR FERRAMENTAS BÁSICAS DO GITHUB (LEVES) # ═══════════════════════════════════════════════════════════════════ # 1. SQLMAP (opcional - comentado para reduzir tamanho) # RUN mkdir -p /opt && \ # cd /opt && \ # git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git && \ # chmod +x /opt/sqlmap/sqlmap.py && \ # ln -s /opt/sqlmap/sqlmap.py /usr/local/bin/sqlmap # 2. Ferramentas Python leves - USANDO APK EM VEZ DE PIP RUN apk add --no-cache py3-requests py3-beautifulsoup4 # ═══════════════════════════════════════════════════════════════════ # CONFIGURAÇÃO DO DIRETÓRIO DE TRABALHO # ═══════════════════════════════════════════════════════════════════ WORKDIR /app # ═══════════════════════════════════════════════════════════════════ # INSTALAÇÃO DE DEPENDÊNCIAS NODE.JS (OTIMIZADA) # ═══════════════════════════════════════════════════════════════════ # Copiar package.json primeiro para otimizar o cache de camadas do Docker COPY package*.json ./ # Instalação otimizada para Hugging Face RUN npm config set fetch-retry-mintimeout 30000 && \ npm config set fetch-retry-maxtimeout 180000 && \ npm install --omit=dev --no-audit --progress=false --fetch-retries=3 --legacy-peer-deps # ═══════════════════════════════════════════════════════════════════ # COPIAR CÓDIGO DA APLICAÇÃO # ═══════════════════════════════════════════════════════════════════ COPY . . # ═══════════════════════════════════════════════════════════════════ # AJUSTES DE ESTRUTURA (SE NECESSÁRIO) # ═══════════════════════════════════════════════════════════════════ # Verificar se modules existe, caso contrário criar estrutura básica RUN if [ ! -d "./modules" ]; then \ echo "⚠️ Pasta modules não encontrada, criando estrutura básica..." && \ mkdir -p modules; \ else \ echo "✅ Estrutura de módulos encontrada"; \ fi # ═══════════════════════════════════════════════════════════════════ # CONFIGURAÇÃO DE PERMISSÕES (ADAPTADA PARA HUGGING FACE) # ═══════════════════════════════════════════════════════════════════ # Usar usuário node (já existe no container) USER node # ═══════════════════════════════════════════════════════════════════ # VERIFICAÇÃO FINAL # ═══════════════════════════════════════════════════════════════════ RUN echo "🔍 Verificando instalação..." && \ node -v && \ npm -v && \ python3 --version && \ python3 -c "import requests; import bs4; print('✅ Python packages installed')" 2>/dev/null || echo "⚠️ Python packages not fully installed" && \ ffmpeg -version | head -1 && \ echo "✅ Dockerfile construído com sucesso para Hugging Face Spaces" # Limpar cache para reduzir tamanho da imagem RUN npm cache clean --force 2>/dev/null || true # Porta padrão do Hugging Face EXPOSE 7860 # Healthcheck adaptado para Hugging Face HEALTHCHECK --interval=60s --timeout=20s --start-period=120s --retries=3 \ CMD curl -f http://localhost:7860/health 2>/dev/null || wget -q --spider http://localhost:7860/health 2>/dev/null || exit 1 # ═══════════════════════════════════════════════════════════════════ # COMANDO DE INICIALIZAÇÃO COM DNS CONFIGURADO # ═══════════════════════════════════════════════════════════════════ # O DNS é configurado via NODE_OPTIONS que força IPv4 # O arquivo /etc/resolv.conf é somente-leitura no HF Spaces, # então usamos apenas variáveis de ambiente e configurações do Node.js CMD ["sh", "-c", "node --dns-result-order=ipv4first index.js"]