将 R Shiny 应用程序部署为独立应用程序
Posted
技术标签:
【中文标题】将 R Shiny 应用程序部署为独立应用程序【英文标题】:Deploying R shiny app as a standalone application 【发布时间】:2016-02-04 10:58:02 【问题描述】:我已经开发了一个 RShiny 应用程序,我想在内部与我的同事共享(在服务器上托管应用程序,现阶段不能选择)。
我正在探索各种选项,并且发现了一种将您的应用程序捆绑为独立桌面应用程序的技术,其中包含一个安装程序文件,然后您可以共享和分发。 (方法解释here&here) 这非常简洁,因为安装它的用户不需要 R(和任何其他必需的包)来安装和运行应用程序(它有 R、chrome 等的便携式版本)
我能够按照该方法创建一个带有安装程序文件的独立桌面应用程序,现在我可以开始共享了。
但是,这是我的担忧: 理想情况下,我不希望我的用户能够访问源代码。有没有办法限制这种访问?在教程(我发布的第一个链接)中,作者是这样说的:
*
最后,请记住,您的源代码易于访问。如果 这是您关心的问题(例如,如果您正在分发给客户 那不应该访问代码)你能做的最好的就是阻止 通过首先将敏感源代码编译成二进制文件来访问 包裹。也就是说,任何了解 R(并且有足够意图)的用户 可以简单地将代码转储到控制台。
*
有没有更好、更简单的方法来阻止访问?
谢谢!
【问题讨论】:
以下任何答案都回答了您的问题吗?如果有,请采纳。如果没有,请告诉我们您是否需要其他任何东西。谢谢。 【参考方案1】:现在有一种方法可以将 Shiny 应用程序转变为独立的 Electron 应用程序(这是一个桌面应用程序,用于 Slack 等应用程序)。要了解更多信息,请参阅 userR 2018 中的 this excellent presentation (YouTube),其中包含更多链接:
GitHub ColumbusCollaboratory: electron-quick-start
GitHub ColumbusCollaboratory: Photon。使用 Electron 框架构建闪亮应用的 RStudio 插件
@TravisHinkelman's blog "使用 Electron 将 Shiny 应用部署为桌面应用"
【讨论】:
【参考方案2】:我不确定它是否非常适合代码模糊问题,但RInno 包旨在帮助解决数据安全问题,即当公司不想与第三者。它还可以自动化您在上面引用的过程,并允许您将应用连接到 GitHub/Bitbucket,以便在启动时通过 API 调用将更新推送到本地安装的闪亮应用。
开始:
install.packages("RInno")
require(RInno)
RInno::install_inno()
那么你只需要调用两个函数来创建一个安装框架:
create_app(app_name = "myapp", app_dir = "path/to/myapp")
compile_iss()
如果您想为尚未安装 R 的同事添加 R,请将 include_R = TRUE
添加到 create_app
:
create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)
它默认包含闪亮、magrittr 和 jsonlite,所以如果您使用其他包,如 ggplot2 或 plotly,只需将它们添加到 pkgs
参数。您还可以将 GitHub 包包含到 remotes
参数中:
create_app(
app_name = "myapp",
app_dir = "path/to/myapp"
pkgs = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"),
remotes = c("talgalili/installr", "daattali/shinyjs"))
如果您对其他功能感兴趣,请查看FI Labs - RInno。如果您想了解如何将其连接到 GitHub/Bitbucket 的指南,请查看 Continuous Installation 指南:)。
【讨论】:
install_inno()
是一个障碍,因为由于数据安全,我不允许下载可执行文件。你能建议一个解决方法吗?
当然!您必须让有权限安装 Inno Setup -jrsoftware.org/isdl.php 的人。 RInno 软件包需要 Inno Setup 来为您的 Shiny 应用程序构建安装程序。
另外值得一提的是,这仅适用于 Windows【参考方案3】:
您可能对 DesktopDeployR 感兴趣,这是一个用于将基于 R 的自包含应用程序部署到桌面的框架。
https://github.com/wleepang/DesktopDeployR
【讨论】:
此软件包依赖于安装 R-Portable,它仅适用于 Windows。 README.md 确实说“该框架可以与 [...] 系统安装版本的 R 一起使用”,我认为这将允许跨平台构建,但没有关于如何做的进一步说明。 【参考方案4】:我不熟悉这种方法,它很常见吗?我个人从未见过。从本质上讲,您所做的似乎是将 R、Shiny、Web 浏览器和您的代码捆绑到一个文件中。就好像客户端安装了 R、Chrome、shiny 并运行你的代码,但他只是一键完成。您实际上是在向用户提供您的代码。我不知道它是如何工作的,但如果作者自己声称客户端将能够看到源代码,那么这对我来说是有道理的,我认为你不能避免这种情况。
为什么不将文件托管在闪亮的服务器或 shinyapps.io 上?客户端将不会看到您的代码。另外,他们看不到您的代码真的那么重要吗?很多时候人们害怕别人看到他们的代码,但实际上没有人真正关心查看别人的代码并窃取它。除非你有一些非常专有和先进的专利代码。
【讨论】:
感谢您的 cmets!我确实考虑过shinyapps.io ..也许我会进一步探索它。但我担心的是成本(在某种程度上),更重要的是,数据隐私部分(鉴于应用程序使用的数据相当敏感)。我工作的组织对数据隐私和相关问题有一些相当严格的指导方针。所以我可能会在那里遇到一些路障。其次,用户不应该看到代码并不是很重要。所以如果没有简单的方法来掩盖代码,我最终只会运送整个包裹。 如果您不经常使用,费用是免费的。如果您担心成本和隐私,那么use your own shiny server。这样,它仍然由您托管并由您控制。我想这取决于您是希望将应用程序完全交付给客户端还是要托管它。它是作为独立的给他们的,这意味着你不能更新它和修复错误。【参考方案5】:您还可以从“.bat”可执行文件中运行闪亮的应用程序,其中包含从命令行运行应用程序的代码。 只需打开一个 txt 编辑器并添加以下行:
R -e "shiny::runApp('app.R',launch.browser=TRUE)
您可以将其另存为,例如“test.bat”。将 app.R 重命名为您闪亮的应用名称。确保您已将启动浏览器设置为 TRUE,否则应用程序只会“侦听”。
如果您想确保任何 Rmd 报告都能顺利运行,请将 pandoc 路径添加到闪亮应用的代码中。例如添加以下行:
Sys.setenv(RSTUDIO_PANDOC="C:/Program Files/RStudio/bin/pandoc")
你可以通过运行得到你的 pandoc 路径:rmarkdown::find_pandoc()
还要确保 R 在您的路径环境中(例如,将“C:\Program Files\R\R-4.1.0\bin”添加到您的路径环境中)
如果用户真的想访问您的源代码,并且需要在运行 bat 文件的 PC 上安装 R,那么用户将可以访问您的源代码,但这可能是快速部署闪亮应用程序的好方法,例如,对于小型团队有一个共享工作站。而且您无需支付或安装服务器。
【讨论】:
以上是关于将 R Shiny 应用程序部署为独立应用程序的主要内容,如果未能解决你的问题,请参考以下文章
R Shiny:无法为应用程序分派任务,有 1 个任务正在进行中
使用 Flexdashboard 部署 Shiny 应用程序
Azure 应用服务上的 R Shiny 应用与 Active Directory 集成