Deploy rápido e temporário de Web Apps diretamente do Google Colab com ngrok

Felipe Neves
5 min readJan 12, 2021

--

Em muitos projetos de Data Science, será necessário utilizar um modo de realizar deploy de aplicações de machine learning e de análise de dados. Existem alguns frameworks para construção de aplicativos analíticos via Python, tal como Dash ou Streamlit, porém estas soluções envolvem deploy na máquina local (i.e. sem acesso externo, via localhost). Para contornar esta situação, você pode realizar deploy através de uma série de ferramentas, tais como o Heroku, AWS ou pythonanywhere. Porém, o uso destas ferramentas pode exigir um número considerável de etapas e são mais trabalhosas de se fazer (Para o streamlit, o processo pode ser facilitado pelo streamlit sharing), o que faz que sejam mais recomendáveis de utilizar para projetos finalizados e não em andamento, e definitivamente não podem ser usados apenas diretamente com o Google Colab. Em alguns casos mais simples, você pode até compartilhar o código diretamente em um Notebook. Porém, em mais de uma situação, eu queria algo mais simples do que um deploy de aplicativo definitivo, porém mais refinado do que o simples compartilhamento de notebooks. Como terceira via, você pode fazer deploy de Web Apps de forma temporária e relativamente simples através do ngrok, diretamente do Google Colab, tal ferramenta é útil para mostrar protótipos para colegas e clientes, assim como em apresentações ou como instrumento de ensino.

ngrok

Através do ngrok você pode compartilhar um Web App usando uma URL pública, com qualquer pessoa, em qualquer lugar do mundo (de modo temporário). O ngrok permite criar um túnel de conexão segura a partir da sua máquina local, e publicá-lo na internet como uma URL pública, temporária e segura (é possível ter uma URL permanente do ngrok através da sua versão paga, a versão grátis tem um limite máximo de oito horas). Para poder usar o ngrok, basta o usuário fazer uma conta em seu site (https://dashboard.ngrok.com/signup) e após isso gerar um auto-token, que é acessível dentro do dashboard da sua conta recém criada (https://dashboard.ngrok.com/auth/your-authtoken).

Utilizando o ngrok no Google Colab

É possível instalar o ngrok no Google Colab, ou usar um Python wrapper chamado pyngrok que facilita o processo, pois realiza configurações básicas e permite acessar o ngrok na linha de comando (shell). Deste modo, aconselho instalar o wrapper pyngrok na sua sessão do Google Colab. A versão 4.1.1 é a mais estável (funcionou durante todos os meus testes), então use primariamente esta versão, que pode ser instalada e importada no Google Colab com as seguintes linhas de código:

!pip install pyngrok==4.1.1
from pyngrok import ngrok

Exemplos de deploy de Web Apps com o ngrok

Antes de prosseguir com as instruções, vamos considerar exemplos do uso do ngrok dentro do Google Colab com dois frameworks populares para a construção de Web Apps, o Dash e o Streamlit. Para a execução do código, vamos usar dados referentes a corridas de Uber em Nova Iorque. Os códigos dos exemplos de dashboards aqui utilizados são modificados do tutorial do Streamlit https://docs.streamlit.io/en/stable/tutorial/create_a_data_explorer_app.html e da Galeria do Dash https://dash-gallery.plotly.host/dash-uber-rides-demo. A ideia, obviamente, é que você seja capaz de implementar seu próprio código, uma vez que compreenda como funciona a integração com o ngrok observada nos exemplos.

Exemplo no Dash

Primeiro vamos importar bibliotecas necessárias para a execução do código escolhido do Dash no Google Colab, além do pyngrok, isto inclui importar bibliotecas específicas requeridas para lidar com dados e criação de gráficos (pandas e plotly).

%%capture
import pandas as pd
!pip install dash
import dash
!pip install jupyter-dash
from jupyter_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import plotly.io as pio
pio.templates.default = "plotly_white"

Em seguida, executamos o código do exemplo, para criar o dashboard:

O output do código do Dash gera um link local, onde o Dash app está rodando (você pode conferir se o link está funcional antes de prosseguir), através do pyngrok vamos fazer o localhost se conectar com a URL pública que será gerada.

Primariamente, carregue o seu auto-token pessoal do ngrok.

!ngrok authtoken xxxxxxxxxxxxx

No código exemplo para a criação do Dash, escolhemos a porta de localhost 8050 para o Web App rodar, deste modo comece a conectá-lo a porta local escolhida:

public_url = ngrok.connect('8050')

Imprima o public_url (objeto) para obter a URL pública onde o aplicativo da web está sendo encapsulado.

public_url

A URL será mostrada, seu Web App agora esta disponível na Internet, rodando diretamente do Google Colab. Você pode parar a execução da URL com o seguinte comando:

ngrok.kill()

Vale lembrar que você só pode executar uma URL pública por vez com o ngrok (pelo menos, em sua versão gratuita).

Exemplo no Streamlit

Para o uso do Streamlit, vamos precisar escrever um arquivo .py (o streamlit não consegue rodar diretamente no Colab), para isto, diferentemente do Dash, vamos importar as bibliotecas e criar o arquivo .py em um bloco de código único, mas instale o streamlit no google colab primeiro.

%%capture
!pip install streamlit

Em seguida, o bloco de código único para criar um arquivo .py do exemplo usado no Streamlit é o seguinte:

O output do código do Streamlit gera o arquivo app.py, é este arquivo que vamos vincular ao localhost, e através do pyngrok vamos se conectar com a URL pública que será gerada. Deste modo, temos que vincular nosso arquivo do streamlit na porta 8050 do localhost, usando o código a seguir:

!streamlit run — server.port 8050 app.py &>/dev/null&

Agora, tal como no exemplo do app do Dash, carregue o seu auto-token pessoal do ngrok.

!ngrok authtoken xxxxxxxxxxxxx

No código para a criação do app do streamlit, escolhemos a porta de localhost 8050 para o Web App rodar, deste modo comece a conectá-lo a porta local escolhida.

public_url = ngrok.connect('8050')

Imprima o public_url (objeto) para obter a URL pública onde o aplicativo da web está sendo encapsulado.

public_url

A URL será mostrada, seu Web App agora esta disponível na Internet, rodando diretamente do Google Colab. Você pode parar a execução da URL com o seguinte comando:

ngrok.kill()

Vale lembrar que você só pode executar uma URL pública por vez com o ngrok (pelo menos em sua versão grátis).

Conclusão

O objetivo deste tutorial é ajudar cientistas de dados, analista de dados, entre outros, a compartilhar seu desenvolvimento de aplicativos da Web em uma URL pública (temporariamente) de modo fácil, com algumas linhas de código Python e dependência mínima. Esta não é uma solução definitiva, por isso talvez valha a pena pesquisar as ferramentas citadas no começo do texto, porém acredito que o uso do ngrok pode vir a ser útil dependendo de suas necessidades. Os códigos completos dos exemplos estão disponíveis em um repositório específico do meu Github.

Referências

--

--

Felipe Neves
Felipe Neves

Written by Felipe Neves

Biologist, PhD, Complex systems, Data Science

No responses yet