Déploiement Shiny sur votre propre Cloud
Introduction
L’objectif de ce chapitre est de vous permettre de déployer une application Shiny avec un nombre d’étapes limitées et de manière parfaitement autonome. Pour commencer, nous avons besoin de faire appel à un serveur pour abriter notre application. Nous vous proposons pour la suite de ce chapitre d’utiliser le service d’Oracle Cloud. Dans sa version gratuite, Oracle offre deux machines virtuelles suffisantes pour la mise en ligne d’une application dans des conditions professionnelles.
Une partie des manipulations s’effectueront sous un environnement Linux et feront l’objet de quelques explications pour les non-initiés. Pour le reste, nous vous proposons l’outil Webmin qui permet de s’affranchir du mode commande pour un certain nombre d’opérations et de gérer à distance notre machine Linux. L’application Shiny qui sera déployée à la fin de ce chapitre sera accessible au travers de son adresse IP uniquement. Libre à vous de la mapper sur votre nom de domaine personnel.
Location d’un serveur
Sur le site d’Oracle (www.oracle.com), créez un compte Cloud Account (attention de ne pas confondre avec Oracle Account). Sélectionnez l’offre gratuite comprenant deux instances de machine virtuelle et finalisez la création de votre compte.
Identifiez-vous en mode SSO (Single Sign-On) et accédez au dashboard d’Oracle Cloud. La connexion SSO permet, avec un seul "paquet" d’identifiants (SSL ou de type login/mdp), d’obtenir l’accès à plusieurs services ou applications sans avoir à s’identifier sur chacun d’entre eux. On peut se le représenter comme une identification "chapeau".
Une fois arrivé sur le dashboard d’Oracle, remarquez que certaines rubriques sont taggées Always Free Eligible. Oracle s’engage à ce que ces ressources soient maintenues en conditions, gratuitement, pendant plusieurs années.
Création d’une machine virtuelle
La première chose que nous allons faire est de créer une VM instance, qui est un serveur avec plusieurs services déjà préinstallés.
Création d’une instance
L’image de votre VM (Virtual Machine) est construite par défaut sous Linux (version 7.9) mais d’autres choix sont disponibles en version gratuite. Changeons le type d’image (bouton Edit) pour prendre une image faite sur Canonical Ubuntu. Pour gagner du temps, changeons le système d’exploitation en version 20.04 complète. Ces versions "complètes" sont des versions LTS (Long Term Support) avec la garantie d’un support actif jusqu’à cinq ans (corrections de bugs, patchs de sécurité, etc.). Les versions dites "minimum" sont des versions basiques qui demandent l’installation du moindre outil système.
Image de l’instance
La forme de l’instance (Shape) fait référence aux caractéristiques physiques de la VM que vous louez. Dans sa version gratuite, Oracle fournit une machine sur la base d’un processeur AMD, avec une seule CPU, 1 GB de mémoire et une capacité d’échange réseau de 0,48 Gbps. Ces caractéristiques sont modifiables mais attention, car certaines peuvent engendrer des frais supplémentaires...
Se connecter à distance à votre machine
Avant de créer notre instance, nous devons débuter la création d’un processus de connexion dit SSH. Le SSH (pour Secure Shell) est un protocole de connexion sécurisé qui repose en grande partie sur l’échange de clés de chiffrement (publique/privée) en début de connexion en guise d’authentification. Il est indispensable pour garantir la sécurité et l’intégrité de votre application.
1. Installation du client SSH
a. OpenSSH
Pour générer un protocole SSH, utilisez un logiciel comme OpenSSH ou encore PuTTY en fonction de vos habitudes et de votre système d’exploitation (www.openssh.com, www.putty.org). Si vous utilisez Windows 10, vous pouvez directement activer OpenSSH en allant dans les paramètres Windows, puis dans Paramètres - Applications - Applications et fonctionnalités - Fonctionnalités facultatives - Ajouter une fonctionnalité.
Le client SSH doit s’afficher dans la liste des fonctionnalités installées :
Client OpenSSH dans Windows
b. Git Bash
Pour pouvoir dialoguer avec notre machine distante, nous utilisons l’invite de commandes Git Bash (téléchargeable sur https://gitforwindows.org). Cela permet d’émuler une invite de commandes Unix depuis une machine MS-DOS.
Une fois Git Bash installé, déplacez-vous vers le dossier d’installation d’OpenSSH...
Ajout des composants logiciels de base
L’idée ici est de créer une machine "digne de ce nom", en installant préalablement plusieurs composants logiciels de manière à ce qu’ils soient disponibles sur toute la machine.
# à tout moment tout au long de ce processus vous pouvez vérifier quels paquets
sont installés
## vérification et sauvegarde pour info des paquets installés sur l'instance
sudo apt list > ma_liste_paquet.txt
view ma_liste_paquet.txt
#-------- Se créer une machine tout-terrain
# pour vous aider si toutefois vous en avez besoin pour certaines installations
sudo apt update
sudo apt-get install build-essential
sudo apt-get install software-properties-common dirmngr
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install libcairo2-dev
sudo apt-get install libxt-dev
sudo apt-get install xtail
sudo apt-get install wget
sudo apt-get install net-tools
# pour pouvoir accéder à des paquets hors dépôts
sudo apt-get install gdebi-core
# vérification de la version du compilateur g++
g++ --version
# python 2
sudo apt-get update
sudo apt-get install python
# python 3
sudo apt-get update
sudo apt install python3-pip ...
Installation de R et de Shiny
C’est enfin le moment pour nous d’installer R et Shiny sur notre machine Linux.
#-------- R et Shiny
# ajout repos du CRAN
# lire http://cran.rstudio.com/bin/linux/ubuntu/
# notre version ubuntu 20.04 LTS a pour petit nom "focal" (la
18.04 LTS s'appelait bionic)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
E298A3A825C0D65DFD57CBB651716619E084DAB9
sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/
ubuntu focal-cran40/'
# install R
sudo apt update
sudo apt install r-base
sudo apt install r-base-dev
# Test R
R --version
sudo R
q()
# ajouter la Personal Package Archive, qui permet un accès simple à de
nombreux packages R
# lire pour utiliser la Personal Package Archive https://launchpad.net/
~c2d4u.team/+archive/ubuntu/c2d4u4.0+
sudo apt update -qq
sudo add-apt-repository ppa:c2d4u.team/c2d4u4.0+
sudo apt update # car il faut que ce repo soit pris en compte par la suite !
# installation applications/packages importants
sudo apt update
sudo apt-get install r-cran-rcpp
sudo apt-get install r-cran-devtools
sudo apt-get install r-cran-rstan
sudo apt-get install r-cran-caret
sudo apt-get install r-cran-tidyverse
sudo apt-get install r-cran-reticulate
sudo...
Paramétrage réseau et Linux
1. Paramétrer le VCN (Virtual Cloud Network)
Notre objectif est de rendre accessibles les ports pour Shiny et d’autres applications que nous verrons plus tard. Un VCN nous permet d’interagir et de prendre la main sur notre système à distance, depuis votre machine (avec une interface graphique ou non). Par défaut, Oracle en a déjà créé un. Nous nous contenterons d’ajouter nos propres règles à la liste des règles déjà existantes.
Cliquez sur le nom de votre réseau subnet-XXXX-XXXX et éditez les règles pour obtenir le résultat comme suit :
-
Ouverture du port :3838 pour Shiny
-
Ouverture du port :80 pour Apache
-
Ouverture du port :10000 pour Webmin (PERL)
Règles VCN
2. Gestion du firewall
Regardons si le firewall d’Ubuntu est actif ou non :
sudo ufw status
Status: inactive
# pour activer/désactiver le pare-feu
sudo ufw enable
sudo ufw disable
Iptables est un logiciel Linux permettant d’accéder et de modifier les règles de sécurité de notre pare-feu lors des échanges de données entre notre machine et l’extérieur. On accède à la liste des règles en cours avec la commande iptable -L.
sudo iptables -L
Il existe trois types d’échanges (on peut se les représenter comme des chaînes de paquets d’informations) :
-
Les paquets entrants (Input)
-
Les paquets sortants (Output)
-
Les paquets en attente d’être transmis (Forward)
Ces chaînes peuvent être acceptées (ACCEPT), rejetées ou ignorées (REJECT ou DROP), mises en attente (QUEUE) ou renvoyées dans une autre chaîne (RETURN). Il est souvent conseillé de privilégier DROP au lieu de REJECT car DROP n’envoie aucune réponse après une sollicitation extérieure. Il attire donc "moins" l’attention en cas de tentative de connexion malveillante. Dans le cas d’un REJECT, notre firewall renvoie un message au client stipulant que la connexion est refusée.
Pour commencer, nous allons réinitialiser les règles du pare-feu et repartir ainsi sur une base "saine" avec la commande sudo ufw reset. Toutes les règles précédemment...