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/)并安装
- sudo yum install shinyproxy_2.2.1_x86_64.rpm
- sudo service shinyproxy restart
第三步,安装shinyproxy-demo
5、在ShinyProxy中,shinyapp是在docker容器中提供的,openanalytics/shinyproxy-demo是一个演示docker镜像,已经配置好了shinyapp,建议是安装该镜像,然后研究学习,在这个基础上修改创建自己的shinyapp的docker镜像。
6、安装代码如下:
- sudo docker pull openanalytics/shinyproxy-demo
- sudo docker run openanalytics/shinyproxy-demo
7、查看安装结果
- sudo docker images | grep shinyproxy
- openanalytics/shinyproxy-demo latest fce70ee5ba84 15 hours ago 787 MB
第四步,配置ShinyProxy的application.yml文件
8、查看ShinyProxy的状态和返回信息(正常启动是显示active (running)),记下Loaded的shinyproxy.service文件路径,下面会用到
- sudo service shinyproxy status
- shinyproxy.service - ShinyProxy
- Loaded: loaded (/etc/systemd/system/shinyproxy.service; enabled; vendor preset: disabled)
- Active: active (running) since Mon 2019-04-29 11:08:39 CST; 4min 54s ago
- Main PID: 25239 (java)
- Memory: 678.4M
- CGroup: /system.slice/shinyproxy.service
- └─25239 /usr/bin/java -jar /opt/shinyproxy/shinyproxy.jar
9、查看/etc/systemd/system/shinyproxy.service中的shinyproxy的工作目录:WorkingDirectory=/etc/shinyproxy,转至该目录下,用curl命令复制application.yml的模板文件,方便后期修改
- curl https://raw.githubusercontent.com/openanalytics/shinyproxy/master/src/main/resources/application-demo.yml > 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文件,示例如下:
- # Clone the shiny app repo
- $ git clone https://github.com/openanalytics/shinyproxy-template.git
- # Change into the repo
- $ cd shinyproxy-template/
- # Build the image
- $ docker build -t openanalytics/shinyproxy-template .
- # Check the image is now available in docker
- $ docker images | grep "shinyproxy-template\|REPOSITORY"
- REPOSITORY TAG IMAGE ID CREATED SIZE
- openanalytics/shinyproxy-template latest 16e8c49e2261 25 minutes ago 851MB
- # Check the shiny app runs normally outside shinyproxy
- $ docker run -it -p 3838:3838 openanalytics/shinyproxy-template
12、在application.yml里面的specs节点下添加该shinyapp镜像,然后重启ShinyProxy,登录http://localhost:8080,即可看到新增的app
- - id: euler
- display-name: Euler's number
- description: Adding another app to shinyproxy
- container-cmd: ["R", "-e shiny::runApp('/root/euler')"]
- container-image: openanalytics/shinyproxy-template
- access-groups: scientists
总结:经过上面的一系列操作,就实现了ShinyProxy的安装和使用,不止可以用在shinyapp,其他任何可以用Docker的程序(例如python)都可以用这种方法进行权限控制。我这里只是一个简单的使用方法,更深入的建议查看ShinyProxy的官网和google自己不明白的地方,也欢迎各位留言讨论,谢谢!


雷达卡







京公网安备 11010802022788号







