A aplicação está completamente desenvolvida, testada e implantada na plataforma Fly.io. O código-fonte implementa corretamente a lógica para consultar a API da MCH Gestão e exibir os resultados.
No entanto, a aplicação encontra-se atualmente bloqueada e não funcional devido a um problema externo de conectividade com a API de destino. Após um processo de depuração exaustivo, foi concluído que o domínio app.mchgestao.com.br não está a ser resolvido corretamente por diversas redes de nuvem (incluindo Fly.io e Postman Cloud Agent), impedindo qualquer conexão.
O próximo passo é aguardar a resolução do problema de DNS pela equipa de suporte técnico da MCH Gestão.
Esta é uma aplicação web construída em Python com o framework Flask. A sua principal função é atuar como um Backend-for-Frontend (BFF), fornecendo uma interface segura e simples para que clientes possam consultar o status de rastreio de seus pedidos.
A aplicação:
- Apresenta um formulário para o utilizador digitar o número do pedido.
- Conecta-se à API da MCH Gestão para buscar os dados de rastreio de forma segura, sem expor as chaves de API ao cliente.
- Exibe o histórico de status do pedido em uma página web gerada dinamicamente.
- É projetada para ser hospedada de forma eficiente na plataforma Fly.io.
- Backend: Python 3
- Framework: Flask
- Comunicação API: Requests
- Frontend: HTML5 / CSS (inline)
- Hospedagem: Fly.io
- Servidor WSGI: Gunicorn
Para chegar à conclusão sobre o problema externo, foram realizados os seguintes passos de diagnóstico:
- Verificação de Credenciais: As chaves de API (
MCH_API_KEY_PRODe_TEST) foram validadas e configuradas corretamente como "secrets" no Fly.io. - Logging Detalhado: Foi implementado um sistema de logging robusto no
app.pypara monitorizar cada etapa do fluxo da requisição. - Teste de Conectividade Interna: Através do
fly ssh console, confirmou-se que a máquina virtual da aplicação no Fly.io não conseguia resolver o hostname da API (NameResolutionError), mesmo após tentar forçar o uso de DNS alternativos. - Validação Externa com Postman: Testes realizados com o Postman (usando tanto o Cloud Agent quanto o Desktop Agent) confirmaram que o erro de resolução de DNS (
ENOTFOUND) também ocorria a partir de outra infraestrutura de nuvem. - Diagnóstico Final: A incapacidade de múltiplos sistemas (Fly.io, Postman Cloud) de resolver o domínio, enquanto o acesso por IP direto é bloqueado por segurança (
SSL Handshake Failure), prova conclusivamente que o problema reside na configuração de DNS pública do domínioapp.mchgestao.com.br.
Siga estas instruções para configurar e executar o projeto.
- Python 3.8+
pipevenv- Fly.io CLI (flyctl)
-
Clone o repositório:
git clone https://github.com/kritski/rastreio.git cd rastreio -
Crie e ative um ambiente virtual:
# Para macOS/Linux python3 -m venv venv source venv/bin/activate # Para Windows python -m venv venv venv\Scripts\activate
-
Instale as dependências:
pip install -r requirements.txt
-
Execute a aplicação localmente:
flask run
A aplicação estará disponível em
http://127.0.0.1:5000. (Nota: A conexão com a API externa não funcionará localmente se o problema de DNS persistir na sua rede).
-
Crie um novo app no Fly.io:
fly launch
- Escolha um nome para o app (ex:
meu-rastreio). - Escolha uma região (ex:
grupara São Paulo). - NÃO adicione um banco de dados Postgres ou Redis.
- Escolha um nome para o app (ex:
-
Configure os Secrets: Adicione sua chave de API de produção. Lembre-se de usar o nome do seu novo app no parâmetro
-a.fly secrets set MCH_API_KEY_PROD="mch_api_M3yB4CXrH6DH71PufFdCJGJZ" -a nome-do-seu-app
-
Atribua um Endereço IP: Este passo é crucial para resolver problemas de conectividade na rede do Fly.io.
fly ips allocate-v4 -a nome-do-seu-app
-
Faça o Deploy:
fly deploy
O Fly.io usará o
Dockerfilee ofly.tomldo repositório para construir e iniciar sua aplicação.
.
├── app.py # Lógica principal da aplicação Flask
├── fly.toml # Arquivo de configuração do Fly.io
├── Dockerfile # Instruções para construir a imagem da aplicação
├── requirements.txt # Lista de dependências Python
├── templates/
│ ├── index.html # Página inicial com o formulário
│ ├── rastreio.html # Página que exibe os dados do rastreio
│ └── erro.html # Página para exibir mensagens de erro
└── README.md # Este arquivo