Olá pessoal, tudo bem?
Hoje vou mostrar como configurar o ambiente Jupyter Notebook em um servidor remoto, de forma fácil e que nos permita aproveitar a flexibilidade da nuvem para fazer nossas analises de dados.
Mas o que é Jupyter Notebook e por que instala-lo em um servidor?
O Jupyter é, segundo o site do projeto, uma aplicação web de código aberto que permite criar e compartilhar documentos que contenham código vivo, equações, visualizações e texto explicativo. Ele é um dos principais ambientes para a análise de dados, onde você pode usar não apenas Python, mas várias outras linguagens como você pode ver aqui.
Normalmente, o Jupyter é instalado localmente e fica disponível na porta 8888 em localhost quando iniciado. Instala-lo em um servidor se torna útil quando o volume de dados a ser analisado é maior que a memória RAM disponível. Existem outras opções nestes casos, como processar os dados em lotes, usar processamento distribuído e etc, mas nenhuma delas é tão simples quanto ter todos os dados em memória. Pretendo abordar algumas dessas opções aqui no portal, mas farei isso quando surgir a necessidade!
Vamos à configuração!
Supondo que você já iniciou seu servidor em sua cloud de preferencia – AWS, Azure, Google, etc – o primeiro passo é atualizar o sistema e instalar algumas dependências. Eu estou usando Ubuntu 16.04 na AWS.
Acesse o servidor por SSH e execute os seguintes comandos:
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install python3-dev python3-pip $ sudo pip3 install -U pip
Ao final, o SO estará atualizado e o pip instalado e atualizado. Vamos agora a instalação do Jupyter.
$ sudo pip install jupyter
Veja se ao final do procedimento existe o texto “Successfully installed”, seguido de uma grande lista de bibliotecas.
Vamos iniciar o Jupyter e acessar o ambiente!
$ jupyter notebook --no-browser --port=8888
Você verá, ao final, uma saída como esta:
Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://localhost:8888/?token=1234
Mas o ambiente não será acessível substituindo o localhost pelo IP do seu servidor, esta é uma configuração de segurança do Jupyter. Para acessa-lo, faremos um “túnel” ssh.
No seu computador (em outro terminal que não seja aquele que você acessou seu servidor) rode este comando:
$ ssh -i /caminho/para/chave.pem -NL 9999:localhost:8888 ubuntu@ip.do.seu.servidor
Este comando “conecta” sua porta 9999 local com a porta 8888 do servidor e torna seu Jupyter remoto acessível localmente em http://localhost:9999/tree
No primeiro acesso é possível que ele peça um token, este token é mostrado no terminal quando iniciamos o Jupyter e aqui no texto esta representado pelo numero “1234” em negrito ali em cima.
E está feito! Agora você pode rodar suas analises com o poder e flexibilidade da nuvem.
Observações e Considerações
Vamos a algumas pontos importantes:
1 – Por mais que você acesse o Jupyter localmente (em localhost), ele esta rodando no servidor, não esqueça! Isso quer dizer que as demais dependências para sua análise precisam ser instaladas lá no servidor, e todos os arquivos serão salvos no disco deste servidor.
2 – O Jupyter oferece muitas opções de configuração, você pode configura-lo para aumentar a segurança do ambiente, habilitando HTTPS e/ou senhas, ou até torna-lo acessível diretamente pelo IP do servidor. Tenha em mente que a segurança aqui é mantida pelo “túnel” SSH, que permite deixar apenas a porta 22 do servidor aberta para conexão.
3 – Este é apenas o setup inicial. A partir daqui você tem muitas opções. Eu, por exemplo, configurei o Jupyter para iniciar automaticamente com supervisor e criei uma imagem deste servidor para poder recria-lo sempre que necessário (mais memória, mais CPU, mais GPU e etc).
Este é um conteúdo bem básico, mas não encontrei nenhum material similar no nosso idioma e por isso, aqui está!
Comentem aqui o que acharam, dúvidas, sugestões e sobre o que gostariam de ler aqui no portal! Espero ter ajudado.
Um abraço!