托管和设置自己的闪亮应用程序而无需使用闪亮服务器

115

我想让我的同事们能够使用闪亮的应用程序,而不需要运行甚至安装R。

因此,我阅读了这个网页并找到了以下句子:

如果您熟悉Web托管或可以访问IT部门,则可以自己托管Shiny应用程序。

位于“共享为网页”-部分下面。

如何做到这一点?

问题在于,我的公司受到特定的Web托管和安全性限制,现在还不会为闪亮的服务器专业版付费。

但上面的句子给了我希望,可以自己设置一些东西来说服他们。


1
也许可以开始使用闪亮服务器 - hrbrmstr
6个回答

104

如果你的电脑和你的同事的电脑属于同一个局域网,那么这很容易实现。只需要通过以下方式运行你的应用程序:

runApp(host = "0.0.0.0", port = 5050)
通过host参数设置的值表示接受任何连接(不仅限于来自本地主机)。port参数可以假定为您想要的任何值(只需确保避免选择被其他服务使用的端口,如sshhttp)。然后,记下您的本地IP地址(如果您正在使用Linux,则可以通过ifconfig查看它)。假设您的IP是192.168.1.70。您的同事可以通过在他们的浏览器地址栏中插入192.168.1.70:5050,即您的IP后跟:和您选择的端口号,来使用您的应用程序。

如果您希望从LAN外访问,则可以将路由器引导到您的PC,当有人通过5050端口连接到您的公共IP时。


2
谢谢。我打算在星期一试一下。但是这是否意味着其他人访问时我必须保持 R 和应用程序运行? - schlusie
5
好的。我现在尝试了一下,它起作用了。但是有没有可能不在我的电脑上运行该应用程序?就像我所说,我们可以访问IT部门和一些服务器,并且引用的句子表明有这样的可能性。 - schlusie
3
这个应用程序必须在某个地方运行。托管它的机器必须具备 R、shiny 和所有必需的依赖项,以使其能够运行。 - nicola
7
非常有用的帖子 - 我的后续问题是,有多少人可以同时访问此应用程序? - md1630
4
嗨@nicola,你能否给我更多关于如何“将路由器指向你的个人电脑,让别人通过5050端口连接你的公网IP”的信息?谢谢! - just_rookie
显示剩余8条评论

40
这种局域网共享应用程序的方法很酷,但有点像黑客技术。我和一些同事尝试过,它确实有效,但更像是一个办公室技巧,而不是可持续的解决方案。
我刚刚开发了RInno包来解决这个问题,即当公司不愿支付Shiny Server费用或存在云服务的安全问题时。
开始使用:
install.packages("RInno")
require(RInno)
RInno::install_inno()

然后,您只需要调用两个函数来创建安装框架:

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

如果您想为没有安装R的同事添加R,可以在create_app中添加include_R = TRUE
create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)

默认情况下,它会包含shiny、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实验室 - RInno


4
仅适用于Windows ^^ - pawamoy
2
是的,我买了一台Linux笔记本电脑,并正在寻找支持Ubuntu的方法。 - Jonathan Hill

13

你可能想要看一下开源解决方案shinyproxy

使用shinyproxy,你需要将你的应用程序封装在docker容器中进行托管。

在这里,你可以找到一个关于如何在docker容器中部署shiny应用程序的指南(顺便说一句,即使不使用shinyproxy,维护应用程序依赖性的做法是很好的实践)。

有不同的身份验证和扩展方法可用。


5
我最近在我们本地的Centos 7 Linux操作系统服务器上安装了Shiny。我们大部分使用了下面的指南。 https://www.vultr.com/docs/how-to-install-shiny-server-on-centos-7 如果有设置问题,请随时在此处提问,以便其他使用该指南的人可以看到答案!
我们还考虑将其推送到AWS服务器上,但由于内容敏感,我们选择了自己的服务器。否则,两个解决方案看起来相似。Linux和Shiny系统轻巧,您可能可以在免费的Amazon服务器上运行它!

2

网站Hosting Data Apps有一些教程,可以使用SystemdDocker来托管Shiny应用程序,并使它们全球可访问,您可以查看这些教程。


1
这是另一种非常“hacky”的解决方案。最近我也遇到了你所面临的同样问题,不确定如何让那些做决策的人看到某种POC。我知道他们可以访问特定的共享网络驱动器。因此,我将R二进制文件保存到了该网络驱动器上。我编写的应用程序也保存在同一网络驱动器上。然后,我编写了一个.R文件并将其保存在应用程序的工作目录中,其中包含以下内容以设置工作目录和源全局变量。
setwd("shared/drive/app_directory")
source("./global.R")
runApp("launch.browser=TRUE")

这一切都是由一个批处理文件(如果是Windows,否则是.sh文件)开始的,其中一行有两个部分,第一个是网络驱动器上R二进制文件的绝对路径,然后是上面的.R脚本来运行应用程序。

# something to the effect of 
filepath/to/R/bin/Rscript.exe filePath/to/app_start.R

这对于一个概念验证很有用,但肯定不是一个适合生产的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接