缘起
最近带学生一起开发了一个英文文献智能分析系统,准备部署在腾讯云服务器上,现在把部署过程记录下来,留作备忘。
部署过程
开发好的shiny应用,首先应该要在本地电脑上运行正常,一般分为 ui.R
和 server.R
两个文件。
在向腾讯云服务器部署前,需要确认在腾讯云服务器上已完成以下安装:
- R和Rstudio server
- Shiny server
如果完成上述软件的安装与配置,就可以开始以下步骤:
步骤1:熟悉并对 shiny server做基本配置
shiny server安装好后,需要熟悉其基本配置,详细的配置说明可以查看 Rstudio公司的官网介绍:https://docs.rstudio.com/shiny-server/
其中需要重点熟悉的配置文件是shiny-server.conf
,默认的文件存放路径是 /etc/shiny-server/shiny-server.conf
可以用 vi 编辑器或用 winscp直接打开对应目录下的文件,如下:
# Define the user we should use when spawning R Shiny processes
run_as shiny; ## 指定运行shinyapp的user是谁
# Define a top-level server which will listen on a port
server {
# Instruct this server to listen on port 3838
listen 3838; ## 设置shiny-app的监听端口是3838
# Define the location available at the base URL
location / {
# Run this location in 'site_dir' mode, which hosts the entire directory
# tree at '/srv/shiny-server'
site_dir /srv/shiny-server; ## shiny-app对应的服务器根目录
# Define where we should put the log files for this location
log_dir /var/log/shiny-server; ## shiny-app运行过程中产生的日志文件存放位置
# Should we list the contents of a (non-Shiny-App) directory when the user
# visits the corresponding URL?
directory_index on;
}
}
上述配置文件中值得注意的三处地方如下:
site_dir 后指明的是Shiny App存放的地址,通常将
ui.R
和server.R
放在同一个目录下;log_dir 是Shiny App运行过程中产生的日志文件,App出现了任何报错,都可以从这个目录下去寻找报错原因
可以通过编辑上述配置文件,修改Shiny server侦听的端口,或更改提供应用程序的站点目录。directory_index选项允许访问者通过导航到该路径来查看目录的内容(例如,访问example.com:3838/sample-apps将显示Shiny Server安装中包含的示例应用程序的列表)。可以通过将此选项设置从 on 改为 off 以隐藏目录的内容。
shiny server的常规命令如下
## 在非 root 用户权限下,重启
sudo systemctl restart shiny-server
## 在非 root 用户权限下,查看状态
sudo systemctl status shiny-server
## 在非 root 用户权限下,开启
sudo systemctl start shiny-server
## 在非 root 用户权限下,停止
sudo systemctl stop shiny-server
步骤2:上传开发好的程序文件
在步骤1对 shiny-server.conf
文件配置好的基础上,将 ui.R
和 server.R
所在文件夹上传到腾讯云服务器 Shiny server 根目录下。
步骤3:检验程序运行状况
在完成步骤2的基础上,打开网站 http://ip:3838/(目录名) 如果页面刷新后显示在本地成功运行的界面,说明 Shiny app可以在服务器上成功运行。如果页面报错,就需要逐一查明问题所在, 相关的差错方案可以参阅以下资料:
在ubuntu服务器上部署shiny (泛读)
https://support.rstudio.com/hc/en-us/search?utf8=%E2%9C%93&query=shiny+server+error