如何使用Shiny Server部署R应用程序

什么是Shiny?

Shiny是R编程语言的库,允许您在本机R中创建交互式Web应用程序,而无需使用HTML,CSS或JavaScript等Web技术。将Shiny应用程序部署到Web上的方法有很多种; 本教程使用Shiny Server在Linode上托管示例Shiny应用程序。

准备

首先您需要一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

您还需要在您的本地计算机安装RStudio,如何安装请参考RStudio官方文档

构建一个Shiny测试应用

Shiny Server附带预装的演示应用程序。但是,为了演示部署应用程序的过程,您将在本地创建应用程序并将其部署到CVM上的Shiny Server。

  • 打开RStudio并安装Shiny包:
install.packages('shiny')
  • 在“ 文件”菜单中的“ 新建文件”下,选择“ Shiny Web App ...”。出现提示时,选择项目名称。选择多个文件,然后选择一个目录来存储新应用程序的文件。
  • Rstudio自动打开两个新文件:ui.Rserver.R。这些文件预先填充了一个演示应用程序,该应用程序将创建R的内置Old Faithful数据集的交互式直方图。编辑server.R以根据您的喜好调整直方图的格式。例如,要使用黑色边框将条形更改为红色:
hist(x, breaks = bins, col = 'red', border = 'black')
  • 要在本地测试项目,请单击文本编辑器右上角的“ 运行应用程序”
  • 保存项目并将文件复制到您的CVM。替换username为您的Unix帐户用户名以及修改linodeIP为您的CVM的公共IP地址或域名:
scp -r ~/shiny/Example username@linodeIP:/home/username

将Shiny应用程序部署到远程服务器

应在您的CVM上完成本节中的步骤。

安装R

  • 打开/etc/apt/sources.list并将以下行添加到文件末尾:

Ubuntu:

deb http://cran.rstudio.com/bin/linux/ubuntu xenial/

Debian:

deb http://cran.rstudio.com/bin/linux/debian stretch-cran34/
  • 添加CRAN网络的密钥ID:

Ubuntu GPG密钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9

Debian GPG密钥:

sudo apt install dirmngr
sudo apt-key adv --keyserver keys.gnupg.net --recv-key 'E19F5F87128899B192B1A2C2AD5F960A256A04AF'
  • 更新存储库:
sudo apt update
  • 安装R二进制文件:
sudo apt install r-base

添加Shiny Package

使用install.packages()添加有Shiny包:

sudo su - \
-c "R -e \"install.packages('shiny', repos='https://cran.rstudio.com/')\""

安装Shiny Server

  1. 安装gdebi: sudo apt install gdebi-core
  2. 下载Shiny Server: wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server-1.5.6.875-amd64.deb
  3. 使用gdebi安装Shiny服务器软件包: sudo gdebi shiny-server-1.5.6.875-amd64.deb
  4. shiny-server服务应自动启动。检查其状态: sudo systemctl status shiny-server.service
  5. 在浏览器中,打开您的CVM的公共IP地址并加上3838端口 (例如example.com:3838)。您应该看到Shiny Server欢迎页面:

部署应用程序

默认情况下,Shiny Server /srv/shiny-server/用作其站点目录。此目录中的任何Shiny应用程序都将自动提供。

  • 将示例app目录复制到/srv/shiny-server/
sudo cp -r Example/ /srv/shiny-server/
  • 在Web浏览器中,导航到应用程序的地址。替换example.com为您的CVM的公共IP地址:
example.com:3838/Example

您应该看到您的应用显示:

配置Shiny Server

Shiny Server的配置文件存储在/etc/shiny-server/shiny-server.conf

/etc/shiny-server/shiny-server.conf

# Instruct Shiny Server to run applications as the user "shiny"
run_as shiny;
​
# Define a server that listens on port 3838
server {
  listen 3838;
​
  # Define a location at the base URL
  location / {
​
    # Host the directory of Shiny Apps stored in this directory
    site_dir /srv/shiny-server;
​
    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;
​
    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  }
}

您可以编辑Shiny Server将侦听的端口,或更改提供应用程序的站点目录。directory_index选项允许访问者通过导航到该路径来查看目录的内容(例如,访问example.com:3838/sample-apps将显示Shiny Server安装中包含的示例应用程序的列表)。您可以通过将此选项设置为禁用此行为并隐藏目录的内容off。有关配置Shiny Server的详细信息,请参阅官方管理员指南。

更改此文件后,重新启动该shiny-server服务:

sudo systemctl restart shiny-server.service

总结

为了使部署的应用程序与本地环境中所做的更改保持同步,请考虑使用更复杂的部署方法,例如Git或Rsync。生产部署还可能希望在反向代理后面运行Shiny Server以利用其他安全性和优化功能。怎么样,学会了吗?快尝试购买一台服务器进行测试吧!更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How to Deploy Interactive R Apps with Shiny Server》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴柯的运维笔记

分享Shell脚本几个简单字符及字符串应用实例

shell脚本中,在一行输入多个命令时: A;B;C   #执行A;执行B;执行C A&&B   #执行A,仅当A成功,才执行B A||B ...

2835
来自专栏Python中文社区

用python搭建一个校园维基网站(二)—— 可编辑内容的首页的创建

專 欄 ❈ treelake ,Python中文社区专栏作者 项目Github地址: https://github.com/zr777/school-wik...

4068
来自专栏Mamba

PHP开发个人博客

3085
来自专栏运维小白

10.22 firewalld关于service的操作

Linux防火墙-firewalled firewall-cmd --get-services 查看所有的servies firewall-cmd -...

3065
来自专栏李蔚蓬的专栏

关于Android Studio中Run按钮是灰色的解决

今天导入一个别人的项目,在导入之前是老方法,覆盖  了三个关键文件之后(.gradle文件夹的内容版本若与本地不一,也应删掉),重启AS;

2.8K2
来自专栏python3

Nginx日志指定时间段查询

查看指定时间的日志  19:00~20:00 cat access.log |awk -F "[ |/]"  '$6>="2017:19:00:00"&&$6<...

1952
来自专栏计算机编程

electron-vue 制作 http 应用客户端

关于https声明:由于在制作过程中发现https重定向问题尚未解决,所以只将http客户端相关制作流程开源出来,让大家可以制作属于自己的http页面应用

6135
来自专栏技术博文

centos7精简安装后使用发现没有killall命令

centos7精简安装后,使用中发现没有killall命令。 经查找,可以通过以下命令解决: yum install psmisc 简单介绍一下 psmisc ...

2633
来自专栏Samego开发资源

让子弹飞 | 那个程序员的mac常用软件清单目录

Magnet keeps your workspace organized. Activated by dragging, customizable keyb...

1452
来自专栏漏斗社区

工具 | w3af系列安装篇(一)

W3af是一个基于Python的Web应用扫描器,本期我们将来唠一唠w3af的安装和使用。 ? 在windows上安装 ‍‍‍‍‍ 官网的最新版本已经不提...

3987

扫码关注云+社区

领取腾讯云代金券