FROM python:3.10-slim # Instala dependências do sistema, incluindo gosu (para troca de usuário) RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ gnupg \ ca-certificates \ curl \ gosu \ && rm -rf /var/lib/apt/lists/* # Adiciona a chave GPG da Elastic (método moderno) RUN wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg # Adiciona o repositório da Elastic RUN echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-8.x.list # Instala o Elasticsearch (já cria usuário/grupo elasticsearch) RUN apt-get update && apt-get install -y --no-install-recommends elasticsearch \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # FIX: Reescreve o elasticsearch.yml completamente para garantir single-node. # O sed com || append não é confiável quando o pacote .deb gera configs adicionais. # Sobrescrever o arquivo inteiro é a abordagem mais segura e elimina ambiguidade. RUN printf '%s\n' \ 'cluster.name: elasticsearch' \ 'node.name: ${HOSTNAME}' \ 'path.data: /var/lib/elasticsearch' \ 'path.logs: /var/log/elasticsearch' \ 'discovery.type: single-node' \ 'xpack.security.enabled: false' \ 'xpack.security.http.ssl.enabled: false' \ 'xpack.security.transport.ssl.enabled: false' \ 'network.host: 0.0.0.0' \ > /etc/elasticsearch/elasticsearch.yml # Ajusta permissões dos diretórios do Elasticsearch RUN chown -R elasticsearch:elasticsearch /usr/share/elasticsearch /etc/elasticsearch /var/lib/elasticsearch /var/log/elasticsearch # Define variáveis de ambiente para memória ENV ES_JAVA_OPTS="-Xms512m -Xmx512m" # Cria diretório de trabalho para a aplicação WORKDIR /app # Copia os arquivos de dependências Python e instala COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copia os arquivos da aplicação COPY . ./ # Copia o script de entrada e torna executável COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh # Expõe as portas do Elasticsearch e da API EXPOSE 9200 7860 # Define o comando padrão CMD ["/entrypoint.sh"]