shiny-server部署

shiny部署

一、shiny-server的安装

1.安装Shiny

1.1 安装R
sudo apt install r-base
1.2 安装Rstudio-server-8787
#安装方式一
sudo apt-get install gdebi-core
sudo apt-get install libapparmor1
wget https://download2.rstudio.org/rstudio-server-1.0.143-amd64.deb
sudo gdebi rstudio-server-1.0.143-amd64.deb

#安装方式二
wget https://download2.rstudio.org/rstudio-server-rhel-1.1.456-x86_64.rpm
sudo yum install rstudio-server-rhel-1.1.456-x86_64.rpm

因为Rstudio-server不能以root用户登录,所以我们需要创建一个用户

#新建用户
sudo useradd -m user_name #需要home下有目录
# 设置密码
sudo passwd usr_name #第一次先输入用户名,在一次输入密码
#切换用户
su usr_name
#批量新建用户
#! /bin/bash
for user in `cat user.txt`
         do       
               #新建用户及文件夹
               useradd -m $user
               #修改密码为123456
               echo $user:"123456" | chpasswd

         done 

然后在网页上输入服务器IP:8787进入Rstudio-server界面,输入用户和密码,即可登录

1.3 安装Shiny-3838
sudo su - -c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\""

不能直接进入R,然后install.packages("shiny"),因为如果这样安装,是将shiny包安装下当前登录用户的个人library中,使得最终shiny-server无法运行

但是可以考虑在root用户下执行R包安装命令,但是后期可能会出现问题。

  • 下载方式一
sudo apt-get install gdebi-core
wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server-1.5.3.838-amd64.deb
sudo gdebi shiny-server-1.5.3.838-amd64.deb
  • 下载方式二

也可以去shiny-server的下载网址可以去官网上查找相应的版本进行下载,打开网址:https://www.rstudio.com/products/shiny/shiny-server/ , 可以看到有多个shiny-server的版本

## wget下载
wget https://download3.rstudio.org/centos6.3/x86_64/shiny-server-1.5.9.923-x86_64.rpm
## 安装
sudo yum install --nogpgcheck shiny-server-1.5.9.923-x86_64.rpm

做完以上几步后,shiny-server算是初步安装好了,然后可以在网页上52.24.111.0:3838进入shiny-server界面(52.24.111.0是服务器ip地址,监听接口为3838)。一般我们能看到左边一列的文字和右边的两个框。当然还需要再安装个rmarkdown,不然还是会有error的

sudo su - -c "R -e \"install.packages('rmarkdown',repos='http://cran.rstudio.com/')\""

2. 配置Rstudio Server

  • 更改R配置
sudo vi /usr/lib/R/etc/Rprofile.site

sudo vim /etc/rstudio/rserver.conf
# 切换版本
# 更改下面两个则切换anaconda2/bin和/usr/bin/下面的R版本,二者选一
rsession-which-r=~/biotools/anaconda2/bin/R
rsession-which-r=/usr/bin/R
# 设置端口-添加下列语句
www-port=8787 ### 通过ip的8787端口连接
  • 在防火墙配置文件中添加8787端口
sudo vi /etc/sysconfig/iptables
###在文件中添加以下语句:
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 8787 -j ACCEPT
### 重启防火墙
sudo service iptables restart

sudo netstat -anp ###查看开放的端口信息
  • Rstudio Server的常规管理操作
sudo rstudio-server verify-installation #查看安装是否正常
sudo rstudio-server start               #启动RStudio-server
sudo rstudio-server status              #查看RStudio-server
sudo rstudio-server stop                #关闭RStudio-server
sudo rstudio-server restart             #重启RStudio-server
sudo rstudio-server active-sessions #查看sessions
sudo rstudio-server suspend-session <pid> #暂停session
sudo rstudio-server suspend-all
sudo rstudio-server kill-session <pid> #关闭session
sudo rstudio-server kill-all
sudo rstudio-server offline/online #离线/上线通知
  • admin管理
  1. 管理默认关闭,需要在配置中启用:
sudo vi /etc/rstudio/rserver.conf
# 修改以下配置
admin-enabled=1
admin-group=rstudio-admins
admin-superuser-group=rstudio-superuser-admins
  1. 重启rstudio server生效。
  2. 启动管理界面
http://<server-address>/admin

3. 配置Shiny Server

3.1 references
  • Shiny Server log is at /var/log/shiny-server.log
  • The default Shiny Server homepage you’re seeing is located at /srv/shiny-server/index.html - you can edit it or remove it.
  • Any Shiny app directory that you place under /srv/shiny-server/ will be served as a Shiny app. For example, there is a default app at /srv/shiny-server/sample-apps/hello/, which means you can run the app by going to http://123.456.1.2:3838/sample-apps/hello/
  • The config file for Shiny Server is at /etc/shiny-server/shiny-server.conf
  • To reload the server after editing the config, use sudo reload shiny-server
  • When hosting an Rmarkdown file, name the file index.rmd and add runtime: shiny to the document’s frontmatter

对于配置文件的一些修改:

  • 查看配置文件内容
vi /etc/shiny-server/shiny-server.conf
## vi /opt/shiny-server/config/default.config

配置文件内容如下

# 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的监听端口

  # 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的存放地址
  • log_dir 是Shiny-App的运行过程中产生的日志文件,App出现了任何报错,都可以从这个目录下去寻找报错原因
  • shiny-server的常规管理操作
## 重启
sudo systemctl restart shiny-server
## 查看状态 
sudo systemctl status shiny-server 
## 开启 
sudo systemctl start shiny-server 
## 停止 
sudo systemctl stop shiny-server 
3.2 赋予shiny权限

假设当你登录是以usr_name登录,你在shiny server创建的文件只有该用户(除了root)才有权限读写,但是shiny server是以shiny用户来运行shiny的app,所以要给予shiny用户在一些目录的权限;或者在shiny用户下创建文件;或者更改shiny-server的配置文件

sudo groupadd shiny-apps
sudo usermod -aG shiny-apps usr_name
sudo usermod -aG shiny-apps shiny
sudo chown -R shiny:shiny-apps /srv/shiny-server
sudo chmod g+w /srv/shiny-server
sudo chmod g+s /srv/shiny-server  ####在该目录下创建的文件都属于该目录所属的组

4. 从Git下载shiny app-示例

  1. 下载shiny官网的例子

    git clone https://github.com/rstudio/shiny-examples.git
    

    文件是要下载到/srv/shiny-server中,shiny app文件最终传输位置。

  2. 运行例子程序

    http://52.24.111.0:3838/shiny-examples/010-download/
    

    想要运行哪个shiny app,只要在http://52.24.111.0:3838/后面添加/srv/shiny-server中的文件的相对路径即可

二、报错收集

安装shiny-server的过程并不是一帆风顺的,遇见报错,就要排除bug!
shiny-app运行报错,我们需要重点从以下几个方面查看错误

  • 第一,是看shiny-server本身的配置是否运行出错
  • 第二,是看咱们写的shiny-App在运行过程中,程序是否有错
## 1. 查看Server-Log, Server-Log提供了shiny-server运行过程中的日志文件vi /var/log/shiny-server.log file## 2. 查看App-Log, (App-Log提供了shiny-app运行过程中的报错日志)cd /var/log/shiny-server

Shiny app - “Disconnected from the server. Reload.

可以登陆了,但是出现闪退: Shiny app - “Disconnected from the server. Reload.”

  • 解决方案链接1:https://stackoverflow.com/questions/42793154/shiny-app-not-working-on-shiny-server-with-no-log-file-present

  • 解决方案链接2:https://stackoverflow.com/questions/42265329/shiny-server-connection-closed-info-typeclose-code4503-reasonthe

使用**ctrl + shift + J**可以直接调出浏览器的连接报错信息 ,也可以用这个报错信息搜索解决方法

  • 解决具体办法

此时我们先去目录/var/log/shiny-server下查看shiny-app的运行日志情况,发现没有App的运行日志.是因为在配置文件中没写上,咱们写上即可

打开Shiny-Server的配置文件,sudo vi /etc/shiny-server/shiny-server.conf

run_as shiny; 后加上两句话:

sanitize_errors false;preserve_logs true; ## 此句话,就是让App显示log报错

同时在自己写的shiny-app程序中也加上 options(shiny.sanitize.errors = FALSE) 这句话
保存shiny-server的配置,程序也更改后,重启shiny-server即可 sudo systemctl restart shiny-server(注:不重启的话配置不生效!)

Error in loadNamespace(name) : there is no package called ‘digest’

报错的核心原因是,shiny-server启动关联的R和我们自己启动的R不一致

即我们刚才安装的digest包并没有安装在shiny-server关联的R所在的library中,但我们无法更改shiny-server默认的R-path,把我们现在正在用的R位置关联给shiny-server

我们可以通过设置shiny-server登陆方式,在shiny账户下安装R包

咱们的配置文件里面有一句话是:
run_as shiny; ## 这句话指定我们运行shinyapp的user是shiny ,因为shiny-server创建完成之后,便会默认创建shiny用户
所以我们现在就登陆这个user账户,然后在user账户权限下 安装缺失的包!

## 首先,为咱们的user账户shiny,设置密码sudo passwd shiny ## 输入这句话后,会弹出一个设置密码的框框,咱们自由设置密码就行## 接着,登陆咱们刚才设置的shiny-user账户su - shiny  ## 登陆过程中,会让你输入刚才自己设置的密码## 然后,在此账户下启动 R  (without sudo)R## 最后,安装所需要的包: install.packages("digest",repos = "https://mirrors.ustc.edu.cn/CRAN/")  ## repos代表下载镜像选清华的

Shiny server: application failed to start

An error has occurred\The application failed to start.The application exited during initialization.
1. 检查R包的安装

是否调用的所有R包都已安装, 使用root安装,在个人用户下安装是不行的。

sudo su - -c "R -e \"install.packages('WGCNA', repos='http://cran.rstudio.com/', dependencies = TRUE)\""

或下载到本地:

suR CMD INSTALL WGCNA_1.69-81.tar.gz
2. 修改配置文件
  • shiny-server配置
  • shiny-server 配置文件
$ vi  /etc/shiny-server/shiny-server.conf# Define the user we should use when spawning R Shiny processesrun_as shiny;# Define a top-level server which will listen on a portserver {  # Instruct this server to listen on port 3838  listen 3838;  # Define the location available at the base URL  location / {    #### PRO ONLY ####    # Only up tp 20 connections per Shiny process and at most 3 Shiny processes    # per application. Proactively spawn a new process when our processes reach     # 90% capacity.    utilization_scheduler 20 .9 3;    #### END PRO ONLY ####    # Run this location in 'site_dir' mode, which hosts the entire directory    # tree at '/srv/shiny-server'    site_dir /srv/shiny-server;        # Define where we should put the log files for this location    log_dir /var/log/shiny-server;        # Should we list the contents of a (non-Shiny-App) directory when the user     # visits the corresponding URL?    directory_index on;  }}# Setup a flat-file authentication system. {.pro}auth_passwd_file /etc/shiny-server/passwd;# Define a default admin interface to be run on port 4151. {.pro}admin 4151 {  # Only permit the user named `admin` to access the admin interface.  required_user admin;}
  • run_as shiny: shiny改为linux用户名
  • 检查app路径,一般是:/srv/shiny-server;不是这个路径,就检查权限,可用chmod修改。
# 开放防火墙sudo ufw allow 3838/tcp# 重启shiny-serversudo systemctl restart shiny-server

shiny server的配置重新设置过之后,需要重新启动才可以更新。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值