R的可视化功能是非常强大的,特别是RStudio下面的shinyapp,可以提供可视化的交互分析界面,其开源的shiny-server允许在linux服务器上面部署shinyapp,允许外部网络访问,但是有用户权限控制的shiny-server pro版是收费的,没有用户访问控制,始终觉得shinyapp是在裸奔着,pro版收费太贵了。这时候得感谢openanalytics团队,开源公布了ShinyProxy应用(ShinyProxy绝对是企业和个人开发者最喜欢的部署shinyapp的方式。它具有内置的LDAP身份验证和授权功能,可以轻松地(通过TLS)保护shiny的访问,并且对shinyapp的并发使用没有限制)。以下将分享我个人部署应用ShinyProxy的一些经验,希望可以帮到其他人。在这里建议看到的人有R语言、RStudio、Shiny的相关经验,可以更容易理解。下面的实现都是基于CentOS系统的(看介绍是windows和macos都可以,具体可看ShinyProxy官网:https://www.shinyproxy.io/ )。
第一步,安装必须的环境:java 8 Zulu(官网推荐该版本)和Docker
1、下载java 8 Zulu压缩包(https://www.azul.com/products/zulu-enterprise/[/url]),解压,配置环境变量,查看java版本
java -version
openjdk version "1.8.0_72"
OpenJDK Runtime Environment (Zulu 8.13.0.5-linux64) (build 1.8.0_72-b15)
OpenJDK 64-Bit Server VM (Zulu 8.13.0.5-linux64) (build 25.72-b15, mixed mode)
2、安装Docker相关程序
#按顺序安装
sudo yum install docker-ce-cli-18.09.5-3.el7.x86_64.rpm
sudo yum install containerd.io-1.2.5-3.1.el7.x86_64.rpm
sudo yum install docker-ce-18.09.5-3.el7.x86_64.rpm
3、配置Docker启动项,新增/etc/systemd/system/docker.service.d/override.conf文件,并添加以下内容
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:// -D -H tcp://127.0.0.1:2375
第二步,安装ShinyProxy,建议直接安装rpm包,这样ShinyP可常驻程序运行,并随机启动
4、下载rpm包([url]https://www.shinyproxy.io/downloads/)并安装
第三步,安装shinyproxy-demo
5、在ShinyProxy中,shinyapp是在docker容器中提供的,openanalytics/shinyproxy-demo是一个演示docker镜像,已经配置好了shinyapp,建议是安装该镜像,然后研究学习,在这个基础上修改创建自己的shinyapp的docker镜像。
6、安装代码如下:
7、查看安装结果
第四步,配置ShinyProxy的application.yml文件
8、查看ShinyProxy的状态和返回信息(正常启动是显示active (running)),记下Loaded的shinyproxy.service文件路径,下面会用到
9、查看/etc/systemd/system/shinyproxy.service中的shinyproxy的工作目录:WorkingDirectory=/etc/shinyproxy,转至该目录下,用curl命令复制application.yml的模板文件,方便后期修改
10、编辑application.yml,这里我只想说其中的一个参数:authentication: authentication method; one of ldap (default), simple or none; 授权登录的方法:ldap(默认),simple(简单,我就是改成这个后就可以用该参数下面的users配置用户),none(无需授权),其他参数可以参考官网的说明([url=https://www.shinyproxy.io/configuration/]https://www.shinyproxy.io/configuration/)
11、授权验证方式改为simple后就可以通过模板文件里面的用户和密码登录http://localhost:8080,登录页面及登录后的页面如下:
第五步,添加自己的shinyAPP,这里需要有含shiny的ui.R和server.R(app.R也可以)文件夹、Dockerfile文件Rprofile.site文件,示例如下:
12、在application.yml里面的specs节点下添加该shinyapp镜像,然后重启ShinyProxy,登录http://localhost:8080,即可看到新增的app
总结:经过上面的一系列操作,就实现了ShinyProxy的安装和使用,不止可以用在shinyapp,其他任何可以用Docker的程序(例如python)都可以用这种方法进行权限控制。我这里只是一个简单的使用方法,更深入的建议查看ShinyProxy的官网和google自己不明白的地方,也欢迎各位留言讨论,谢谢!