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 安装shinyProxywget 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并创建镜像
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
评论
发表评论