docker部署shiny app详细教程(二)shinyProxy配置

       因为各种原因,笔者用shiny写了个数据库修改前端,本来以为和其他app一样,结果发现因为同时在线编辑人数过多,编辑完了大家还都不关网页,shiny还设置成不自动断联,导致app冲突。。。查了一圈(推荐这篇文章,详细介绍了shiny的问题),据说 shinyProxy是解决多人用户+开源shiny-sever的最好的解决方案。简单地说,shinyProxy就是把app运行在docker环境里,每个用户分配一个容器,所以需要docker还有部署shiny app的相关的知识,可以看看教程(一)

      下文基于centos7,其他配置环境也就是安装软件和docker操作的不同。

1    安装环境

需要以下:

JAVA 8以上

docker 需要特定端口,默认使用2375端口,需修改设置:

创建以下文件:/etc/systemd/system/docker.service.d/override.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:// -D -H tcp://127.0.0.1:2375

然后重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

也可以修改配置文件,但是记得先做好配置备份:/lib/systemd/system/docker.service

/usr/bin/dockerd -H unix:// -D -H tcp://127.0.0.1:2375
2    安装shinyProxy

需要根据你的安装环境,到官网或者github下载安装包。安装方法详见官方说明

wget https://www.shinyproxy.io/downloads/shinyproxy_2.5.0_x86_64.rpm
sudo rpm -i shinyproxy_2.5.0_x86_64.rpm
安装成功后,可以用下述命令查看shinyproxy的路径和状态:

systemctl status shinyproxy
3    下载demo镜像

shinyproxy就是一个部署shiny app的服务,作者提供了一个demo镜像供我们进行测试。

sudo docker pull openanalytics/shinyproxy-demo

4    修改配置

我们需要到github上下载一个配置文件,放在/etc/shinyproxy/application.yml路径下。

application.yml文件配置了一些基本参数,最常修改的参数如下,其他参数见官方文档

port: 8080                      # 运行端口

hide-navbar: true          # 是否隐藏网页上方工具条

authentication: none    # 认证方式,ldap是通讯录方式
                                     #                  simple要在本文件的user里配置用户名和密码
                                     #                  none是无需认证

specs是app的配置,如果要配置多个app直接模仿例子里的配置即可。

specs:
    - id: 01_hello
       display-name: Hello Application                                                                  # 名称
       description: Application which demonstrates the basics of a Shiny app    # 描述
       container-cmd: ["R", "-e", "shinyproxy::run_01_hello()"]       # dockerfile 的运行命令
       container-image: openanalytics/shinyproxy-demo              # 镜像名称
            
修改完成之后,运行shiny proxy的服务就可以在http://127.0.0.1:8080/01_hello看到这个应用, http://127.0.0.1:8080/是shinyproxy的主界面。

sudo systemctl enable shinyproxy
5    配置自己的app

1)写dockerfile并创建镜像
    
    可以到github上下载模板,并在模板的基础上修改,基本上把app路径改一下就行了。dockerfile的写法不熟悉的可以看看教程(一)或者自己找找教程。

    dockerfile中的app的端口默认是3838,即shiny server的默认端口。

2)配置文件application.yml并重启shinyproxy。

    在application.yml文件内配置app的id和镜像名称,见上一步。然后重启shinyproxy的服务。

sudo systemctl restart shinyproxy
    访问http://127.0.0.1:8080/app名称即可看到app。

3)附加:开放端口

    如果在服务器上配置了shinyproxy,想要远程访问应用,需要在防火墙开放shinyproxy运行的8080端口。

查看目前有哪些端口

sudo firewall-cmd --list-ports
查看8080端口被哪个应用占用

sudo netstat -lnp|grep 8080
开放端口 

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
关闭端口

sudo firewall-cmd --remove-port=8000/tcp --permanent

重启防火墙

sudo systemctl restart firewalld.service

评论

此博客中的热门博文

R包编写详细教程

Hadley Wickham的R语言编写规范

RMarkdown中文报错的问题【解决】