| # 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"] | |