shiny改写服务器文件,Shiny生产环境部署与共享

本文介绍了如何在同一局域网内和服务器上部署Shiny应用程序。对于局域网,只需确保目标机器能访问到Shiny服务的IP和端口。在服务器上,可以使用Shiny Server或Docker进行部署。Docker部署方法中,提供了修改Dockerfile和启动Shiny应用的详细步骤,并给出了测试运行和访问应用的URL。
摘要由CSDN通过智能技术生成

3ead4077388c

result

前段时间看到有人在问怎么让自己的shiny程序让别人能够看到,今天来写篇文章总结

一.在同一局域网内

在同一局域网内的话很简单只要对方能访问到你的ip和shiny端口就行,直接访问就行

先看下两台机子的ip

跑shiny服务的主机一般是你自己的机子

3ead4077388c

macip

访问你应用的主机

3ead4077388c

windowsip

可以看到在同一网段内的!

部署shiny应用

这边的话要自己指定host为0.0.0.0,不然默认是127.0.0.1,那别人是访问不到的

runApp("Downloads/csfz/wenjianshangchuan/test1/app.R",port = 7777,host="0.0.0.0")

可以看到在本机127可以访问,而在另一台上也可以,注意这边访问的地址

3ead4077388c

macshiny

3ead4077388c

windowsshiny

所以这种方式的话在局域网内是很容易实现的!!

二.在服务器上部署

在服务器上部署的话就很方便共享啦

第一种方式是去先在服务器上部署shinyServer,然后把你的shiny工程放入他的默认目录下就可以了。安装过程的话网上随便一搜就有了。

第二种方式的话是使用docker,个人比较推荐的,方便快捷拿来就用。

安装docker(docker应用还是很广的,装一下准没错)

去dockerhub找一下shiny相关的镜像

这边简单点直接docker pull 这个镜像,然后docker exec 或 run 进入容器,然后进入R进行install.packages 安装你的shiny应用所需要的包

第二种的话比较推荐,还是出于方便部署的原因,去github上把这个镜像的工程目录git下来然后修改Dockerfile

docker pull quantumobject/docker-shiny

docker run -d -p 3838:3838 -v :/srv/shiny-server -ti quantumobject/docker-shiny /bin/bash

进去后输入R,然后安装你需要的依赖包就行

修改dockerfile,主要是在安装包那边把你的包加上,然后把repos改成清华的,为了速度。(这边是我加了我的demo的包,各位按需加就行)

#name of container: docker-shiny

#version of container: 0.6.1

FROM quantumobject/docker-baseimage:18.04

MAINTAINER willnight "willnight@yeah.net"

# Update the container

# Installation of necessary packages/software for this container...

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q r-base \

r-base-dev \

libssl-dev \

libsasl2-dev \

gdebi-core \

libapparmor1 \

sudo \

libssl1.0.0 \

libcurl4-openssl-dev \

&& apt-get clean \

&& rm -rf /tmp/* /var/tmp/* \

&& rm -rf /var/lib/apt/lists/*

RUN R -e "install.packages('shiny', repos='https://mirrors.tuna.tsinghua.edu.cn/CRAN/')" \

&& update-locale \

&& wget https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.9.923-amd64.deb \

&& dpkg -i --force-depends shiny-server-1.5.9.923-amd64.deb \

&& rm shiny-server-1.5.9.923-amd64.deb \

&& mkdir -p /srv/shiny-server; sync \

&& mkdir -p /srv/shiny-server/examples; sync \

&& cp -R /usr/local/lib/R/site-library/shiny/examples/* /srv/shiny-server/examples/.

RUN R -e "install.packages('rmarkdown', repos='https://mirrors.tuna.tsinghua.edu.cn/CRAN/')"

RUN R -e "install.packages(c('devtools','shinydashboard','shinythemes','DT','openssl','formattable','readxl','mongolite','lubridate','glue','openxlsx','shinydashboardPlus','shinyWidgets'), repos='https://mirrors.tuna.tsinghua.edu.cn/CRAN/')"

RUN R -e "devtools::install_github('nik01010/dashboardthemes')"

##startup scripts

#Pre-config scrip that may be needed to be run one time only when the container run the first time .. using a flag to don't

#run it again ... use for conf for service ... when run the first time ...

RUN mkdir -p /etc/my_init.d

COPY startup.sh /etc/my_init.d/startup.sh

RUN chmod +x /etc/my_init.d/startup.sh

##Adding daemons to containers

RUN mkdir /etc/service/shiny-server /var/log/shiny-server ; sync

COPY shiny-server.sh /etc/service/shiny-server/run

RUN chmod +x /etc/service/shiny-server/run \

&& cp /var/log/cron/config /var/log/shiny-server/ \

&& chown -R shiny /var/log/shiny-server \

&& sed -i '113 a

Other examples of Shiny application

' /srv/shiny-server/index.html

#volume for Shiny Apps and static assets. Here is the folder for index.html (link) and sample apps.

VOLUME /srv/shiny-server

# to allow access from outside of the container to the container service

# at the ports to allow access from firewall if accessing from outside the server.

EXPOSE 3838

# Use baseimage-docker's init system.

CMD ["/sbin/my_init"]

测试运行

上面的步骤做完运行就很简单了

docker run -d -p 3838:3838 -v /root/Myrpro/:/srv/shiny-server myshiny

效果 http://120.78.66.186:3838/test1/

最后如果测试成功后可以通过docker-compose 或者 k8s进行部署。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值