web-dev-qa-db-fra.com

Déployer l'application R shiny en tant qu'application autonome

J'ai développé une application RShiny que je voudrais partager en interne avec mes collègues (L'hébergement de l'application sur un serveur n'est pas une option à ce stade).

J'explorais diverses options et je suis tombé sur une technique pour regrouper votre application en tant qu'application de bureau autonome, avec un fichier d'installation, que vous pouvez ensuite partager et distribuer. (L'approche est expliquée ici & ici ) Ceci est assez soigné, car les utilisateurs qui l'installent n'ont pas besoin d'avoir R (et tout autre package requis) pour installer et exécuter l'application (il a des versions portables de R, chrome etc)

J'ai pu suivre l'approche et créer une application de bureau autonome, avec un fichier d'installation, que je peux maintenant commencer à partager.

Cependant, c'est ma préoccupation: Idéalement, je ne voudrais pas que mes utilisateurs puissent accéder au code source. Existe-t-il un moyen de restreindre cet accès? Dans le tutoriel (le premier lien que j'ai posté), voici ce que dit l'auteur:

*

Enfin, gardez à l'esprit que votre code source est facilement accessible. Si cela vous préoccupe (par exemple, si vous distribuez à un client qui ne devrait pas avoir accès au code), le mieux que vous puissiez faire est d'empêcher l'accès en compilant d'abord le code source sensible dans un package binaire. Cela dit, tout utilisateur connaissant R (et ayant une intention suffisante) peut simplement vider le code sur la console.

*

Existe-t-il de meilleures façons plus infaillibles d'empêcher l'accès?

Merci!

24
Dataminer

Je ne sais pas si ce serait un bon ajustement sur la question de l'obscurité du code, mais le package RInno est conçu pour aider avec le problème de sécurité des données, c'est-à-dire lorsqu'une entreprise ne veut pas partager ses données avec un tiers. Il automatise également le processus que vous avez référencé ci-dessus et vous permet de connecter votre application à GitHub/Bitbucket pour diffuser des mises à jour vers des applications brillantes installées localement via des appels d'API au démarrage.

Pour commencer:

install.packages("RInno")
require(RInno)
RInno::install_inno()

Il vous suffit ensuite d'appeler deux fonctions pour créer un cadre d'installation:

create_app(app_name = "myapp", app_dir = "path/to/myapp")
compile_iss()

Si vous souhaitez inclure R pour vos collègues qui ne l'ont pas installé, ajoutez include_R = TRUE à create_app:

create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)

Par défaut, il inclut shiny, magrittr et jsonlite, donc si vous utilisez d'autres packages comme ggplot2 ou plotly, ajoutez-les simplement à l'argument pkgs. Vous pouvez également inclure des packages GitHub à l'argument remotes:

create_app(
    app_name = "myapp", 
    app_dir  = "path/to/myapp"
    pkgs     = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"),
    remotes  = c("talgalili/installr", "daattali/shinyjs"))

Si vous êtes intéressé par d'autres fonctionnalités, consultez FI Labs - RInno . Si vous souhaitez un guide sur la façon de le connecter à GitHub/Bitbucket, consultez le guide Installation continue :).

7
Jonathan Hill

Il existe désormais un moyen de transformer une application Shiny en une application Electron autonome (qui est une application de bureau, utilisée pour des applications comme Slack). Pour en savoir plus, voir cette excellente présentation from useR 2018, qui contient d'autres liens vers les dépôts GitHub.

J'espère que ceci vous aide.

6
p0bs

Je ne connais pas cette approche, est-ce courant? Personnellement, je ne l'ai jamais vu. Il semble que ce que vous faites soit de regrouper R, Shiny, un navigateur Web et votre code dans un fichier. C'est comme si le client installe R, Chrome, brillant et exécute votre code, mais il fait tout cela en un seul clic. Vous donnez littéralement à l'utilisateur votre code. Je ne sais pas comment cela fonctionne, mais si l'auteur lui-même a affirmé que le client serait en mesure de voir le code source, cela me semble logique et je ne pense pas que vous puissiez l'éviter.

Pourquoi ne pas simplement héberger le fichier sur un serveur brillant ou shinyapps.io? Le client ne verra alors pas votre code. Aussi, est-ce vraiment si important qu'ils ne puissent pas voir votre code? Souvent, les gens ont peur que les autres voient leur code, mais en réalité, personne ne se soucie vraiment de regarder le code des autres et de le voler. Sauf si vous avez un code breveté très propriétaire et avancé.

4
DeanAttali