IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Cherche retour d'expérience sur shiny, shiny server et web hosting


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 905
    Billets dans le blog
    54
    Par défaut Cherche retour d'expérience sur shiny, shiny server et web hosting
    Salut,

    je voudrais savoir si certains d'entre vous on déjà utilisé le Framework R Shiny (http://shiny.rstudio.com/) pour développer des web apps en R. S'ils ont utilisé Shiny Server (la version Open Source gratuite ou la version Pro payante) ou le web hosting proposé par https://www.shinyapps.io/ pour distribuer leurs applications soit sur un réseau interne (avec le serveur), soit sur Internet (avec le serveur ou le web hosting) ?

    J'ai pu mettre en place hier sans difficulté la version OpenSource de Shiny Server sur une VM tournant sous Ubuntu 14.04 pour créer des tests basiques (ceux du site de Shiny).

    Je cherche un retour d’expériences de personnes qui auraient déjà utilisé ce genre de solutions.
    Les coûts impliqués, ce qui est performances ou occupations mémoire en fonction de nombre d'utilisateurs connectés, la sécurité, etc.

    Au niveau du serveur, est-ce que la version OpenSource est suffisamment robuste et sécurisée en soit ou mieux vaut-il se rabattre sur la version pro histoire d'avoir une once de support technique et plus de features ?

    Dans le cas d'une utilisation du service d’hébergement, est-ce que le code de l'application se doit d’être en R uniquement ou est-il possible de spawner des process natifs, etc.
    Y a-t-il des limitations au niveau des pages web elles-mêmes qui sont placées sur l’hébergement ou est-ce que n'importe quoi de HTM5+JavaScript (jquery, boostrap, etc.) fonctionne ?

    Merci pour tout information que vous pourriez m'apporter.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 905
    Billets dans le blog
    54
    Par défaut
    Bon vu qu'on a pas mal avancé sur le sujet depuis mai dernier, je vais pouvoir me répondre à moi même, et pointer sur les blogs posts que j'ai créé à ce propos pour que ça soit utile à d'autres :
    • Nos scientifiques ont pu sans problème développer de petites applications qui démontraient la faisabilité de la chose et qui peuvent se lancer er local depuis les dernières versions bêta de Rstudio.
    • On a pu installer et configurer en interne un serveur R-shiny sur Ubuntu ;
    • On a pu egalement installer et configurer un serveur R-shiny sur Raspberry Pi ;
    • Pour l’hébergement web on a finalement opté pour un hébergement directement sur shinyapp.io plutôt que de mettre en place notre propre serveur ; on a opté pour la solution a $99 / mois sachant qu'on va probablement descendre à un tarif plus bas d'ici 1~2 mois (ici le but était de rendre une app dispo pour une conf de ~200 personne mais une fois la conf passée, on aura sans doute beaucoup moins de visite. On remontera notre forfait quand on aura plus d'apps en ligne je pense).


    L'upload peut directement se faire depuis Rstudio soit via le bouton idoine dans la barre d’icônes soit via une fonction R. Attention cependant : le nom du répertoire de stockage qui contient les fichiers server.R et ui.R sera aussi le nom de l'application sur le cloud ainsi que dans l'URL finale. Éviter donc les noms en haute case ou contenant des espaces ou des _.

    L'interface d'amin sur shinyapps permet de monitorer le nombre de connections, la taille de la mémoire utilisée et le temps horaire consommé pour chaque app (utile pour la gestion du quota suivante forfait). En fait, j'ai l'impression que chaque app lance une VM contenant une instance de shinyserver. VM qui sera mise en pause lorsque plus aucune connexion n'est active (par défaut un navigateur se déconnecte d'une app après 15min). De même, la VM est éteinte et relancée lorsqu'on upload une nouvelle version de l'app (de ce fait le packaging + upload peut prendre quelques minutes même pour une app qui ne fait que quelques dizaines de kilo octets de sources R + qq CSS et un ou deux petits PNG pour la deco). Après ça marche bien mais je ne sais pas si c'est lié à R ou à leur serveur (ou les deux) mais ce n'est pas non-plus d'une rapidité d’exécution flagrante.

    Un soucis que j'ai noté par rapport à ce que les scientifiques ont produit c'est que R produit des graphes sous forme de bitmaps (via ggplot2) et donc qu'il faut mettre du code dans server.R pour redimensionner le graphe lors que la zone d'affichage dans le navigateur change (si on a opté entre autre pour layout fluide via bootstrap) ce qui implique de le régénérer. De plus, du coup l'image produite est plus grosse lorsqu'on visionne l'app sur un périphérique supportant le hdpi/retina (ici mon iPhone) même si elle donne l'impression de s'afficher en plus petit ce qui engendre un plus long temps d'attente et un plus gros transfert de données. On a pas testé sur des moniteurs capables de faire du 4K mais il est possible que la bitmap produite soit assez énorme en fait ce qui peut poser des soucis de consommation mémoire ou d'allocation de buffer dans R (et puis de temps de transfert sur le réseau). Il doit être possible d’utiliser des graphes HTML/Javascript (démo Google chart) mais on a pas vraiment eut le temps de tester ça sans parler du fait qu'on était pas sur de pouvoir les customiser comme on le voulait.

    Quelques petits problème mineurs et non-critiques en cours :
    • J'ai noté ici et là que certains contrôles HTML produits par shiny ou des libs R ont leur style codé en dur ce qui rend l'usage d'une CSS externe pénible. Genre il faut coder des fonctions R pour aller bidouiller le contenu HTML produit à grand coup de regexp pour retirer les styles par défaut ou y affecter des classes manquantes.
    • Le tag title du header s'affiche correctement sur un test local via Rstudio mais pas sur shinyapps.io
    • Même chose pour la favicon de la page.


    Donc du coup j'ai cherché à ouvrir des tickets auprès du support mais le compte shinyapp n'est pas reconnu par le support de Rstudio (le bouton aide de shinyapps redirige sur le site de shiny qui envoie sur celui de Rstudio). En attendant, j'ai du laisser un message dans leur groupe Google. J'verrai bien quand ils répondront.


    Pour le reste, il faut que je remette au gout du jour mon HTML5/bootstrap...

    Et des que je pourrai je vais tester egalement comment connecter Google Analytics sur l'app pour fournir plus de stats que celles de l'interface d'admin du site.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre expérimenté
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Par défaut
    Citation Envoyé par bouye Voir le message
    [...] Un soucis que j'ai noté par rapport à ce que les scientifiques ont produit c'est que R produit des graphes sous forme de bitmaps (via ggplot2) et donc qu'il faut mettre du code dans server.R pour redimensionner le graphe lors que la zone d'affichage dans le navigateur change. [...]
    Bonjour et merci de ce retour,
    Les graphiques produits avec ggplot2 peuvent être sauvegardés dans plusieurs formats. Si, par exemple, vous optez pour le SVG, il n'y aura aucun besoin de rasteriser le rendu, par conception les SVG sont redimensionnables sans perte de la qualité du rendu. Une fois un graphique généré (appelons x la variable qui le contient), on le sauvegardera ainsi :
    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    ggsave(plot = x, filename = "un_graphique.svg")
    Les arguments de ggsave sont décrits dans la doc :
    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    help("ggsave", package = "ggplot2")

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 905
    Billets dans le blog
    54
    Par défaut
    Merci mais le problème si j'ai bien compris (garde a l'esprit je suis un dev spe Java, que R est l’apanage des scientifiques et que Shiny est nouveau pour nous tous) n'est pas tout a fait identique. Ici on ne fait pas explicitement la sauvegarde du graphe en invoquant ggsave() ; c'est Shiny qui s'en charge... probablement.

    Par exemple, dans ui.R :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    library(shiny)
     
    shinyUI(
      fluidPage(
        titlePanel("Test Charts"),
        plotOutput('plotChart', width="100%", height = "475px")
      )
    )
    Ce qui invoquera la fonction plotChart dans server.R :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    library(shiny)
     
    shinyServer(function(input, output) {
        output$plotChart <- renderPlot({
            [...]
            hist([...])
        })
    }
    Il semble qu'ensuite renderPlot() invoque une autre fonction de Shiny qui est renderPNG(). L'image est ensuite injectée dans le tag <img> de la page. La doc indique cependant qu'il est possible de fournir du contenu qui soit perceptibles d’être injecté dans un [c]<div>[c/] a la place ce qui permettrait d'utiliser des libs HTML5 plutôt que des graphes bitmaps. En tout cas, a ce niveau, output est censé contenir du HTML donc en fait il est possible d'injecter tout et n'importe quoi (en théorie).

    Après on peut faire comme dans l'exemple du binding sur Google Chart et utiliser d'autres fonctions customs pour déclarer la GUI au lieu de plotOutput(). J'ai un peu testé avec Google Chart mais je ne suis pas fan du résultat, entre autre on ne peut pas vraiment spécifier le nombre de bins pour un histogramme c'est la lib qui choisit automatiquement.

    Apparemment il est possible de bidouiller pour utiliser des lib, tierces : Interactive Visualizations with rCharts and Shiny, mais le code donné ici semble être pour une version plus ancienne de Shiny et la lib semble avoir des soucis au niveau de sa licence d'utilisation.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre expérimenté
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Par défaut
    Bonjour,
    renderPlot et similaires ne sont pas utiles au rendu du SVG qui, par conception, n'est que du texte. Dans l'application, il suffira donc d'afficher du texte.

    ui.R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    shinyUI(fluidPage(
        titlePanel(title = "Vérifier Si On Peut Charger Un SVG"),
     
        mainPanel(fluidRow(
            div(id = "zoneRendu",
                htmlOutput("renduSVG")
            )
        ))
    ))
    server.R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    shinyServer(function(input, output) {
        invisible(sapply(c("ggplot2", "shiny"), library, character.only = TRUE))
     
        output$renduSVG <- renderText({
            graphique <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) +
                geom_point() +
                theme_light()
     
            ggsave(plot = graphique, filename = "graphique.svg", width = 6, height = 4)
     
            readLines("graphique.svg")
        })
    })

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Par défaut
    Bonjour,

    En premier lieu, je tiens à vous remercier pour ce retour d'expérience, les posts sur Shiny server sont rares!

    Ensuite, étant nouveau sur ce site, je vais rapidement me présenter et vous dire ce que nous sommes en train de faire : je suis statisticien au sein de l'ITSAP - Institut de l'abeille. Nous sommes en train de réaliser un projet ciblant la création d'une base de données (MySQL), sur lesquelles des interfaces de visualisation des données se reposeront (il y en aura plusieurs dédiées à des types de données très différents : structure des colonies, analyses chimiques, sélection, etc.). Étant (très) débrouillard sur R et curieux de l'informatique, je me suis donc lancé sur Shiny et ce que j'ai réussi à produire nous convient très bien en terme de rendu. Cependant, la question se pose de l'articulation avec la base de données, développée par des informaticiens avec qui je travaille et qui n'ont pas connaissance du fonctionnement de Shiny.

    En clair, ce que nous voulons créer est un portail web qui intègre :
    1 - Les outils d'administration de la base de données et de la gestion des données (saisie / extraction)
    2 - Les interfaces de visualisation des données, qui permettront de travailler directement ce que l'utilisateur aura constituer comme jeu de données à partir du menu "extraction".

    Le 1 sera développé en pHp par les informaticiens, le 2 en Shiny, essentiellement par moi.

    La question que nous nous posons est : est-il possible d'intégrer des applications Shiny dans un portail développé en pHp (je crois...)? Si oui, comment?

    Avez-vous fait qqch de similaire? Toute piste nous intéresse.

    Pour l'heure, nous avons vu que Shiny retournait du HTML, et l'idée énoncée par les informaticiens revient à l'installer dans une VM qui échangerait avec une autre (située sur le même serveur physique) dont le rôle est de gérer la base de données ainsi que le portail web global. Shiny ne serait donc utilisé que pour retourner du HTML, repris dans le portail. L'intérêt est que l'authentification et les droits seront gérés par l'infrastructure de la base, ce qui implique que la version gratuite de Shiny server nous suffirait. Cependant, sur toutes les docs que j'ai consulté, ce type de montage n'était pas évoqué. Il ne s'agit toujours que de la gestion de Shiny, et non de son intégration avec autre chose.

    Je n'ai pas les connaissances en informatiques de mes collègues, alors tout ça a un côté "boite noire" pour moi! Cependant, n'ayez pas peur d'entrer dans les aspects techniques, je ferai suivre aux collègues plus compétents que moi dans ce domaine.

    Merci d'avance pour toute suggestion.

    Cordialement.


    Edit : qq posts de forum à côté desquels j'étais passé, et qui apporte des pistes :
    http://stackoverflow.com/questions/1...nt-application

    "You could use Shiny Server as a proxy behind Apache or Nginx. In other words, you might have hhttp://your_application/shinyapp/ be proxied to your Shiny Server but have all other URLs served up another way."

    et https://groups.google.com/forum/?fro...ss/2VwEWXYJwYs

    où on peut lire :

    You can use an iframe -- that's actually what's done on the main RStudio Shiny page: http://www.rstudio.com/shiny/

    The code there is something like this:
    <iframe src="http://glimmer.rstudio.com/rstudio/faithful/" style="border: none; width: 440px; height: 500px"></iframe>

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Statisticien
    Inscrit en
    Septembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2016
    Messages : 7
    Par défaut
    Bonjour,

    Bonnes nouvelles, apparemment on peut passer outre les limitations imposées par Shinyserver open source. L'idée est de dupliquer l'appli que l'on souhaite mettre à disposition et de rediriger les utilisateurs vers celle qui est le moins chargée. De fait, on se retrouve donc avec plusieurs sessions qui travaillent en parallèle donc (comme dans la version pro)... J'ai trouvé 2 liens allant dans ce sens, l'un propose de faire ça avec une autre appli Shiny (l'utilisateur choisi sa session), l'autre le fait par un bash pour que ça reste transparent pour l'utilisateur :

    via shiny : http://jaehyeon-kim.github.io/2016/0...Balancing.html
    via un bash : http://withr.me/shiny-app-for-cpu-bound-task/

    Ça semble régler le problème...

    @ Bouye : j'apprécierai vraiment d'avoir ton avis au moins sur le deuxième (le post est plutôt court) car tu es bien plus à même que nous de juger de la pertinence de ce qui est proposé... Moi, sorti de R, j'entrave pas grand-chose En espérant que tu auras le temps. Merci d'avance.

    A+

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/07/2011, 10h03
  2. Réponses: 0
    Dernier message: 07/11/2009, 11h50
  3. Retours d'expérience sur SpringSource tc Server Developer Edition ?
    Par Ricky81 dans le forum EDI et Outils pour Java
    Réponses: 0
    Dernier message: 07/11/2009, 11h50
  4. Communiquez vos retours d'expérience sur Delphi .NET
    Par Laurent Dardenne dans le forum Delphi .NET
    Réponses: 11
    Dernier message: 12/08/2008, 15h46
  5. Vos retours d'expérience sur l'utilisation les SGBD Objet ?
    Par Kentin dans le forum Décisions SGBD
    Réponses: 17
    Dernier message: 15/09/2007, 08h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo