怎么在我的小破服务器上部署shiny—server
1. 方法
- 在腾讯云域名里,添加一个泛解析,就是主机记录写成“*”,记录值填你的服务器ip。在阿里云服务器管理平台中,开启3838端口。
- 在服务器安装最新的R,默认情况下debian10只能安装3.6的R,根据官方文档安装成4.2的R。
- 安装shiny server,按照官方文档就可以了。
- 由于我的小破服务器内存只有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 # 检查所有的交换空间
- 用root账户在linux里启动R环境,按照shiny中需要的R包。这个时候就可以通过(ip+端口+项目文件夹名称,比如http://47.101.222.2:3838/01_hello)使用shiny-server了。
- 配置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; } }
- 但想上面这样配置好还有一个问题,通过类似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的官方文档在这里。
- 现在可以在mac端和手机端通过类似于shiny.caigui.site/01_hello。另外,调试中,要及时清空缓存和cookie,否则做的更改有可能不能及时刷新。 ```
2. 感想
每一步都有一堆坑,总共耗时一周,才搞定了这个玩意,真是不容易啊!