在没有闪亮服务器的情况下托管和设置自己的闪亮应用程序

Posted

技术标签:

【中文标题】在没有闪亮服务器的情况下托管和设置自己的闪亮应用程序【英文标题】:Hosting and setting up own shiny apps without shiny server 【发布时间】:2015-01-04 03:43:10 【问题描述】:

我正在尝试为我的同事提供闪亮的应用程序,而无需他们运行甚至安装 R。

所以我读了this webpage 并找到了这句话:

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

在“共享为网页”部分下。

我该怎么做?

问题是我的公司在网络托管和安全等方面受到某些限制,并且不会(目前)为闪亮的服务器专业版付费。

但上面这句话让我有希望自己设置一些东西来说服他们。

【问题讨论】:

也许是getting started with shiny server? 【参考方案1】:

如果您的 PC 和您同事的 PC 属于同一个 LAN,这很容易实现。只需通过以下方式运行您的应用程序:

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 外部访问,当有人通过 5050 端口连接到您的公共 IP 时,您可以将路由器定向到您的 PC。

【讨论】:

谢谢。我周一去试试。但这意味着我必须让 R 和应用程序在其他人访问它时运行? 好的。我现在试了一下,它奏效了。但是是否有可能不在我的机器上运行该应用程序?就像我说的那样,我们可以访问 IT 部门和一些服务器,引用的句子表明了这样做的可能性。 应用程序必须在某个地方运行。托管它的机器必须具有 R、闪亮和所有需要的依赖项才能使其运行。 这篇文章很有帮助——我的后续问题是,有多少人可以同时访问该应用? 嗨@nicola,您能否提供更多有关“当有人通过5050 端口连接到您的公共IP 时将您的路由器定向到您的PC”的信息?谢谢!【参考方案2】:

像这样通过 LAN 共享应用程序非常酷,但它有点像 hack。我和一些同事一起尝试过,它确实有效,但它更像是一种办公室技巧,而不是一种可持续的解决方案。

我刚刚为这个确切的问题开发了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,请将 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

【讨论】:

仅适用于 Windows ^^ 是的,我买了一台 Linux 笔记本电脑,正在寻找下一步支持 Ubuntu 的方法【参考方案3】:

我最近在本地的 Centos 7 Linux 操作系统服务器上安装了 Shiny。我们大部分时间都使用下面的指南。 https://www.vultr.com/docs/how-to-install-shiny-server-on-centos-7

请随时在此处询问有关设置问题的任何问题,以便其他使用该指南的人可以看到答案!

我们还考虑将它推送到 AWS 服务器上,因为内容很敏感,所以选择了我们自己的服务器。否则,两种解决方案看起来都相似。 Linux和Shiny系统很轻,你可以在免费的亚马逊服务器上运行它!

【讨论】:

【参考方案4】:

您可能想看看开源解决方案shinyproxy。

使用 shinyproxy,您必须将应用程序包装在 docker 容器中以托管它们。

Here 您可以找到有关如何在 docker 容器中部署闪亮应用程序的指南(顺便说一句,这是一种很好的做法,即使不使用闪亮代理来维护应用程序依赖项)。

有不同的authentication and scaling methods 可用。

【讨论】:

【参考方案5】:

这是另一个真正“hacky”的解决方案。我最近不得不处理您面临的同样问题,并且不确定如何在做出决定的人面前展示某种 POC。我知道他们可以访问特定的共享网络驱动器。所以我将 R 二进制文件保存到该网络驱动器。我编写的应用程序保存在同一个网络驱动器上。然后我编写了一个 .R 文件并将其保存在应用程序的工作目录中,其中包含这些行以设置工作目录并获取全局变量。

app_start.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

它为 POC 解决了问题,但绝对不是一个值得生产的解决方案。

【讨论】:

【参考方案6】:

Web Hosting Data Apps 提供了一些教程,用于托管仅使用 systemd 或 docker 的 Shiny 应用程序,并使它们可在全球范围内访问,您可以查看它们。

【讨论】:

以上是关于在没有闪亮服务器的情况下托管和设置自己的闪亮应用程序的主要内容,如果未能解决你的问题,请参考以下文章

个人应用程序的闪亮服务器配置

ERR_EMPTY_RESPONSE 闪亮的服务器

在 DigitalOcean ubuntu 服务器上托管闪亮的应用程序时出错

在闪亮的服务器不工作的情况下,在 NGINX 中将 HTTP 重定向到 HTTPS

闪亮的应用程序未加载图形

ggplot 和dashboardPage 的闪亮不起作用