19 septembre 2023
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)
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
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()"
Kubernetes
Solution permettant de distribuer intelligemment des container Docker aux utilisateurs.
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 d’hébergement propriétaires
Rapprochement Shiny/Docker
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)
Besoins en augmentation d’hébergement d’apps Shiny
Finalité
Contrainte forte
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 ? 💶
\(\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
git clone | add | commit | push
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
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
)
✅ 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 !
Intégration des cas d’usage CATIs
Traitement des retours utilisateurs
Poster présenté aux rencontres R 2023 à Avignon classé 1er 🏆
Chantiers en cours 🏗️
Slides consultables ici :
https://davidcarayon.github.io/slides/talks/CITISES_SK8/
Webinaire CATI CITISES | 19/09/2023