4.9 KiB
Despliegue Local/VM
Esta guia documenta el despliegue recomendado para arquitectos: una laptop o VM con Python, acceso a los catalogos/datos del proyecto y ejecucion local de Streamlit. No requiere Docker ni servicios administrados.
Requisitos
- Python 3.12. En este workspace se valido con Python 3.12.13.
- Acceso de red si se van a descargar catalogos AWS/OCI actualizados.
- Ollama opcional para funciones LLM de mapeo o respuestas naturales.
- Twilio opcional para WhatsApp.
- Puerto local disponible para Streamlit, normalmente
8501. - Puerto local disponible para Flask/WhatsApp, normalmente
3000.
Instalacion
Desde la raiz del proyecto:
python3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Verifica instalacion:
python --version
python -m pytest -q
Configuracion de entorno
Crea el archivo local:
cp .env.example .env
Variables relevantes:
| Variable | Uso | Obligatoria |
|---|---|---|
CLOUD_CHAT_MODEL |
Modelo Ollama para Cloud Chat. | No |
CLOUD_CHAT_PROVIDER |
Provider del catalogo, hoy aws. |
No |
CLOUD_CHAT_CATALOG |
Ruta del catalogo para Cloud Chat. | No |
CLOUD_CHAT_USE_LLM |
true para usar LLM, false para modo deterministico. |
No |
TWILIO_ACCOUNT_SID |
Cuenta Twilio para envio WhatsApp. | Solo WhatsApp |
TWILIO_AUTH_TOKEN |
Token Twilio y validacion webhook. | Solo WhatsApp |
TWILIO_WHATSAPP_FROM |
Numero sandbox o remitente Twilio. | Solo WhatsApp |
MY_WHATSAPP_TO |
Destino default para pruebas de envio. | Solo envio |
PUBLIC_WEBHOOK_URL |
URL publica exacta de /whatsapp. |
Solo webhook |
WHATSAPP_PORT |
Puerto Flask del webhook. | No |
No subas .env. Comparte solo .env.example.
Iniciar GUI Streamlit
Con el ambiente activado:
streamlit run cloud_conversion_ui/Home.py
Alternativa sin activar el ambiente:
.venv/bin/streamlit run cloud_conversion_ui/Home.py
En una VM, si necesitas exponerlo a otros usuarios de la red:
streamlit run cloud_conversion_ui/Home.py --server.address 0.0.0.0 --server.port 8501
Usa reglas de firewall o red interna para restringir acceso. La GUI no implementa autenticacion propia.
Actualizar catalogos
Desde la GUI, entra a Catalogos y ejecuta:
AWS Fetch: descargadata/raw/aws/index.json.AWS EDA: generadata/catalog/aws/aws_ec2_catalog.csvy reporte EDA.OCI Fetch: descargadata/raw/oci/products.jsony generadata/catalog/oci/oci_price_list.csv.
Desde CLI:
python scripts/aws_fetch_offer.py
python scripts/aws_eda.py
python scripts/oci_fetch_offer.py
Ejecutar comparativas
Ruta recomendada:
- Abre la GUI.
- En
Inventario, selecciona o sube un archivo CSV, XLS o XLSX. - En
Ejecucion, revisa parametros AWS/OCI. - Ejecuta
AWS MatchyOCI Match. - En
Dashboard, revisa costo mensual, ahorro y cobertura. - En
Logs y Artefactos, descarga salidas.
Nota importante: la GUI ejecuta matching con move_to_done=False. Esto permite comparar AWS y OCI sobre el mismo inventario sin moverlo automaticamente. Para archivar el inventario, usa el boton Archivar en input/done en la pagina Inventario.
Ollama opcional
Los scripts pueden inferir columnas con reglas deterministicas o con LLM local. Para evitar dependencia de Ollama en ejecuciones controladas, usa --skip-llm en CLI o marca Skip LLM en la GUI.
Si se usa LLM:
ollama pull llama3.1:8b
Luego ejecuta sin --skip-llm o configura el modelo en la GUI.
WhatsApp opcional
Para probar envio:
python scripts/whatsapp_send.py --body "Prueba Cloud Conversion" --dry-run
Para iniciar el webhook Cloud Chat:
python scripts/whatsapp_chatbot.py
Twilio debe apuntar al PUBLIC_WEBHOOK_URL exacto, por ejemplo:
https://tu-ngrok.ngrok-free.app/whatsapp
server.py y send.py son demos legacy. Para operacion real usa scripts/whatsapp_chatbot.py y scripts/whatsapp_send.py.
Troubleshooting
| Sintoma | Revision |
|---|---|
| Streamlit no inicia | Confirma streamlit==1.57.0 en requirements.txt y que el venv este activo. |
| No aparecen inventarios | Coloca CSV/XLS/XLSX en input/ o sube desde la GUI. |
| Hay mas de un inventario en CLI | Usa --inventory para indicar el archivo exacto. |
| AWS Match no encuentra candidatos | Revisa region, OS, tenancy, unit y catalogo AWS generado. |
| OCI Match no genera BOM | Revisa que el catalogo OCI tenga SKUs Compute Standard y precios USD. |
| LLM falla | Ejecuta con --skip-llm o verifica Ollama/modelo. |
| Twilio rechaza webhook | PUBLIC_WEBHOOK_URL debe coincidir exactamente con la URL firmada por Twilio. |
Checklist de publicacion interna
.envno esta versionado.- No hay secretos en logs o inventarios compartidos.
python -m pytest -qpasa.- La GUI inicia con
streamlit run cloud_conversion_ui/Home.py. data/se comparte conscientemente aunque pesa aproximadamente 8 GB.