在服务器上部署shiny-server

134

官网:https://posit.co/download/shiny-server/

1. 方法

  1. 在腾讯云域名里,添加一个泛解析,就是主机记录写成“*”,记录值填你的服务器ip。在阿里云服务器管理平台中,开启3838端口。
  2. 在服务器安装最新的R,默认情况下debian10只能安装3.6的R,根据官方文档安装成4.2的R。
  3. 安装shiny server,按照官方文档就可以了。
  4. 由于我的小破服务器内存只有2G,在安装一些R包(就是你,rcppeigen)时会因为内存不足报错。解决方法是在服务器设置一个交换空间,我设置了一个4G的,目前用着是感觉够用了。毕竟这云服务总共也就60G空间。另外,这个交换空间最好一直启用,否则后续可能打开一个shiny应用,服务器就崩了。
cd /
sudo dd if=/dev/zero of=swapfile bs=4M count=1024
sudo chmod 600 swapfile
sudo mkswap swapfile
sudo swapon swapfile
sudo vim /etc/fstab
# 最后一行添加 "/swapfile none swap sw 0 0",这样就算服务器重启也不用重新设置了
# 另外一些相关命令
sudo swapoff -a # 关闭所有交换空间
sudo swapon -a # 挂载 /etc/fstab 文件中列出的所有交换空间
sudo swapon -s # 检查所有的交换空间
  1. 用root账户在linux里启动R环境,按照shiny中需要的R包。这个时候就可以通过(ip+端口+项目文件夹名称,比如http://47.101.222.2:3838/01_hello)使用shiny-server了。
  2. 配置nginx反向代理,具体来说就是在/etc/nginx/sites-available/defaulthttp里添加下面这段,之后用软链接,链接到/etc/nginx/sites-enabled里。配置好后就可以通过shiny.caigui.site/01_hello使用了。
server {
    listen       443 ssl;
    server_name  shiny.caigui.site www.shiny.caigui.site;
    location / {
                proxy_pass http://127.0.0.1:3838;
    }
}
  1. 但想上面这样配置好还有一个问题,通过类似shiny.caigui.site/01_hello的链接打开的shiny页面,其中的动态元素呈现灰色,不能正常使用(具体来说,这个情况出现在mac的chrome浏览器中,使用iphone的chrome浏览器就正常了,windows我没有测试)。解决方法是,在/etc/shiny-server的shiny-server.conf的最下面,添加“sanitize_errors off;disable_protocols xdr-streaming xhr-streaming iframe-eventsource iframe-htmlfile;”,添加完后就正常了。解决方法来自这里,另外shiny-server的官方文档在这里
  2. 现在可以在mac端和手机端通过类似于shiny.caigui.site/01_hello。另外,调试中,要及时清空缓存和cookie,否则做的更改有可能不能及时刷新。
 
## 2. 感想
每一步都有一堆坑,总共耗时一周,才搞定了这个玩意,真是不容易啊!