Shiny生产环境部署与共享

result

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

一.在同一局域网内

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

  • 先看下两台机子的ip

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


macip

访问你应用的主机


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可以访问,而在另一台上也可以,注意这边访问的地址
macshiny

windowsshiny

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

二.在服务器上部署

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

  • 第一种方式是去先在服务器上部署shinyServer,然后把你的shiny工程放入他的默认目录下就可以了。安装过程的话网上随便一搜就有了。
  • 第二种方式的话是使用docker,个人比较推荐的,方便快捷拿来就用。
    1. 安装docker(docker应用还是很广的,装一下准没错)
    2. 去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 <你的shinyapp路径>:/srv/shiny-server -ti quantumobject/docker-shiny /bin/bash

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

第二种方法
git clone https://github.com/QuantumObject/docker-shiny

修改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 <h2><a href="./examples/">Other examples of Shiny application</a> </h2>' /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"]
  1. 测试运行

上面的步骤做完运行就很简单了
docker run -d -p 3838:3838 -v /root/Myrpro/:/srv/shiny-server myshiny
效果 http://120.78.66.186:3838/test1/

  • 最后如果测试成功后可以通过docker-compose 或者 k8s进行部署。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容