O Apache Zeppelin é um notebook de código aberto baseado na Web e uma ferramenta colaborativa para ingestão, descoberta, análise e visualização de dados interativos. O Zeppelin suporta mais de 20 idiomas, incluindo o Apache Spark, SQL, R, Elasticsearch e muitos mais. O Apache Zeppelin permite criar lindos documentos controlados por dados e ver os resultados de sua análise.
Pré-requisitos
- Uma instância do servidor Site & Site Ubuntu 16.04.
- Um usuário sudo .
- Um nome de domínio apontado para o servidor.
Para este tutorial, usaremos zeppelin.example.com
como o nome de domínio apontado para a instância do Vultr. Por favor, certifique-se de substituir todas as ocorrências do nome do domínio de exemplo com o atual.
Atualize seu sistema básico usando o guia Como atualizar o Ubuntu 16.04 . Depois que seu sistema tiver sido atualizado, prossiga para instalar o Java.
Instale Java
O Apache Zeppelin é escrito em Java, portanto, requer que o JDK funcione. Adicione o repositório do Ubuntu para o Oracle Java 8.
sudo add-apt-repository --yes ppa:webupd8team/java
sudo apt update
Instale o Oracle Java.
sudo apt -y install oracle-java8-installer
Verifique sua versão.
java -version
Você verá a seguinte saída.
[email protected]:~$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
Configure o caminho padrão para o Java instalando o pacote a seguir.
sudo apt -y install oracle-java8-set-default
Você pode verificar se JAVA_HOME
está definido executando.
echo $JAVA_HOME
Você verá.
[email protected]:~$ echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle
Se você não vir nenhuma saída, precisará sair do shell atual e efetuar login novamente.
Instalar o Zeppelin
O Apache Zeppelin envia todas as dependências junto com os arquivos binários, portanto, não precisamos instalar nada a não ser o Java. Baixe o binário do Zeppelin no seu sistema. Você sempre pode encontrar a versão mais recente do aplicativo na página de download do Zeppelin .
wget http://www-us.apache.org/dist/zeppelin/zeppelin-0.7.3/zeppelin-0.7.3-bin-all.tgz
Extraia o arquivo.
sudo tar xf zeppelin-*-bin-all.tgz -C /opt
O comando acima irá extrair o arquivo para /opt/zeppelin-0.7.3-bin-all
. Renomeie o diretório por conveniência.
sudo mv /opt/zeppelin-*-bin-all /opt/zeppelin
O Apache Zeppelin está agora instalado. Você pode iniciar imediatamente o aplicativo, mas ele não será acessível a você, pois ele localhost
apenas escuta . Vamos configurar o Apache Zeppelin como um serviço. Também vamos configurar o Nginx como um proxy reverso.
Configurar o Systemd
Nesta etapa, vamos configurar um arquivo de unidade Systemd para o aplicativo Zeppelin. Isso garantirá que o processo do aplicativo seja iniciado automaticamente na reinicialização e falhas do sistema.
Por motivos de segurança, crie um usuário sem privilégios para executar o processo do Zeppelin.
sudo useradd -d /opt/zeppelin -s /bin/false zeppelin
Forneça a propriedade dos arquivos ao usuário recém-criado do Zeppelin.
sudo chown -R zeppelin:zeppelin /opt/zeppelin
Crie um novo arquivo de unidade de serviço Systemd.
sudo nano /etc/systemd/system/zeppelin.service
Preencha o arquivo com o seguinte.
[Unit]
Description=Zeppelin service
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/opt/zeppelin/bin/zeppelin-daemon.sh start
ExecStop=/opt/zeppelin/bin/zeppelin-daemon.sh stop
ExecReload=/opt/zeppelin/bin/zeppelin-daemon.sh reload
User=zeppelin
Group=zeppelin
Restart=always
[Install]
WantedBy=multi-user.target
Inicie o aplicativo.
sudo systemctl start zeppelin
Ative o serviço Zeppelin para iniciar automaticamente no momento da inicialização.
sudo systemctl enable zeppelin
Para garantir que o serviço esteja em execução, você pode executar o seguinte.
sudo systemctl status zeppelin
Configurar o proxy reverso
Por padrão, o servidor Zeppelin escuta localhost
na porta 8080
. Usaremos o Nginx como um proxy reverso para que o aplicativo possa ser acessado por meio de portas HTTP
e padrão HTTPS
. Também configuraremos o Nginx para usar um SSL gerado com o Let’s Encrypt Free SSL CA.
Instale o Nginx.
sudo apt -y install nginx
Inicie o Nginx e ative-o para iniciar automaticamente no momento da inicialização.
sudo systemctl start nginx
sudo systemctl enable nginx
Adicione o repositório do Certbot.
sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update
Instale o Certbot, que é o aplicativo cliente para o Let’s Encrypt CA.
sudo apt -y install certbot
Nota : Para obter certificados de Let’s Encrypt CA, o domínio para o qual os certificados serão gerados deve estar voltado para o servidor. Caso contrário, faça as alterações necessárias nos registros DNS do domínio e aguarde o DNS se propagar antes de fazer a solicitação de certificado novamente. O Certbot verifica a autoridade do domínio antes de fornecer os certificados.
Gere os certificados SSL.
sudo certbot certonly --webroot -w /var/www/html -d zeppelin.example.com
Os certificados gerados provavelmente serão armazenados em /etc/letsencrypt/live/zeppelin.example.com/
. O certificado SSL será armazenado fullchain.pem
e a chave privada será armazenada como privkey.pem
.
Vamos Criptografar certificados expiram em 90 dias, portanto, é recomendável configurar a renovação automática dos certificados usando trabalhos Cron.
Abra o arquivo de trabalho cron.
sudo crontab -e
Adicione a seguinte linha no final do arquivo.
30 5 * * * /usr/bin/certbot renew --quiet
O cron job acima será executado todos os dias às 5:30 da manhã. Se o certificado estiver vencido, ele será automaticamente renovado.
Crie um novo arquivo de bloco de servidor para o site Zeppelin.
sudo nano /etc/nginx/sites-available/zeppelin
Preencha o arquivo.
upstream zeppelin {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name zeppelin.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name zeppelin.example.com;
ssl_certificate /etc/letsencrypt/live/zeppelin.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zeppelin.example.com/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/zeppelin.access.log;
location / {
proxy_pass http://zeppelin;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
}
location /ws {
proxy_pass http://zeppelin/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection upgrade;
proxy_read_timeout 86400;
}
}
Ative o arquivo de configuração.
sudo ln -s /etc/nginx/sites-available/zeppelin /etc/nginx/sites-enabled/zeppelin
Reinicie o Nginx para que as alterações entrem em vigor.
sudo systemctl restart nginx zeppelin
O Zeppelin está agora acessível no seguinte endereço.
https://zeppelin.example.com
Por padrão, não há autenticação ativada, portanto, você pode usar o aplicativo diretamente.
Como o aplicativo é acessível a todos, os cadernos que você cria também são acessíveis a todos. É muito importante desabilitar o acesso anônimo e habilitar a autenticação para que somente os usuários autenticados possam acessar o aplicativo.
Desativar acesso anônimo
Para desabilitar o acesso anônimo padrão, copie o modelo do arquivo de configuração em seu local ativo.
cd /opt/zeppelin
sudo cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml
Edite o arquivo de configuração.
sudo nano conf/zeppelin-site.xml
Encontre as seguintes linhas no arquivo.
<property>
<name>zeppelin.anonymous.allowed</name>
<value>true</value>
Altere o valor para false
desativar o acesso anônimo.
Ativar autenticação Shiro
Agora que desativamos o acesso anônimo, precisamos ativar algum tipo de mecanismo de autenticação para que os usuários com privilégios possam efetuar login. O Apache Zeppelin usa a autenticação Apache Shiro. Copie o arquivo de configuração Shiro.
sudo cp conf/shiro.ini.template conf/shiro.ini
Edite o arquivo de configuração.
sudo nano conf/shiro.ini
Encontre as seguintes linhas no arquivo.
[users]
admin = password1, admin
user1 = password2, role1, role2
user2 = password3, role3
user3 = password4, role2
A lista contém o nome de usuário, senha e funções dos usuários. Por enquanto, só usaremos admin
e user1
. Altere a senha de admin
e user1
e desative os outros usuários comentando-os. Você também pode alterar o nome de usuário e as funções dos usuários. Para saber mais sobre usuários e funções do Apache Shiro, leia o guia de autorização do Shiro .
Depois de ter alterado as senhas, o bloco de código deve ser assim.
[users]
admin = StrongPassword, admin
user1 = UserPassword, role1, role2
# user2 = password3, role3
# user3 = password4, role2
Agora reinicie o Zeppelin para aplicar as alterações.
sudo systemctl restart zeppelin
Você verá que a autenticação foi ativada e poderá efetuar login usando o nome de usuário e senha definidos no arquivo de configuração do Shiro.