Apache Zeppelin est un ordinateur portable open source basé sur le Web et un outil collaboratif pour l'ingestion, la découverte, l'analyse et la visualisation de données interactives. Zeppelin prend en charge plus de 20 langues, notamment Apache Spark, SQL, R, Elasticsearch et bien d'autres. Apache Zeppelin vous permet de créer de magnifiques documents axés sur les données et de voir les résultats de vos analyses.
Conditions préalables
- Une instance de serveur Vultr CentOS 7.
- Un utilisateur sudo .
- Un nom de domaine pointé vers le serveur.
Pour ce didacticiel, nous utiliserons zeppelin.example.com
le nom de domaine pointé vers l'instance Vultr. Veuillez vous assurer de remplacer toutes les occurrences de l'exemple de nom de domaine par celui réel.
Mettez à jour votre système de base à l'aide du guide Comment mettre à jour CentOS 7 . Une fois votre système mis à jour, installez Java.
Installer Java
Apache Zeppelin est écrit en Java, il nécessite donc JDK pour fonctionner. Téléchargez le package Oracle SE JDK RPM.
wget --no-cookies --no-check-certificate --header "Cookie:oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.rpm"
Installez le package téléchargé.
sudo yum -y localinstall jdk-8u151-linux-x64.rpm
Si Java a été installé avec succès, vous devriez pouvoir vérifier sa version.
java -version
Vous verrez la sortie suivante.
[user@vultr ~]$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
Avant de continuer, nous devrons configurer les variables d'environnement JAVA_HOME
et JRE_HOME
. Trouvez le chemin absolu de l'exécutable JAVA dans votre système.
readlink -f $(which java)
Vous verrez une sortie similaire.
[user@vultr ~]$ readlink -f $(which java)
/usr/java/jdk1.8.0_151/jre/bin/java
Maintenant, définissez les variables d'environnement JAVA_HOME
et en JRE_HOME
fonction du chemin du répertoire Java.
echo "export JAVA_HOME=/usr/java/jdk1.8.0_151" >> ~/.bash_profile
echo "export JRE_HOME=/usr/java/jdk1.8.0_151/jre" >> ~/.bash_profile
Exécutez le bash_profile
fichier.
source ~/.bash_profile
Vous pouvez maintenant exécuter la echo $JAVA_HOME
commande pour vérifier si la variable d'environnement est définie.
[user@vultr ~]$ echo $JAVA_HOME
/usr/java/jdk1.8.0_151
Installer Zeppelin
Apache Zeppelin expédie toutes les dépendances avec les fichiers binaires, nous n'avons donc pas besoin d'installer autre chose que Java. Téléchargez le binaire Zeppelin sur votre système. Vous pouvez toujours trouver la dernière version de l'application sur la page de téléchargement de Zeppelin .
wget http://www-us.apache.org/dist/zeppelin/zeppelin-0.7.3/zeppelin-0.7.3-bin-all.tgz
Extraire l'archive.
sudo tar xf zeppelin-*-bin-all.tgz -C /opt
La commande ci-dessus extraira l'archive vers /opt/zeppelin-0.7.3-bin-all
. Renommez le répertoire par souci de commodité.
sudo mv /opt/zeppelin-*-bin-all /opt/zeppelin
Apache Zeppelin est maintenant installé. Vous pouvez démarrer immédiatement l'application, mais elle ne vous sera pas accessible, car elle n'écoute localhost
que. Nous allons configurer Apache Zeppelin en tant que service. Nous allons également configurer le serveur Web Nginx comme proxy inverse.
Dans cette étape, nous allons configurer un fichier d'unité Systemd pour l'application Zeppelin. Cela garantira que le processus de demande démarre automatiquement au redémarrage et aux échecs du système.
Pour des raisons de sécurité, créez un utilisateur non privilégié pour exécuter le processus Zeppelin.
sudo adduser -d /opt/zeppelin -s /sbin/nologin zeppelin
Attribuez la propriété des fichiers à l'utilisateur Zeppelin nouvellement créé.
sudo chown -R zeppelin:zeppelin /opt/zeppelin
Créez un nouveau fichier d'unité de service Systemd.
sudo nano /etc/systemd/system/zeppelin.service
Remplissez le fichier avec les éléments suivants.
[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
Démarrez l'application.
sudo systemctl start zeppelin
Activez le service Zeppelin pour qu'il démarre automatiquement au démarrage.
sudo systemctl enable zeppelin
Pour vérifier si le service est en cours d'exécution, vous pouvez exécuter ce qui suit.
sudo systemctl status zeppelin
Par défaut, le serveur Zeppelin écoute sur localhost
le port 8080
. Dans ce tutoriel, nous utiliserons Nginx comme proxy inverse afin que l'application soit accessible via la norme HTTP
et les HTTPS
ports. Nous allons également configurer Nginx pour utiliser SSL généré avec CA de SSL gratuit Let's Encrypt.
Installez Nginx.
sudo yum -y install nginx
Démarrez Nginx et activez-le pour démarrer automatiquement au démarrage.
sudo systemctl start nginx
sudo systemctl enable nginx
Installez Certbot, qui est l'application cliente de Let's Encrypt CA.
sudo yum -y install certbot
Avant de pouvoir demander les certificats, vous devez autoriser le port 80
et / 443
ou la norme HTTP
et les HTTPS
services via le pare-feu.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
Remarque : Pour obtenir des certificats de Let's Encrypt CA, le domaine pour lequel les certificats doivent être générés doit être dirigé vers le serveur. Sinon, apportez les modifications nécessaires aux enregistrements DNS du domaine et attendez que le DNS se propage avant de refaire la demande de certificat. Certbot vérifie l'autorité de domaine avant de fournir les certificats.
Générez les certificats SSL.
sudo certbot certonly --webroot -w /usr/share/nginx/html -d zeppelin.example.com
Les certificats générés sont susceptibles d'être stockés dans /etc/letsencrypt/live/zeppelin.example.com/
. Le certificat SSL sera stocké sous fullchain.pem
et la clé privée sera stockée sous privkey.pem
.
Les certificats Let's Encrypt expirent dans 90 jours, il est donc recommandé de configurer le renouvellement automatique des certificats à l'aide des tâches Cron.
Ouvrez le fichier de tâche cron.
sudo crontab -e
Ajoutez la ligne suivante à la fin du fichier.
30 5 * * * /usr/bin/certbot renew --quiet
La tâche cron ci-dessus s'exécutera tous les jours à 5h30. Si le certificat doit expirer, il les renouvellera automatiquement.
Créez un nouveau fichier de blocage de serveur pour le site Zeppelin.
sudo nano /etc/nginx/conf.d/zeppelin.example.com.conf
Remplissez le fichier.
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;
}
}
Redémarrez Nginx pour que les modifications prennent effet.
sudo systemctl restart nginx zeppelin
Zeppelin est désormais accessible à l'adresse suivante.
https://zeppelin.example.com
Par défaut, aucune authentification n'est activée, vous pouvez donc utiliser l'application directement.
Étant donné que l'application est accessible à tous, les cahiers que vous créez sont également accessibles à tous. Il est très important de désactiver l'accès anonyme et d'activer l'authentification afin que seuls les utilisateurs authentifiés puissent accéder à l'application.
Désactiver l'accès anonyme
Pour désactiver l'accès anonyme par défaut, copiez le modèle de fichier de configuration dans son emplacement actif.
cd /opt/zeppelin
sudo cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml
Modifiez le fichier de configuration.
sudo nano conf/zeppelin-site.xml
Recherchez les lignes suivantes dans le fichier.
<property>
<name>zeppelin.anonymous.allowed</name>
<value>true</value>
Remplacez la valeur par false
pour désactiver l'accès anonyme.
Activer l'authentification Shiro
Maintenant que nous avons désactivé l'accès anonyme, nous devons activer une sorte de mécanisme d'authentification afin que les utilisateurs privilégiés puissent se connecter. Apache Zeppelin utilise l'authentification Apache Shiro. Copiez le fichier de configuration Shiro.
sudo cp conf/shiro.ini.template conf/shiro.ini
Modifiez le fichier de configuration.
sudo nano conf/shiro.ini
Recherchez les lignes suivantes dans le fichier.
[users]
admin = password1, admin
user1 = password2, role1, role2
user2 = password3, role3
user3 = password4, role2
La liste contient le nom d'utilisateur, le mot de passe et les rôles des utilisateurs. Pour l'instant, nous n'utiliserons que admin
et user1
. Changer le mot de passe admin
et user1
et désactiver les autres utilisateurs en les commentant. Vous pouvez également modifier le nom d'utilisateur et les rôles des utilisateurs. Pour en savoir plus sur les utilisateurs et les rôles d'Apache Shiro, lisez le guide d'autorisation Shiro .
Une fois que vous avez changé les mots de passe, le bloc de code devrait ressembler à ceci.
[users]
admin = StrongPassword, admin
user1 = UserPassword, role1, role2
# user2 = password3, role3
# user3 = password4, role2
Redémarrez maintenant Zeppelin pour appliquer les modifications.
sudo systemctl restart zeppelin
Vous devriez voir que l'authentification a été activée et vous pourrez vous connecter en utilisant le nom d'utilisateur et le mot de passe définis dans le fichier de configuration Shiro.