前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Shiny Server部署R应用程序

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

原创
作者头像
宇cccc
发布2018-08-20 11:33:57
5.8K1
发布2018-08-20 11:33:57
举报

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

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

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

安装R

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

Ubuntu:

代码语言:javascript
复制
deb http://cran.rstudio.com/bin/linux/ubuntu xenial/

Debian:

代码语言:javascript
复制
deb http://cran.rstudio.com/bin/linux/debian stretch-cran34/
  • 添加CRAN网络的密钥ID:

Ubuntu GPG密钥:

代码语言:javascript
复制
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9

Debian GPG密钥:

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

添加Shiny Package

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

代码语言:javascript
复制
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/
代码语言:javascript
复制
sudo cp -r Example/ /srv/shiny-server/
  • 在Web浏览器中,导航到应用程序的地址。替换example.com为您的CVM的公共IP地址:
代码语言:javascript
复制
example.com:3838/Example

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

配置Shiny Server

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

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

代码语言:javascript
复制
# 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服务:

代码语言:javascript
复制
sudo systemctl restart shiny-server.service

总结

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


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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Shiny?
  • 准备
  • 构建一个Shiny测试应用
  • 将Shiny应用程序部署到远程服务器
    • 安装R
      • 添加Shiny Package
        • 安装Shiny Server
          • 部署应用程序
            • 配置Shiny Server
            • 总结
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档