SK8 - Gestion et hébergement d’applications R Shiny sur des infrastructures INRAE

19 septembre 2023

Introduction

Shiny, c’est quoi ? 🤔


  • Shiny est un package R qui permet de développer facilement des applications web interactives dans une syntaxe R très simple (pouvant être complétée par du HTML / CSS / JS pour les applications les plus abouties).

  • Outil principalement utilisé pour l’analyse et la visualisation de données (mais pas que)

Un exemple

CI-TIQUE Tracker

Quelques notions nécessaires

Continuous Integration / Continuous Development (CI/CD)

  • Suite d’instructions automatiques lors de mise à jour de code

  • Permet d’appliquer des tests automatiques (sécurité) ou encore d’effectuer des actions (publication de données, pages web, etc.)

  • Piloté par exemple par un fichier .gitlab-ci.yml

gitlab-ci.yml
01-Publier:
  stage: Gérer mon application
  needs: ["Construire-l-application"]
  image: curlimages/curl:latest
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $MISE_A_JOUR_AUTOMATIQUE == "true"'
      when: on_success
      allow_failure: false
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $MISE_A_JOUR_AUTOMATIQUE == "false"'
      when: manual
      allow_failure: true
  before_script:
    - ACTION=$SK8_DEPLOY
  script:
    - *commande-job

Quelques notions nécessaires

Docker

  • Permet de Containeuriser des logiciels, applications

  • Création d’une image Docker à partir d’une recette : le Dockerfile

  • Facilite la diffusion (gestion des dépendances systèmes, etc.)

Dockerfile
FROM rocker/verse:4.2.1
RUN apt-get update && apt-get install -y  cmake imagemagick libcurl4-openssl-dev [...]
RUN mkdir -p /usr/local/lib/R/etc/ /usr/lib/R/etc/
RUN echo "options(repos = c(CRAN = 'https://cran.rstudio.com/'), download.file.method = 'libcurl', Ncpus = 4)"
RUN R -e 'install.packages("remotes")'
RUN Rscript -e 'remotes::install_version("magrittr",upgrade="never", version = "2.0.3")'
RUN Rscript -e 'remotes::install_version("htmltools",upgrade="never", version = "0.5.5")'
[...]
RUN Rscript -e 'remotes::install_github("rstudio/sass@2f1f152d84c162ccb9aba1c056e3548079d669d9")'
RUN mkdir /build_zone
ADD . /build_zone
WORKDIR /build_zone
RUN R -e 'remotes::install_local(upgrade="never")'
RUN rm -rf /build_zone
EXPOSE 3838
CMD R -e "options('shiny.port'=3838,shiny.host='0.0.0.0');ShinyIDEA::run_app()"

Quelques notions nécessaires

Kubernetes

Solution permettant de distribuer intelligemment des container Docker aux utilisateurs.

Les applications Shiny à INRAE

Plusieurs constats…


  • Les applications R Shiny sont de plus en plus présentes dans notre environnement

  • Peuvent être développées par des néophytes comme par des développeurs chevronnés

  • Formidable outil de partage / valorisation et démocratisation des travaux menés dans l’institut

  • Problématique majeure et récurrente autour de l’hébergement 😩

Solutions existantes d’hébergement


Solutions d’hébergement propriétaires


Rapprochement Shiny/Docker


Solutions existantes à INRAE

  • Multiples solutions ShinyServer OpenSource locales

  • Très limitées et problématiques en termes d’administration ⚠️

Une solution intéressante à l’échelle d’une unité (BioSP)

  • ShinyProxy (Docker) https://shiny.biosp.inrae.fr
  • Gestion du code via GitLab CI/CD
  • Applications conteneurisées
  • Abstraction et meilleure gestion de la partie système

Projet SK8 : Une réponse plus globale

Le projet SK8

R-Shiny Kubernetes Service \(\rightarrow\) SK8SS \(\rightarrow\) SK8 🛹

Le projet SK8 : Pourquoi ?

Besoins en augmentation d’hébergement d’apps Shiny

  • Facile d’accès, pérenne et évolutif
  • Scalable (élastique)
  • Sécurisé

Finalité

  • Avoir une meilleure visibilité et harmonisation des travaux de l’institut

Contrainte forte

  • Doit rester dans l’institut
  • Doit répondre aux besoins des agents

Déroulé du projet

  • Projet d’unité BioSP 2019, porté par Jean-François Rey \(\rightarrow\) CATI IMOTEP

  • V1 (2021) : Etude de faisabilité, état des lieux INRAE, création des groupes de travail

  • V2 (2022) : Passage d’un projet CATI-IMOTEP \(\rightarrow\) Inter-CATIs et ouverture de la version Bêta

  • V2 (2023) : Passage de l’infra en version kickflip, refonte quarto documentation & site web

Qui paye ? 💶

  • Financements SAPI & DipSO 2022/2023 (Formation et hackatons)
  • Financements futurs (+ pérennisation) en cours de recherche

Le projet SK8 : C’est qui ?

  • \(\approx\) 30 ITA (\(\approx\) 15 actifs, noyau dur de 5 agents)

  • \(\neq\) CATIs (10), Unités, Départements scientifiques et directions

  • Statisticiens, Bioinformaticiens, DevOps, Administrateurs systèmes…

  • 2 groupes de travail, réunions mensuelles :

    • Groupe Utilisateurs

    • Groupe DevOps

Le projet SK8 : C’est qui ?


SK8 : Ca marche comment ?

Infrastructure générale


Schéma simplifié du fonctionnement

Du point de vue utilisateur

Le catalogue SK8


L’utilisation d’un catalogue (via ShinyProxy) permet

  • De disposer d’un hub centralisé qui référence toutes les applications

  • De déployer une instance distincte pour chaque utilisateur d’une application

Focus app demande d’hébergement

  • Développé avec {shinysurveys}

  • Connexion OAuth via la ForgeMIA (API GitLab )

  • Listes déroulantes personnalisées en fonction de l’utilisateur ()

  • Possibilité d’upload un logo pour l’app : API pour l’intégrer dans une issue GitLab

  • Création du corps markdown d’une issue remplie avec les infos saisies ({glue})

  • Envoi d’un mail à l’utilisateur (serveur SMTP : dix-sk8)

🛹 SK8 : Un projet qui roule comme sur des roulettes ? 🛹

Bilan

  • Plateforme ouverte en version bêta

  • ⚠️ Les use-case les plus complexes sont les bienvenus pour tester le service ! ⚠️

  • Travail innovant mêlant de nombreuses technologies (R, Docker, Gitlab, CI/CD…)

  • Projet mêlant une grande diversité de profils au travers de 10 CATIs

  • Améliorations à venir au fil des travaux des groupes Users & Devops…

  • … Mais principalement basé sur du volontariat !

Et la suite ?

  • Intégration des cas d’usage CATIs

  • Traitement des retours utilisateurs

  • Poster présenté aux rencontres R 2023 à Avignon classé 1er 🏆

Et la suite ?

Chantiers en cours 🏗️

  • Pérennisation de l’infrastructure (Analyses, Études et solutions possibles)
  • Données persistantes (Solution : Stockage S3 externe)
  • Monitoring et log
  • Authentification
  • Intégration de Rstudio Server

Merci ! Des questions ?



Slides consultables ici :
https://davidcarayon.github.io/slides/talks/CITISES_SK8/

Slides made with …

https://github.com/davidcarayon/InraeThemes