前段時間看到有人在問怎么讓自己的shiny程序讓別人能夠看到,今天來寫篇文章總結(jié)
一.在同一局域網(wǎng)內(nèi)
在同一局域網(wǎng)內(nèi)的話很簡單只要對方能訪問到你的ip和shiny端口就行,直接訪問就行
- 先看下兩臺機子的ip
跑shiny服務(wù)的主機一般是你自己的機子
訪問你應(yīng)用的主機
可以看到在同一網(wǎng)段內(nèi)的孤钦!
- 部署shiny應(yīng)用
這邊的話要自己指定host為0.0.0.0类咧,不然默認是127.0.0.1臂外,那別人是訪問不到的
runApp("Downloads/csfz/wenjianshangchuan/test1/app.R",port = 7777,host="0.0.0.0")
- 可以看到在本機127可以訪問,而在另一臺上也可以配猫,注意這邊訪問的地址
所以這種方式的話在局域網(wǎng)內(nèi)是很容易實現(xiàn)的3旨摹拼苍!
二.在服務(wù)器上部署
在服務(wù)器上部署的話就很方便共享啦
- 第一種方式是去先在服務(wù)器上部署shinyServer独令,然后把你的shiny工程放入他的默認目錄下就可以了愕秫。安裝過程的話網(wǎng)上隨便一搜就有了。
- 第二種方式的話是使用docker,個人比較推薦的挟炬,方便快捷拿來就用鸥滨。
- 安裝docker(docker應(yīng)用還是很廣的,裝一下準沒錯)
- 去dockerhub找一下shiny相關(guān)的鏡像
- 這邊簡單點直接docker pull 這個鏡像谤祖,然后docker exec 或 run 進入容器婿滓,然后進入R進行install.packages 安裝你的shiny應(yīng)用所需要的包
- 第二種的話比較推薦,還是出于方便部署的原因,去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"]
- 測試運行
上面的步驟做完運行就很簡單了
docker run -d -p 3838:3838 -v /root/Myrpro/:/srv/shiny-server myshiny
效果 http://120.78.66.186:3838/test1/
- 最后如果測試成功后可以通過docker-compose 或者 k8s進行部署秕铛。