2015-11-04 21 views
10

Ho sviluppato un'applicazione RShiny che vorrei condividere internamente con i miei colleghi (l'hosting dell'applicazione su un server non è un'opzione in questa fase).Distribuzione dell'applicazione R shiny come applicazione autonoma

Stavo esplorando varie opzioni e mi sono imbattuto in una tecnica per il raggruppamento della tua app come applicazione desktop autonoma, con un file di installazione, che è quindi possibile condividere & distribuire. (L'approccio è spiegato herehere) Questo è abbastanza pulito, perché gli utenti che lo installano non hanno bisogno di R (e di altri pacchetti richiesti) per installare ed eseguire l'app (ha versioni portatili di R, chrome ecc.)

Sono stato in grado di seguire l'approccio e creare un'applicazione desktop autonoma, con un file di installazione, che ora posso iniziare a condividere.

Tuttavia, questa è la mia preoccupazione: Idealmente, non vorrei che i miei utenti siano in grado di accedere al codice sorgente. C'è un modo per limitare tale accesso? Nel tutorial (il primo link che ho postato), questo è quello che dice l'autore:

*

Infine, tenere a mente che il codice sorgente è facilmente accessibile. Se è questo è un problema per te (ad esempio se stai distribuendo a un client che non dovrebbe avere accesso al codice) il meglio che puoi fare è impedire l'accesso compilando il codice sorgente sensibile in un pacchetto binario . Detto questo, qualsiasi utente che conosce R (e ha intenzioni sufficienti) può semplicemente scaricare il codice nella console.

*

Ci sono dei migliori, più modi infallibili per impedire l'accesso?

Grazie!

risposta

2

Non ho familiarità con questo approccio, è comune? Personalmente non l'ho mai visto. Sembra che essenzialmente ciò che stai facendo sia raggruppare R, Shiny, un browser web e il tuo codice in un file. È come se il client installasse R, Chrome, lucido e eseguisse il codice, ma lo fa tutto in un clic. Stai letteralmente dando all'utente il tuo codice. Non so come funzioni, ma se lo stesso autore ha affermato che il client sarà in grado di vedere il codice sorgente, allora per me è logico e non penso che tu possa evitarlo.

Perché non ospitare il file su un server lucido o su shinyapps.io? Il client non vedrà il tuo codice allora. Inoltre, è davvero così importante che non possano vedere il tuo codice? Molte volte le persone temono che gli altri vedano il loro codice, ma in realtà a nessuno interessa veramente guardare il codice degli altri e rubarlo. A meno che tu non abbia un codice brevettato molto proprietario e avanzato.

+0

Grazie per i vostri commenti! Ho pensato a shinyapps.io..E magari lo esplorerò ulteriormente. Ma la mia preoccupazione era costata (in una certa misura) e, cosa più importante, la parte sulla privacy dei dati (dato che i dati utilizzati dall'app sono abbastanza sensibili). E l'organizzazione per cui lavoro, ha alcune linee guida abbastanza rigide sulla privacy dei dati e questioni correlate. Quindi potrei imbattermi in alcuni blocchi stradali lì. In secondo luogo, non è terribilmente importante che gli utenti non debbano vedere il codice. Quindi, se non esiste un modo semplice per mascherare il codice, finirò per spedire solo l'intero pacchetto. – Dataminer

+0

Il costo è gratuito se non lo stai usando troppo. Se sei preoccupato per costi e privacy, allora [usa il tuo server lucido] (http://deanattali.com/2015/05/09/setup-rstudio-shiny-server-digital-ocean/). In questo modo è ancora ospitato da te e tu lo controlli. Immagino che dipenda se vuoi che l'app sia completamente spedita al client o se vuoi ospitarla. È dato a loro come standalone, significa che non è possibile aggiornarlo e correggere i bug. –

2

Non sono sicuro che sarebbe perfetto per la domanda di oscuramento del codice, ma il pacchetto RInno è progettato per risolvere il problema della sicurezza dei dati, ad esempio quando un'azienda non desidera condividere i propri dati con un terzo festa. Inoltre, automatizza il processo di cui sopra e ti consente di collegare la tua app a GitHub/Bitbucket per distribuire gli aggiornamenti alle app lucide installate localmente tramite chiamate API all'avvio.

per iniziare:

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

Poi basta chiamare due funzioni per creare un quadro di installazione:

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

Se si desidera includere R per i vostri collaboratori che don 't averlo installato, aggiungere include_R = TRUE a create_app:

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

Per impostazione predefinita include lucido, magrittr e jsonlite, quindi se si utilizzano altri pacchetti come ggplot2 o plotly, è sufficiente aggiungerli all'argomento pkgs. È inoltre possibile includere pacchetti GitHub per l'argomento remotes:

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

Se siete interessati ad altre caratteristiche, controlla FI Labs - RInno. Se desideri una guida su come collegarlo a GitHub/Bitbucket, consulta la guida Continuous Installation :).

+1

'install_inno()' è un ostacolo dato che il download eseguibile non mi è permesso a causa della sicurezza dei dati. Puoi suggerire una soluzione alternativa? – Divi

+0

Sicuro! Dovrai ottenere qualcuno che abbia il permesso di installare Inno Setup - http://www.jrsoftware.org/isdl.php. Il pacchetto RInno richiede Inno Setup per creare programmi di installazione per le tue app Shiny. –

Problemi correlati