楼主: willingpo
4994 4

[实际应用] CentOS下应用ShinyProxy管理shinyapp(用户登录,授权验证等) [推广有奖]

  • 0关注
  • 0粉丝

高中生

35%

还不是VIP/贵宾

-

威望
0
论坛币
34 个
通用积分
1.6068
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
253 点
帖子
6
精华
0
在线时间
38 小时
注册时间
2016-4-22
最后登录
2023-4-20

楼主
willingpo 发表于 2019-5-10 15:20:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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/)并安装

  1. sudo yum install shinyproxy_2.2.1_x86_64.rpm
  2. sudo service shinyproxy restart
复制代码

第三步,安装shinyproxy-demo

5、在ShinyProxy中,shinyapp是在docker容器中提供的,openanalytics/shinyproxy-demo是一个演示docker镜像,已经配置好了shinyapp,建议是安装该镜像,然后研究学习,在这个基础上修改创建自己的shinyapp的docker镜像。

6、安装代码如下:

  1. sudo docker pull openanalytics/shinyproxy-demo
复制代码
  1. sudo docker run openanalytics/shinyproxy-demo
复制代码

7、查看安装结果

  1. sudo docker images | grep shinyproxy
复制代码
  1. openanalytics/shinyproxy-demo        latest              fce70ee5ba84        15 hours ago        787 MB
复制代码

第四步,配置ShinyProxy的application.yml文件

8、查看ShinyProxy的状态和返回信息(正常启动是显示active (running)),记下Loaded的shinyproxy.service文件路径,下面会用到

  1. sudo service shinyproxy status
复制代码
  1. shinyproxy.service - ShinyProxy
  2.    Loaded: loaded (/etc/systemd/system/shinyproxy.service; enabled; vendor preset: disabled)
  3.    Active: active (running) since Mon 2019-04-29 11:08:39 CST; 4min 54s ago
  4. Main PID: 25239 (java)
  5.    Memory: 678.4M
  6.    CGroup: /system.slice/shinyproxy.service
  7.            └─25239 /usr/bin/java -jar /opt/shinyproxy/shinyproxy.jar
复制代码

9、查看/etc/systemd/system/shinyproxy.service中的shinyproxy的工作目录:WorkingDirectory=/etc/shinyproxy,转至该目录下,用curl命令复制application.yml的模板文件,方便后期修改

  1. 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,登录页面及登录后的页面如下:

shinyproxy-login.png

shinyproxy-select-app.png

shinyproxy-shiny-app.png






第五步,添加自己的shinyAPP,这里需要有含shiny的ui.R和server.R(app.R也可以)文件夹、Dockerfile文件Rprofile.site文件,示例如下:

  1. # Clone the shiny app repo
  2. $ git clone https://github.com/openanalytics/shinyproxy-template.git
  3. # Change into the repo
  4. $ cd shinyproxy-template/
  5. # Build the image
  6. $ docker build -t openanalytics/shinyproxy-template .
  7. # Check the image is now available in docker
  8. $ docker images | grep "shinyproxy-template\|REPOSITORY"
  9. REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE  
  10. openanalytics/shinyproxy-template   latest              16e8c49e2261        25 minutes ago      851MB  
  11. # Check the shiny app runs normally outside shinyproxy
  12. $ docker run -it -p 3838:3838  openanalytics/shinyproxy-template
复制代码

12、在application.yml里面的specs节点下添加该shinyapp镜像,然后重启ShinyProxy,登录http://localhost:8080,即可看到新增的app

  1.     - id: euler
  2.     display-name: Euler's number
  3.     description: Adding another app to shinyproxy
  4.     container-cmd: ["R", "-e shiny::runApp('/root/euler')"]
  5.     container-image: openanalytics/shinyproxy-template
  6.     access-groups: scientists
复制代码

add-another-shiny-app.png

euler-app-running.png


总结:经过上面的一系列操作,就实现了ShinyProxy的安装和使用,不止可以用在shinyapp,其他任何可以用Docker的程序(例如python)都可以用这种方法进行权限控制。我这里只是一个简单的使用方法,更深入的建议查看ShinyProxy的官网和google自己不明白的地方,也欢迎各位留言讨论,谢谢!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 Shiny Shiny app ShinyProxy

overview.png (252.73 KB)

overview.png

已有 1 人评分经验 论坛币 热心指数 收起 理由
dxystata + 50 + 10 + 1 鼓励积极发帖讨论

总评分: 经验 + 50  论坛币 + 10  热心指数 + 1   查看全部评分

本帖被以下文库推荐

  • · R学习|主题: 262, 订阅: 161

沙发
yangming98 发表于 2019-5-10 22:29:40 来自手机
willingpo 发表于 2019-5-10 15:20
好的好的好的好的好的

藤椅
woshiisp 在职认证  发表于 2020-12-20 15:10:08
你好,楼主。

我在阿里云上进行部署shinyproxy时候遇到了问题,shinyproxy的服务启动之后,几秒钟之后,就显示服务进程dead,不知道怎么回事?!
即使如此,通过公网地址访问,8080端口,不能显示成功的界面。以前在阿里云上部署了shinyserver服务能够正常运转,就是RStudio server也能正常部署运转。

求教


看了下日志:

Dec 20 14:57:13 iZuf67l2movj08u9koj6fsZ java[30455]: Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabl
Dec 20 14:57:13 iZuf67l2movj08u9koj6fsZ java[30455]: 2020-12-20 14:57:13.834 ERROR 30455 --- [           main] o.s.boot.SpringApplication               : Applicati
Dec 20 14:57:13 iZuf67l2movj08u9koj6fsZ java[30455]: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ldapContextSource' def

Dec 20 14:57:13 iZuf67l2movj08u9koj6fsZ java[30455]: Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.ld
Dec 20 14:57:13 iZuf67l2movj08u9koj6fsZ java[30455]:         at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiati
Dec 20 14:57:13 iZuf67l2movj08u9koj6fsZ java[30455]:         at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(Constru
Dec 20 14:57:13 iZuf67l2movj08u9koj6fsZ java[30455]:         ... 24 common frames omitted
Dec 20 14:57:13 iZuf67l2movj08u9koj6fsZ java[30455]: Caused by: java.lang.IllegalAccessError: class org.springframework.ldap.core.support.AbstractContextSource (in

板凳
yangming98 发表于 2020-12-20 19:11:06 来自手机
willingpo 发表于 2019-5-10 15:20
R的可视化功能是非常强大的,特别是RStudio下面的shinyapp,可以提供可视化的交互分析界面,其开源的shiny- ...
好的好的好的好的

报纸
willingpo 发表于 2021-3-30 17:29:01
woshiisp 发表于 2020-12-20 15:10
你好,楼主。

我在阿里云上进行部署shinyproxy时候遇到了问题,shinyproxy的服务启动之后,几秒钟之后, ...
是不是java环境没装好

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-6 08:16