INDEX / Dockerfile
akra35567's picture
Update Dockerfile
8b8f916 verified
# 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"]