shinyproxy部署R语言shiny APP
shinyproxy部署shiny APP经验谈
shinyAPP 是成熟的web APP框架,依靠R语言的数据分析功能可以构建功能丰富的,外表美观的web APP,但是APP部署是shiny APP最大的瓶颈,免费部署途径有诸多的限制,收费的部署方式价格昂贵。
shinyproxy是最后的解决方案,开源,免费且功能够用。按照shinyproxy的官方文档进行实际操作,最终实现了将shiny APP部署在网络上,在此向大家介绍其中的心得和体会。
准备:
-
我的环境
Linux ubuntu22.04 -
安装docker
docker类似shinyproxy的后台程序,按照文档的介绍常规安装docker即可。 -
安装shinyproxy
按照文档(链接)安装shinyproxy,安装的.deb格式的shinyproxy,这种安装方式明确指明了application.yml的位置,是以后增加APP时需要修改的内容,并且不用增加专门的用户,比如shinyproxy。
shinyproxy文档开头介绍通过.jar的形式安装shinyproxy,但是application.yml 的位置不明确,且需要增加shinyproxy用户,可能仅仅是一种体验,不适合实际部署(个人体会,不一定正确)。
通过以上过程,shinyproxy被授权访问docker 镜像,将docker和shinyproxy关联在一起,以上过程是自动的,不需要再手动调整,当有新的app想加入的时候,仅仅修改application.yml即可。
图1. application.yml例子
运行
- 制作docker镜像
docker镜像的制作的参数都存储在Dockerfile中,可以根据shinyproxy提供的Dockfile模板来进行个性化的调整。
镜像制作过程中,遇到的问题是不能从docker_hub上拉取基础镜像,即FROM 命令后面的镜像,作为解决的方法,使用github上的DockerTarBuilder项目将基础镜像下载到本地,解压后通过“sudo docker load 基础镜像名称”来载入,之后可以在基础镜像的基础上构建自己的APP镜像。注意,这个过程中可以将基础镜像的版本更新到最新,避免可能的R包冲突。
图2 Dockerfile例子 - 在shinyproxy上展示docker镜像
构建好镜像之后就可以需要修改application.yml上的设定,使新增加的docker APP镜像可以展示在shiny’proxy界面上,需要修改的部分如下图所示。
经过以上操作,一切顺利的话已经可以在自己的浏览器上访问新构建的APP。
总体再说,shinyproxy的部署难度不大,多数时间花在构建docker镜像,一个粗略的尝试,希望对大家有所帮助。