Cómo Implementar y Alojar Fácilmente una Aplicación de Streamlit en la Nube
Streamlit se ha convertido en un cambio de juego en el ámbito de las aplicaciones de datos. Permite a los desarrolladores convertir rápidamente y sin esfuerzo scripts de datos en aplicaciones web interactivas. Sin embargo, el viaje no termina al crear una aplicación. El siguiente paso crucial es la implementación, que permite que su aplicación de Streamlit sea accesible para usuarios de todo el mundo, allanando el camino para la interacción, los comentarios y la aplicación en el mundo real.
En esta guía completa, exploraremos diversas plataformas para implementar su aplicación de Streamlit, que incluyen Streamlit Community Cloud, Heroku, AWS, Google Cloud y más. Lo guiaremos en cada paso, discutiremos problemas comunes y proporcionaremos soluciones para garantizar un proceso de implementación sin problemas. ¡Comencemos!
¿Has oído hablar de esta increíble herramienta de Análisis de Datos y Visualización de Datos, que convierte tu aplicación de Streamlit en Tableau?
PyGWalker (opens in a new tab) es una biblioteca de Python que te ayuda a incorporar fácilmente una interfaz similar a Tableau en tu propia aplicación de Streamlit sin esfuerzo. Echa un vistazo a este increíble video producido por Sven de Coding is Fun (opens in a new tab) que demuestra los pasos detallados para potenciar tu aplicación de Streamlit con esta poderosa biblioteca de visualización de datos en Python!
Agradecimientos especiales a Sven y su gran contribución (opens in a new tab) a la comunidad de PyGWalker.
Además, también puedes consultar la página de GitHub de PyGWalker (opens in a new tab) para ver más ejemplos de PyGWalker.
Parte 1: Implementación en DigitalOcean con Docker
DigitalOcean, un proveedor popular de infraestructura en la nube, ofrece una plataforma para implementar y escalar aplicaciones que se ejecutan simultáneamente en múltiples computadoras. Aquí, utilizaremos Docker, una plataforma que simplifica la creación, implementación y ejecución de aplicaciones con contenedores.
¿Qué es Docker?
Docker es una plataforma de código abierto que automatiza la implementación, escalado y gestión de aplicaciones. Encapsula las aplicaciones en contenedores, que son paquetes ejecutables independientes que contienen todo lo necesario para ejecutar una aplicación.
Aquí tienes una guía paso a paso sobre cómo implementar tu aplicación de Streamlit en DigitalOcean utilizando Docker:
- Crear un Dockerfile: Un Dockerfile es un documento de texto que contiene todos los comandos para ensamblar una imagen. Aquí tienes un ejemplo básico de un Dockerfile para una aplicación de Streamlit:
## Utilizar una imagen base oficial de Python como imagen principal
FROM python:3.7-slim
## Configurar el directorio de trabajo en el contenedor como /app
WORKDIR /app
## Agregar los contenidos del directorio actual al contenedor en /app
ADD . /app
## Instalar los paquetes necesarios especificados en requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
## Hacer el puerto 80 disponible para el mundo exterior de este contenedor
EXPOSE 80
## Ejecutar app.py cuando se inicie el contenedor
CMD streamlit run --server.port 80 app.py
-
Configurar un droplet en DigitalOcean: Un droplet es una plataforma de cómputo escalable con capacidad de almacenamiento adicional, seguridad y monitoreo. Puedes personalizar el tamaño, la ubicación y el software inicial de tu droplet.
-
Implementar tu aplicación: Una vez que tu Dockerfile esté listo y tu droplet esté en funcionamiento, puedes implementar tu aplicación de Streamlit. Aquí tienes un comando básico para construir tu imagen de Docker y ejecutarla:
docker build -t my-streamlit-app .
docker run -p 80:80 my-streamlit-app
Parte 2: Streamlit Sharing
Streamlit Sharing es una plataforma que permite a los desarrolladores implementar sus aplicaciones de Streamlit de forma instantánea y sin ninguna configuración. Es una excelente opción para aquellos que desean compartir sus aplicaciones de manera rápida y sencilla.
Cómo Usar Streamlit Sharing
Utilizar Streamlit Sharing es sencillo. Aquí tienes una guía paso a paso:
-
Sube tu aplicación de Streamlit a un repositorio público de GitHub: Streamlit Sharing implementa aplicaciones directamente desde GitHub, por lo que tu aplicación debe estar en un repositorio público.
-
Regístrate en Streamlit Sharing:
Ve al sitio web de Streamlit Sharing y haz clic en "Iniciar sesión con GitHub" para registrarte.
- Implementa tu aplicación: Una vez que hayas iniciado sesión, haz clic en "Nueva aplicación", selecciona tu repositorio de GitHub, la rama y la ruta del archivo, y haz clic en "Implementar". ¡Tu aplicación estará en vivo en solo unos minutos!
Aquí tienes un ejemplo de cómo podría verse tu panel de Streamlit Sharing:
Mis Aplicaciones
- Aplicación 1 (Implementada)
- Aplicación 2 (Implementada)
- Aplicación 3 (En progreso)
Nueva aplicación
- Repositorio: mi-nombre-de-usuario-en-github/mi-aplicacion-de-streamlit
- Rama: main
- Ruta del archivo: app.py
Parte 3: Implementación como un Ejecutable
Si bien Streamlit no admite oficialmente la implementación de aplicaciones como archivos ejecutables para diferentes sistemas operativos, es posible hacerlo con algunos trucos. Aquí tienes una guía general sobre cómo podrías abordar esto:
-
Empaqueta tu aplicación: Puedes utilizar herramientas como PyInstaller o cx_Freeze para empaquetar tu aplicación de Streamlit en un archivo ejecutable. Estas herramientas recopilan todos los archivos y bibliotecas necesarios para que tu aplicación se ejecute y los agrupan en un solo archivo.
-
Crea un instalador: Si deseas distribuir tu aplicación a otros usuarios, es posible que desees crear un instalador. Herramientas como Inno Setup o NSIS pueden ayudarte en esto.
-
Prueba tu ejecutable: Antes de distribuir tu aplicación, asegúrate de probar el ejecutable en el sistema operativo de destino para asegurarte de que funcione correctamente. Aquí hay un comando de ejemplo para crear un ejecutable usando PyInstaller:
pyinstaller --onefile --add-data='myapp:myapp' app.py
Parte 4: Despliegue en Heroku
Heroku es una plataforma en la nube que te permite desplegar, ejecutar y gestionar aplicaciones escritas en varios lenguajes de programación. Aquí tienes una guía paso a paso sobre cómo desplegar tu aplicación Streamlit en Heroku:
-
Crea una cuenta en Heroku: Regístrate en una cuenta gratuita de Heroku si aún no tienes una.
-
Instala Heroku CLI: La Interfaz de Línea de Comandos (CLI) de Heroku es una herramienta que te permite crear y gestionar tus aplicaciones Heroku directamente desde la terminal.
-
Prepara tu aplicación para Heroku: Heroku necesita dos archivos adicionales para desplegar tu aplicación Streamlit: un archivo
Procfile
y un archivosetup.sh
. El archivoProcfile
le dice a Heroku qué comando usar para iniciar tu aplicación, y el archivosetup.sh
configura tu entorno.
Esto es cómo podrían verse tu Procfile
y setup.sh
:
web: sh setup.sh && streamlit run app.py
mkdir -p ~/.streamlit/
echo "\
[general]\n\
email = \"tu-email@dominio.com\"\n\
" > ~/.streamlit/credentials.toml
echo "\
[server]\n\
headless = true\n\
enableCORS=false\n\
port = $PORT\n\
" > ~/.streamlit/config.toml
- Despliega tu aplicación: Una vez que tu aplicación está preparada, puedes desplegarla en Heroku usando el Heroku CLI. Aquí tienes una secuencia de comandos de ejemplo para desplegar tu aplicación:
git init
heroku create
git add .
git commit -m "Commit inicial"
git push heroku master
¡Después de estos pasos, tu aplicación Streamlit debería estar en vivo en Heroku!
Parte 5: Despliegue en Google Cloud Platform
Google Cloud Platform (GCP) es un conjunto de servicios de computación en la nube que se ejecuta en la misma infraestructura que Google utiliza internamente para sus productos de usuario final. Proporciona un entorno robusto y escalable para desplegar tus aplicaciones Streamlit.
Despliegue y Seguridad de una Aplicación Streamlit en GCP
Aquí tienes una guía paso a paso sobre cómo desplegar tu aplicación Streamlit en GCP:
-
Crea una cuenta de GCP: Si aún no tienes una, regístrate para obtener una cuenta de GCP.
-
Crea un nuevo proyecto: Ve a la Consola de GCP y crea un nuevo proyecto.
-
Habilita App Engine: Ve a la sección "App Engine" y habilítala para tu proyecto.
-
Prepara tu aplicación para GCP: Al igual que con Heroku, GCP requiere un archivo
app.yaml
para configurar tu aplicación. Aquí tienes un ejemplo de archivoapp.yaml
para una aplicación Streamlit:
runtime: python39
instance_class: F2
automatic_scaling:
target_cpu_utilization: 0.65
entrypoint: streamlit run --server.port $PORT --server.enableCORS false app.py
- Despliega tu aplicación: Una vez que tu aplicación está preparada, puedes desplegarla en GCP usando el SDK de Google Cloud. Aquí tienes una secuencia de comandos de ejemplo para desplegar tu aplicación:
gcloud app deploy
¡Después de estos pasos, tu aplicación Streamlit debería estar en vivo en GCP!
Parte 6: Construyendo Aplicaciones Streamlit en Amazon SageMaker Studio
Amazon SageMaker Studio es un entorno de desarrollo integrado (IDE) para el aprendizaje automático. Ofrece todas las herramientas necesarias para construir, entrenar y desplegar modelos de aprendizaje automático de manera rápida.
Beneficios de Usar Amazon SageMaker Studio
-
Servicio totalmente gestionado: Amazon SageMaker Studio se encarga de toda la infraestructura subyacente, lo que te permite centrarte en construir y desplegar tus aplicaciones Streamlit.
-
Cuadernos Jupyter integrados: Puedes crear fácilmente cuadernos Jupyter para explorar y visualizar tus datos.
-
Construcción y entrenamiento de modelos: SageMaker Studio proporciona algoritmos integrados y soporte para algoritmos personalizados, lo que facilita la construcción y el entrenamiento de tus modelos de aprendizaje automático.
-
Despliegue de modelos: Una vez que tu modelo está entrenado, puedes desplegarlo con un solo clic desde la consola de SageMaker Studio.
Parte 7: Despliegue en Azure App Services
Azure App Services es una plataforma totalmente gestionada para construir, desplegar y escalar aplicaciones web. Admite una amplia gama de lenguajes de programación, incluido Python, lo que lo convierte en una excelente opción para desplegar tus aplicaciones Streamlit.
Despliegue de una Aplicación Streamlit en Azure App Services
Aquí tienes una guía paso a paso sobre cómo desplegar tu aplicación Streamlit en Azure App Services:
-
Crea una cuenta en Azure: Si aún no tienes una cuenta, regístrate para obtener una cuenta de Azure.
-
Crea un nuevo App Service: Ve al portal de Azure y crea un nuevo App Service.
-
Configura tu App Service: Elige tu suscripción, grupo de recursos, nombre, método de publicación (Código), pila de tiempo de ejecución (Python) y sistema operativo.
-
Despliega tu aplicación: Una vez que tu App Service esté configurado, puedes desplegar tu aplicación Streamlit usando la CLI de Azure o Git. Aquí tienes una secuencia de comandos de ejemplo para desplegar tu aplicación usando la CLI de Azure:
az webapp up --sku F1 --name my-streamlit-app
¡Después de estos pasos, tu aplicación Streamlit debería estar en vivo en Azure App Services!
Parte 8: Despliegue de Pipelines de Aprendizaje Automático en AWS Fargate
AWS Fargate es un motor de cómputo sin servidor para contenedores. Funciona tanto con Amazon Elastic Container Service (ECS) como con Amazon Elastic Kubernetes Service (EKS), lo que facilita el despliegue de aplicaciones en contenedores.
Despliegue de una Aplicación PyCaret y Streamlit en AWS Fargate
Aquí tienes una guía paso a paso sobre cómo desplegar un pipeline de aprendizaje automático desarrollado con PyCaret y una aplicación Streamlit en AWS Fargate:
- Crea un archivo Dockerfile: Tu Dockerfile debe incluir las instrucciones necesarias para instalar PyCaret, Streamlit y cualquier otra biblioteca requerida. Aquí tienes un ejemplo básico:
## Utiliza una imagen base oficial de Python
FROM python:3.7-slim
## Establece el directorio de trabajo en el contenedor en /app
WORKDIR /app
## Agrega los contenidos del directorio actual al contenedor en /app
ADD . /app
## Instala los paquetes necesarios especificados en requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
## Hace que el puerto 80 esté disponible para el mundo exterior de este contenedor
EXPOSE 80
## Ejecuta app.py cuando el contenedor se inicie
CMD streamlit run --server.port 80 app.py
-
Construir y enviar su imagen de Docker: Puede usar la interfaz de línea de comandos de Docker para construir su imagen de Docker y enviarla a un registro de contenedores como Amazon Elastic Container Registry (ECR).
-
Crear una nueva definición de tarea en AWS Fargate: Una definición de tarea es un archivo de texto en formato JSON que describe uno o más contenedores que componen su aplicación. Incluye la imagen del contenedor a usar, la CPU y la memoria requerida, la configuración de red y más.
-
Ejecutar su tarea: Una vez configurada su definición de tarea, puede ejecutar su tarea en AWS Fargate. Su aplicación Streamlit ahora debería poder accederse mediante la dirección IP pública de su tarea.
Aquí hay una secuencia de comandos de ejemplo para construir su imagen de Docker y enviarla a Amazon ECR:
$(aws ecr get-login --no-include-email --region region)
docker build -t my-streamlit-app .
docker tag my-streamlit-app:latest my-ecr-repo/my-streamlit-app:latest
docker push my-ecr-repo/my-streamlit-app:latest
¡Después de estos pasos, su aplicación PyCaret y Streamlit debería estar funcionando en AWS Fargate!
Parte 9: Solución de errores de implementación
Implementar una aplicación Streamlit puede ser a veces una tarea desafiante, especialmente cuando nos encontramos con errores difíciles de descifrar. Sin embargo, comprender estos errores comunes puede ayudarlo a solucionarlos y resolverlos de manera efectiva.
Errores comunes de implementación y sus soluciones
- ModuleNotFoundError: Este error ocurre cuando Python no puede encontrar un módulo que su aplicación necesita para ejecutarse. Para solucionarlo, asegúrese de que todos los módulos requeridos estén enumerados en su archivo
requirements.txt
.
ModuleNotFoundError: No se encuentra el módulo 'nombre-del-módulo'
- StreamlitAPIException: Este error ocurre cuando hay un problema con el código de Streamlit. Verifique el mensaje de error para obtener detalles y ajuste su código en consecuencia.
StreamlitAPIException: 'nombre-de-la-función' no es un comando Streamlit válido.
- Fallos en la construcción de Docker: Si la construcción de su Docker falla, a menudo se debe a problemas en el Dockerfile. Verifique su Dockerfile en busca de errores de sintaxis o instrucciones faltantes.
ERROR: No se pudo construir el servicio 'nombre-del-servicio'
- Tiempo de implementación agotado: Si su implementación está tardando demasiado tiempo, es posible que se agote el tiempo de espera. Esto puede ser debido a una conexión a Internet lenta, una imagen de Docker grande o un proceso de construcción complejo. Intente optimizar su Dockerfile o aumentar el límite de tiempo de espera.
Error: Tiempo de implementación agotado.
Recuerde, la clave para solucionar problemas es comprender el mensaje de error. No se intimide por la jerga técnica. Analícelo, comprenda lo que está diciendo y podrá encontrar una solución.
Conclusión
Implementar una aplicación Streamlit es un paso crucial en el proceso de desarrollo de aplicaciones de datos. Permite que su aplicación esté accesible para el mundo, lo que facilita la interacción del usuario y la aplicación del mundo real. En esta guía, hemos explorado varias plataformas para implementar su aplicación Streamlit, incluidas Streamlit Community Cloud, Heroku, AWS, Google Cloud, Azure y más.
Cada plataforma tiene sus propias fortalezas y debilidades, y la mejor opción para usted depende de sus necesidades y circunstancias específicas. Le recomendamos que explore estas opciones, las pruebe y encuentre la que mejor se adapte a sus necesidades. ¡Feliz implementación!
¿Has oído hablar de esta increíble herramienta de análisis de datos y visualización de datos, que convierte tu aplicación Streamlit en Tableau?
PyGWalker (opens in a new tab) es una biblioteca de Python que te ayuda a incorporar fácilmente una IU similar a Tableau en tu propia aplicación Streamlit sin esfuerzo.
Preguntas frecuentes
-
¿Cómo implemento mi aplicación Streamlit?
Implementar una aplicación Streamlit implica empaquetar su aplicación y sus dependencias, y luego cargarla en una plataforma de alojamiento. Los pasos exactos dependen de la plataforma que esté utilizando. Esta guía proporciona instrucciones detalladas para varias plataformas populares.
-
¿Cómo alojo una aplicación Streamlit localmente?
Para alojar una aplicación Streamlit localmente, simplemente necesita ejecutar el comando
streamlit run tu-app.py
en su terminal. Asegúrese de estar en el directorio correcto y tener todas las dependencias necesarias instaladas. -
¿Cuánto tiempo tarda en implementarse una aplicación Streamlit?
El tiempo de implementación de una aplicación Streamlit puede variar según el tamaño de su aplicación, la velocidad de su conexión a Internet y la plataforma que esté utilizando. Sin embargo, con una buena configuración, a menudo se puede hacer en cuestión de minutos.
-
¿Es Streamlit mejor que Flask?
Streamlit y Flask son ambas herramientas excelentes, pero sirven para propósitos diferentes. Streamlit está diseñado para construir aplicaciones de datos rápidamente y con facilidad, mientras que Flask es un marco web más general que te brinda más control sobre tu aplicación. La mejor herramienta depende de sus necesidades específicas.