-
Une older version de cet article a été écrite par https: // www .digitalocean.com / community / users / daattali [Dean Attali]. *
introduction
Alors que beaucoup de gens se tournent principalement vers le langage de programmation R] https://www.r-project.org/about.html pour les applications statistiques et graphiques, Shiny est un paquet R qui vous permet de convertir votre code R en code interactif les pages Web. Et lorsqu’il est combiné avec Shiny Server - disponible dans un format gratuit, à code source ouvert et dans un format professionnel, vous pouvez également héberger et gérer Shiny applications et interactive R markdown documents.
Dans ce tutoriel, vous allez installer et configurer Shiny et la version open source de Shiny Server sur un serveur exécutant Ubuntu 16.04, sécuriser la connexion au serveur Shiny à l’aide d’un certificat SSL de Let’s Encrypt, puis installer un package supplémentaire pour une exécution interactive. R Markdown documents.
Conditions préalables
Pour compléter ce didacticiel, vous aurez besoin des éléments suivants:
-
Un serveur Ubuntu 16.04 avec * un minimum de 1 Go de RAM * configuré comme suit: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 (serveur initial Ubuntu 16.04) tutoriel d’installation], y compris un utilisateur sudo non root et un pare-feu.
-
La dernière version de R installée en suivant l’étape 1 du this sur l’installation de R sur Ubuntu 16.04 tutoriel .
-
Nginx est installé en suivant le tutoriel https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04. Comment installer Nginx sur Ubuntu 16.04], en permettant notamment l’accès aux ports
+ 80 +
et+ 443 +
à l’étape 2 avec la commande+ sudo ufw allow 'Nginx Full' +
. -
Un nom de domaine entièrement enregistré. Ce tutoriel utilisera
+ example.com +
tout au long. Vous pouvez acheter un nom de domaine sur https://namecheap.com [Namecheap], en obtenir un gratuitement sur Freenom ou utiliser le registraire de domaine de votre choix. . -
Les deux enregistrements DNS suivants sont configurés pour votre serveur. Vous pouvez suivre cien tutoriel sur les noms d’hôtes pour savoir comment les ajouter.
-
Un enregistrement A avec
++
pointant sur l’adresse IP publique de votre serveur. -
Un enregistrement A avec
+ www. +
Pointant vers l’adresse IP publique de votre serveur. -
Un certificat Let’s Encrypt SSL pour le domaine installé à l’adresse suivante: https://www.digitalocean.com/community/tutorials/how-to-use-certbot-standalone-mode-to-retrieve-let-s-encrypt-ssl-certificates [ce tutoriel Encryptons Certbot].
Une fois que toutes les conditions préalables sont en place, nous allons commencer par installer Shiny sur le serveur.
Étape 1 - Installation de Shiny
Avant d’installer Shiny Server, vous devez installer le package Shiny R, qui fournit la structure sur laquelle les applications Web Shiny s’exécutent.
Si vous connaissez R, vous pouvez être tenté d’installer les packages directement à partir de R et non à partir de la ligne de commande. Cependant, l’utilisation de la commande suivante est le moyen le plus sûr de s’assurer que le package est installé pour tous les utilisateurs et pas seulement pour l’utilisateur en cours d’exécution.
+ Su - +
exécute la commande suivante comme dans l’environnement de l’utilisateur et l’option + -c +
spécifie la commande à exécuter. Cette commande, dans ce cas, est ce qui suit entre guillemets doubles.
+ Install.packages +
est la commande R utilisée pour installer les packages R. Ainsi, dans cette commande en particulier, le package + shiny +
est installé à partir du référentiel spécifié.
sudo su - -c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\""
Une fois terminé, R vous dira que l’installation est + DONE +
et où sont placés les paquets sources téléchargés:
Output...
* DONE (shiny)
The downloaded source packages are in
‘/tmp//downloaded_packages’
Avec Shiny en place, vous êtes maintenant prêt à installer Shiny Server et à afficher son écran d’accueil par défaut dans votre navigateur.
Étape 2 - Installation du serveur Shiny
Au cours de cette étape, vous installerez Shiny Server et modifierez le pare-feu pour autoriser le trafic via le port écouté par Shiny Server.
Selon les instructions d’installation officielles du serveur Shiny, nous utiliserons + wget +
pour télécharger un fichier binaire pré-construit pour une architecture 64 bits. Étant donné que Shiny Server est en cours de développement, vous devez consulter la page de téléchargement officielle Shiny Server pour obtenir l’URL du dernier fichier binaire pré-construit 64 bits. correspondant à votre système d’exploitation. Une fois que vous avez l’adresse, modifiez l’URL dans la commande suivante en conséquence.
wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server--amd64.deb
Une fois le fichier téléchargé, vérifiez son intégrité en comparant le résultat de la commande suivante avec la somme de contrôle MD5 indiquée sur la page de téléchargement RStudio Shiny Server à la page haut des instructions de téléchargement binaire pré-construites 64 bits.
md5sum shiny-server--amd64.deb
Si les sommes de contrôle ne correspondent pas, téléchargez à nouveau le fichier et réessayez de vérifier son intégrité avant de poursuivre.
Parce que Shiny Server dépend de GDebi - un outil qui installe des packages deb locaux tout en résolvant et installant des dépendances supplémentaires - pour son installation, vous devrez mettre à jour votre liste de packages, puis installer ensuite le package + gdebi-core +
.
sudo apt-get update
sudo apt-get install gdebi-core
Vous êtes maintenant prêt à installer Shiny Server.
sudo gdebi shiny-server--amd64.deb
Tapez + y +
lorsque GDebi vous demande de confirmer que vous souhaitez installer le paquet.
[Secondary_label Output]
Shiny Server
Shiny Server is a server program from RStudio, Inc. that makes Shiny applications available over the web. Shiny is a web application framework for the R statistical computation language.
Do you want to install the software package? [y/N]:
À ce stade, la sortie devrait indiquer qu’un service nommé + ShinyServer +
est à la fois installé et qu’un service + active +
Systemd. Si le résultat indique qu’il ya un problème, retracez vos étapes précédentes avant de continuer.
[Secondary_label Output]
...
● shiny-server.service - ShinyServer
Loaded: loaded (/etc/systemd/system/shiny-server.service; enabled; vendor preset: enabled)
Active: since Fri 2017-10-13 14:24:28 UTC; 2 days ago
...
Ensuite, vérifiez que Shiny Server écoute effectivement sur le port + 3838 +
.
sudo netstat -plunt | grep -i shiny
En cas de succès, la sortie comprendra la ligne suivante:
Outputtcp 0 0 0.0.0.0:3838 0.0.0.0:* LISTEN 18749/shiny-server
Si votre sortie ne ressemble pas à celle-ci, revérifiez votre terminal pour d’autres avertissements et messages d’erreur.
Maintenant, modifiez le pare-feu pour autoriser le trafic sur Shiny Server.
sudo ufw allow 3838
Enfin, pointez votre navigateur sur + http: //: 3838 +
pour afficher la page d’accueil par défaut de Shiny Server, vous souhaitant la bienvenue sur Shiny Server et vous félicite pour votre installation.
Les serveurs Shiny et Shiny sont maintenant tous deux installés et testés. Par conséquent, sécurisons la configuration en configurant Nginx pour qu’il serve de proxy inverse et achemine tout le trafic sur HTTPS.
Étape 3 - Sécurisation du serveur Shiny avec un proxy inverse et un certificat SSL
Au cours de cette étape, vous allez configurer Nginx pour qu’il transfère les demandes entrantes à Shiny Server via WebSocket, un protocole de messagerie entre serveurs Web et clients.
Comme nous voulons créer des variables de configuration utilisables par tous les blocs de serveur Nginx, ouvrez le fichier de configuration principal de Nginx, + nginx.conf +
, pour le modifier.
sudo nano /etc/nginx/nginx.conf
En utilisant le module map de Nginx, créez des variables pour les valeurs dont WebSocket a besoin en copiant la directive suivante dans le bloc + http +
:
/etc/nginx/nginx.conf
http {
...
# Map proxy settings for RStudio
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
}
La directive + map +
compare + $ http_upgrade +
- la valeur de l’en-tête * Upgrade * du client - aux conditions entre accolades. Si la valeur est + '' +
, + map +
crée la variable + $ connection_upgrade
et la définit sur` + close`. Sinon, + map +
crée la variable + $ connection_upgrade
et la définit sur la valeur par défaut,` + upgrade`.
Enregistrez votre travail et fermez le fichier pour continuer.
Ensuite, créez un bloc de serveur Nginx complètement nouveau, de sorte que vous disposiez toujours du fichier de configuration par défaut vers lequel revenir si vous rencontriez un problème ultérieurement.
sudo nano /etc/nginx/sites-available/
Créez un nouvel ensemble de directives pour Shiny Server en copiant / collant les éléments suivants dans le nouveau fichier:
example.com '> / etc / nginx / sites-available /
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name ;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name ;
ssl_certificate /etc/letsencrypt/live//fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live//privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
location / {
proxy_pass http://:3838;
proxy_redirect http://:3838/ https://$host/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 20d;
}
}
L’effet net de cette configuration est que toutes les demandes entrantes adressées au serveur sur les ports + 80 +
et + 3838 +
sont redirigées pour utiliser HTTPS sur le port + 443 +
.
Voici un aperçu des aspects les plus complexes de cette configuration:
-
* return *: Crée une redirection permanente pour les demandes entrant en tant que HTTP pur vers HTTPS.
-
* proxy_pass *: Indique à Nginx de transférer les demandes arrivant à la racine de l’application du serveur Web vers l’adresse IP du serveur à l’écoute sur le port
+ 3838 +
. -
* proxy_redirect *: réécrit la chaîne entrante,
+ http: //: 3838 / +
, sur son équivalent HTTPS sur le serveur qui traite la demande. La variable+ $ host +
correspond au nom d’hôte du serveur sur lequel Nginx est en cours d’exécution. -
* proxy_set_header *: redéfinit ou ajoute des champs à l’en-tête de requête transmis au serveur mandaté.
-
* proxy_read_timeout *: définit un délai d’attente pour la lecture d’une réponse du serveur mandaté entre deux opérations de lecture successives.
Enregistrez et fermez le fichier pour continuer.
Activez ensuite le nouveau bloc serveur en créant un lien symbolique dans le répertoire + / etc / nginx / sites-enabled +
.
sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
De plus, comme notre nouveau bloc de serveur gère désormais toutes les demandes sur le port + 80 +
, vous pouvez désactiver le bloc par défaut en supprimant le lien symbolique qui s’y trouve dans le répertoire + sites-enabled +
.
sudo rm -f /etc/nginx/sites-enabled/default
Maintenant, testez votre nouvelle configuration avant d’activer les modifications.
sudo nginx -t
Si vous rencontrez des problèmes, suivez les instructions fournies pour les résoudre.
Une fois que votre syntaxe est correcte et que votre test est réussi, vous êtes prêt à activer toutes les modifications en rechargeant Nginx.
sudo systemctl restart nginx
Une fois Nginx redémarré, vérifiez que votre serveur Shiny répond aux demandes via HTTPS en pointant votre navigateur sur + https: // +
. Vous devriez voir la même page d’accueil par défaut Shiny Server que celle que vous avez vue à la fin de l’étape 2.
Ensuite, vérifiez que les demandes HTTP entrantes sont redirigées vers HTTPS en tapant + http: // +
dans la barre d’adresse de votre navigateur. Si cela fonctionne correctement, vous devriez être automatiquement redirigé vers + https: // +
.
Shiny Server est maintenant sécurisé avec un proxy inverse et un certificat SSL. Vous êtes donc prêt à configurer votre configuration pour les documents interactifs R Markdown.
Étape 4 - Hébergement de documents R interactifs
Shiny Server est utile non seulement pour l’hébergement d’applications Shiny, mais également pour l’hébergement de documents interactifs R Markdown.
À ce stade, vous disposez d’un serveur Shiny qui peut héberger des applications Shiny, mais il ne peut pas encore héberger de documents interactifs R Markdown car le package + rmarkdown +
R n’est pas installé.
Donc, en utilisant une commande qui fonctionne comme le lien: # step-1-% E2% 80% 94-installation-brillante [une de l’étape 1] pour installer le paquet Shiny, installez + rmarkdown +
.
sudo su - -c "R -e \"install.packages('rmarkdown', repos='http://cran.rstudio.com/')\""
Puis, vérifiez l’installation en allant sur + https: /// sample-apps / rmd / +
. Vous devriez voir un document interactif R Markdown dans votre navigateur. De plus, si vous revenez à + https: // +
, le message d’erreur que vous avez reçu précédemment devrait maintenant être remplacé par du contenu dynamique.
Si vous recevez un message d’erreur, suivez les instructions à l’écran et examinez la sortie de votre terminal pour plus d’informations.
La configuration de votre serveur Shiny est complète, sécurisée et prête à servir les applications Shiny ainsi que les documents Interactive R Markdown.
Conclusion
Dans ce didacticiel, vous avez configuré et sécurisé un serveur Shiny entièrement opérationnel pouvant héberger des applications Shiny et des documents interactifs R Markdown.
Pour construire sur votre configuration actuelle, vous pouvez:
-
Apprenez à gérer et à personnaliser le serveur selon vos besoins avec le Shiny Server Guide de l’administrateur.
-
En savoir plus sur l’écriture d’applications Shiny, avec les tutorials sur rstudio.com.
-
Pour en savoir plus sur la rédaction de documents interactifs R markdown, consultez la page R Markdown sur rstudio.com.