Implantação e Docker
O Menthor é implantado como uma API FastAPI conteinerizada, projetada para rodar em Máquinas Virtuais Linux utilizando Docker Engine e NGINX.
Esta aplicação utiliza uma arquitetura Docker-out-of-Docker (DooD), o que permite que a API principal instancie contêineres efêmeros isolados (Sandbox) para a execução dinâmica e segura de códigos Python.
Nota
Os valores de porta e IPs utilizados nesta documentação (como 8000 e 195.35.40.52) são exemplificativos. Deve-se utilizar parâmetros de acordo com a sua infraestrutura.
Ambiente de Servidor
Runtime: Uvicorn (dentro do container).
Orquestração: Docker Compose e Docker Engine.
Proxy Reverso: NGINX (recomendado para gerir SSL e porta 80/443).
Fluxo de Implantação (Step-by-Step)
1. Construir a Imagem do Sandbox
Antes de iniciar a API, é obrigatório construir a imagem do ambiente isolado localmente no host. Na raiz do repositório, execute:
docker build -f Dockerfile.sandbox -t mia-sandbox:py312-sci --no-cache .
2. Configuração de Volumes (Atenção ao Caminho Absoluto)
Para que o Docker Host consiga repassar os arquivos gerados pela API (como scripts e .json de resultados) para o Sandbox, o contêiner da API precisa estar sincronizado fisicamente com o servidor.
No seu arquivo docker-compose.yml, o mapeamento do projeto deve utilizar caminhos absolutos idênticos nos dois lados do volume.
Exemplo estrutural:
services:
fastapi-api:
# ...
volumes:
# Habilita o DooD (Comunicação com o Docker Host)
- /var/run/docker.sock:/var/run/docker.sock
# Sincronização Absoluta: Substitua pelo caminho real do servidor
- /root/menthor:/root/menthor
3. Subir a Aplicação
Com o sandbox preparado e os caminhos absolutos ajustados no compose, inicie a infraestrutura:
docker-compose up -d --build
Para acompanhar a execução e eventuais erros na inicialização da API:
docker-compose logs -f fastapi-api
Manutenção e Monitorização
Caso precise reiniciar o ambiente, limpar o cache ou investigar os arquivos gerados pela API diretamente por dentro do contêiner, utilize os comandos de apoio abaixo:
Derrubar a infraestrutura: Encerra e remove o contêiner da API e a rede criada de forma segura.
docker-compose down
Limpeza Profunda (Reconstrução Limpa):
Se precisar forçar a recriação da imagem do zero (útil após alterar bibliotecas no requirements.txt ou instruções no Dockerfile), derrube a estrutura, remova a imagem local e suba novamente.
docker-compose down
docker rmi menthor_fastapi-api:latest
docker-compose up -d --build
Inspecionar por dentro do contêiner: Para abrir um terminal interativo (bash) diretamente dentro da aplicação e validar caminhos ou arquivos temporários, execute:
docker exec -it menthor-fastapi-app bash
Dica
Ao acessar o terminal do contêiner, você pode navegar pelos diretórios espelhados (ex: cd /root/menthor/sandboxes) e utilizar o comando ls -la para verificar a persistência, integridade e as permissões dos arquivos gerados pelo código (.py e .json) antes de eles serem enviados ao Sandbox pelo Host.
Considerações de NGINX
Certifique-se de que a configuração do NGINX aponta o proxy_pass para o host/porta corretos e que o firewall do servidor permite o tráfego necessário.
Abaixo, um exemplo de bloco (server) para mapeamento de um subdomínio para a aplicação rodando no servidor:
server {
server_name menthor.seudominio.com.br;
location / {
proxy_pass http://195.35.40.52:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}