怎么在我的小破服务器上部署shiny—server

官网: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 # 检查所有的交换空间
    
  5. 用root账户在linux里启动R环境,按照shiny中需要的R包。这个时候就可以通过(ip+端口+项目文件夹名称,比如http://47.101.222.2:3838/01_hello)使用shiny-server了。
  6. 配置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;
     }
    }
    
  7. 但想上面这样配置好还有一个问题,通过类似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的官方文档在这里
  8. 现在可以在mac端和手机端通过类似于shiny.caigui.site/01_hello。另外,调试中,要及时清空缓存和cookie,否则做的更改有可能不能及时刷新。 ```

2. 感想

每一步都有一堆坑,总共耗时一周,才搞定了这个玩意,真是不容易啊!

results matching ""

    No results matching ""