专栏首页云计算教程系列如何使用Shiny Server部署R应用程序
原创

如何使用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 条评论
登录 后参与评论

相关文章

  • 如何在Ubuntu 14.04上运行解析服务器

    Parse是一个移动后端即服务平台,自2013年起由Facebook拥有。2016年1月,Parse 宣布其托管服务将于2017年1月关闭。

    宇cccc
  • 如何在Ubuntu上安装MutliCraft

    PS:本文撰写前已查询相关法律,本文内容不违反《互联网文化管理暂行规定》,遵守EULA协议,请勿举报。

    宇cccc
  • 如何使用Debian 9上的Let加密保护Apache

    我们的加密是一个证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。它通过提供软件客户端...

    宇cccc
  • 【插件开发】—— 5 SWT控件以及布局使用

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知   经过前几篇的介绍,多少对S...

    用户1154259
  • Jedis使用

    Redis的知识我们已经介绍的差不多了,本文我们来看看如何使用Java操作redis。

    江南一点雨
  • redis0.1源码解析之基本原理

    本文分析redis的基础原理,暂不做深入分析,后续再详细分析。我们从main函数开始。

    theanarkh
  • Socket 编程

    最近在录一套关于 Web 页面获取 MAC 地址的视频,Web 页面要获取 MAC 地址是以前项目中的真实案例,其中的解决方法也换了几波。最终的...

    码农UP2U
  • 【Flutter 专题】20 图解【分享页面】底部对话框

    和尚在学习 Flutter 过程中需要处理一个类似 Android 中 PopupWindow 效果的分享弹框页。看似很简单的页面,里面却有很多值得...

    阿策小和尚
  • Python实现socket信息发送和监

    最近在研究boost C++库,用于工作中处理大规模高并发TCP连接数据响应,想测试,也可以用boost::asio库来写,但不利于测试代码的灵活修改。

    py3study
  • 为什么我推荐Nginx作为后端服务器代理

    我们真实的服务器不应该直接暴露到公网上去,否则更加容易泄露服务器的信息,也更加容易受到攻击。一个比较“平民化”的方案是使用Nginx反向代理它。使用Nginx反...

    码农小胖哥

扫码关注云+社区

领取腾讯云代金券