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

R 在没有闪亮服务器的情况下托管和设置自己闪亮的应用程序,r,web-hosting,shiny,shiny-server,R,Web Hosting,Shiny,Shiny Server,我正试图让我的同事可以使用闪亮的应用程序,而不必运行甚至安装R 所以我读了 发现这句话: 如果您熟悉网络托管或有权访问IT 部门,您可以自己托管您闪亮的应用程序 在“共享为网页”部分下 我该怎么做 问题是,我的公司在网络托管和安全等方面受到一定的限制,而且(目前)不会为闪亮的服务器专业版付费 但是上面的这句话给了我希望,让我自己建立一些东西来说服他们。如果你的电脑和你的同事的电脑属于同一个局域网,这是很容易实现的。只需通过以下程序运行您的应用程序: runApp(host="0.0.0.0",p

我正试图让我的同事可以使用闪亮的应用程序,而不必运行甚至安装R

所以我读了 发现这句话:

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

在“共享为网页”部分下

我该怎么做

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


但是上面的这句话给了我希望,让我自己建立一些东西来说服他们。

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

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


如果你想从局域网外访问,当有人通过5050端口连接到你的公共IP时,你可以将路由器指向你的电脑。

像这样在局域网上共享应用程序很酷,但这是一种黑客行为。我和一些同事试过,效果不错,但这更多的是一种办公室技巧,而不是一种可持续的解决方案

我刚刚完成了针对这个问题的软件包的开发,即当一家公司不为闪亮的服务器付费或云服务存在安全问题时

要开始,请执行以下操作:

install.packages("RInno")
require(RInno)
RInno::install_inno()
然后,您只需要调用两个函数来创建安装框架:

create_app(app_name = "myapp", app_dir = "path/to/myapp")
compile_iss()
如果要为未安装R的同事添加R,请将
include\u R=TRUE
添加到
create\u app

create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)
它默认包括shiny、magrittr和jsonlite,因此如果您使用的是其他包,如ggplot2或plotly,只需将它们添加到
pkgs
参数中即可。您还可以在
remotes
参数中包含GitHub包:

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

如果您对其他功能感兴趣,请查看我最近在本地的Centos 7 Linux操作系统服务器上安装了Shining。我们大部分时间都在使用下面的指南。

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


我们还考虑将其推到AWS服务器上,选择我们自己的服务器,因为内容是敏感的。除此之外,两种解决方案看起来相似。Linux和Shining系统都很轻,您可能可以在免费的Amazon服务器上运行它

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

使用shinyproxy,您必须将应用程序包装在docker容器中才能承载它们

您可以找到关于如何在docker容器中部署闪亮应用程序的指南(顺便说一句,这是一个很好的实践,即使不使用shinyproxy来维护应用程序依赖项)

有不同的解决方案可供选择。

这里有另一个真正的“黑客”解决方案。我最近不得不处理你面临的同一个问题,我不知道如何在决策者面前获得某种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带来了好处,但肯定不是一个值得生产的解决方案。

谢谢。星期一我要试试。但这意味着我必须让R和应用程序运行,而其他人访问它?好的。我现在试过了,效果很好。但是有没有可能不在我的机器上运行应用程序呢?就像我说的,我们可以访问一个IT部门和一些服务器,引用的句子表明了这样做的可能性。应用程序必须运行在某个地方。托管该应用程序的计算机必须具有R、Shining和运行所需的所有依赖项。这是一篇非常有用的帖子-我的后续问题是,有多少人可以同时访问该应用程序?嗨@nicola,请告诉我有关如何访问该应用程序的更多信息“当有人通过5050端口连接到你的公共IP时,将你的路由器直接连接到你的电脑”?谢谢!也许吧?只适用于Windows^^^是的,我买了一台Linux笔记本电脑,正在寻找支持Ubuntu的方法