我想在网上发布一个R Shiny Web应用程序(http://www.rstudio.com/shiny/),但我想用密码保护它,以便只有拥有凭据的人才能查看我发布的内容.做这个的最好方式是什么 ?
shi*_*gav 23
这可能有点晚了,但无论如何我都会回答.如果您已经有解决方案,请与我们分享一下吗?
我的主要目标非常简单.我的笔记本电脑上有一个闪亮的应用程序的工作版本.我曾经如下所述运行它,一直在本地进行测试.
R -e "shiny::runApp('.')"
Run Code Online (Sandbox Code Playgroud)
然后是我们不得不在Amazon EC2实例上进行此操作的那一刻.
起初我的尝试是直接将apache代理到我的应用程序可以收听的端口8100.但这并没有那么好用,因为看起来以这种方式运行服务器实际上使用原始套接字,因为使用闪亮服务器回退到使用sock.js因此现在通过HTTP进行通信.
所以按照以下说明在我们的EC2实例上下载了闪亮的服务器应用程序:https://github.com/rstudio/shiny-server
顺便说一句,虽然那里的说明建议你从源代码安装node.js,如果你使用的是RHEL实例,那么通过yum install方式它对我来说非常好.你有这些说明.
在node.js,shiny-server安装和设置之后,编辑了我的Apache conf(Ubuntu和RHEL以不同方式调用conf.因此编辑你拥有的那个).添加了虚拟主机来为我的请求提供服务.正如您所注意到的,还使用Apache Location指令使用Apache Basic摘要Auth对其进行了屏蔽.
<VirtualHost *:80>
ProxyPass / http://localhost:3838/
ProxyPassReverse / http://localhost:3838/
ProxyPreserveHost On
<Location />
AuthType Basic
AuthName "Restricted Access - Authenticate"
AuthUserFile /etc/httpd/htpasswd.users
Require valid-user
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
除此之外,还编辑了闪亮的服务器conf,仅侦听来自127.0.0.1的请求(仅限localhost).所以在我的闪亮服务器中,我有以下内容:
listen 3838 127.0.0.1;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您在Amazon EC2环境中,则不需要这样,因为您可以使用EC2仪表板中的安全组设置来执行相同操作.无论如何,我这样做是一个很好的衡量标准.
现在,这已足够,因为我们正在寻找非常快速和简单的东西.
现在拼命地等待着令人敬畏的RShiny人员提供auth作为企业版交易的一部分.
希望这可以帮助.
小智 9
对于OP来说这可能有点晚,但它可能对您的用例有用:
https://auth0.com/blog/2015/09/24/adding-authentication-to-shiny-open-source-edition/
它与Rohith的答案类似,但它使用的是Auth0,它允许您提供更多身份验证选项(如连接,Google帐户,Active目录,LDAP和大型等)
免责声明:我在Auth0工作,我们在内部使用Shiny这种配置,它工作正常.
稍后(2016 年),但我找到了另一个使用ngnix作为代理的选项:
本指南已部分遵循本指南完成:https : //support.rstudio.com/hc/en-us/articles/213733868-Running-Shiny-Server-with-a-Proxy
在 Ubuntu 14.04 上:
这个:
events {
worker_connections 768;
multi_accept on;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen XX;
location / {
proxy_pass http://localhost:YY;
proxy_redirect http://localhost:YY/ $scheme://$host/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 20d;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
}
Run Code Online (Sandbox Code Playgroud)
XX: nginx 监听的端口
YY:闪亮服务器使用的端口
使用本教程,我为nginx服务器添加了密码认证:https : //www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu-14-04
设置闪亮的进程或闪亮的服务器只听本地主机(127.0.0.1)