1. 程式人生 > >(資料科學學習手札66)在ubuntu伺服器上部署shiny

(資料科學學習手札66)在ubuntu伺服器上部署shiny

一、簡介

  shiny是R中專門用於開發輕量級web應用的框架,在本地寫一個shiny應用並呼叫非常方便,但如果你希望你的shiny應用能夠以遠端的方式提供給更多人來使用,就需要將寫好的shiny應用部署到伺服器上,主要有兩種方式,第一種是將shiny應用釋出在shinyapps上,第二種是將你的shiny應用部署到自己租用的伺服器上,前者比較方便但遇到一些R包環境或中文顯示等問題時幾乎是無解的,而後者雖然麻煩,但更為自由,且從0開始自己動手的過程又何嘗不是一種極大的樂趣呢,本文就將針對在ubuntu 16.04伺服器上部署shiny server的流程進行詳細的說明;

 

二、環境配置

2.1 伺服器配置說明

  我使用的伺服器是阿里雲ECS,ubuntu 16.04,2核8G記憶體,40G系統盤,如果條件允許的話,建議記憶體不要選擇過小,否則在編譯安裝一些R包如raster時會記憶體不足(當然你也可以通過swap的方式來增加虛擬記憶體,但速度是非常慢的),用於連線伺服器的工具為putty,通過putty登入伺服器:

2.2 安裝最新版R

  首先我們需要安裝最新版的R(寫作此文時最新的穩定版本為3.6.1),檢視R官網對於ubuntu安裝最新版R的介紹:

  按照上述步驟,首先用vim開啟對應的sources.list檔案:

sudo vim /etc/apt/sources.list

 

   按i進入編輯模式,結合我們系統版本,把前面R官網說明頁面中的deb https://cloud.r-project.org/bin/linux/ubuntu xenial-cran35新增進檔案中,按esc後,再按shift+:,輸入wq完成寫入並退出過程:

  接著執行下列命令來安裝最新版的R,遇到y/n全部選擇y:

sudo apt-get update
sudo apt-get install r-base

  這時檢視R版本:

  這時可以看到我們已經成功安裝了最新版本的R。

 

2.3 安裝Rstudio與Rstudio Server

  接下來我們來安裝Rstudio以及Rstudio Server,用於遠端編寫及管理伺服器上的R程式,在官網對應的下載頁面找到對應我們系統版本的geb格式安裝包下載連結:

  Rstudio:

  Rstudio Server:

  其實可以在伺服器中輸入wget 下載連結 來下載對應的檔案,但是無奈這樣下速度太慢,於是我在本地電腦用了梯子之後以很快的速度下載了Rstudio的geb檔案,然後用pscp上傳到我們的伺服器上的指定目錄下:

  除此之外還需要安裝用以開啟geb格式檔案的相關程式:

sudo apt-get install gdebi

   接下來執行下列命令安裝Rstudio:

 sudo gdebi rstudio-1.2.1335-amd64.deb

  同樣的方式,我們用pscp上傳Rstudio Server的安裝包到剛才的目錄下執行下列語句:

sudo gdebi rstudio-server-1.2.1335-amd64.deb

  在完成上述命令後,我們可以通過訪問http://你的伺服器公網IP:8787來使用Rstudio Server服務:

  這裡輸入的賬戶和密碼與伺服器登入賬戶與密碼一致,這裡不得不吐槽一下Rstudio Server的傻逼設定,這裡登入的賬戶和密碼不能已獲取超級使用者許可權,沒關係,我們新建一個沒有超級使用者許可權的使用者:

sudo adduser 使用者名稱

  這樣我們就可以用這個無超級使用者許可權的賬號登入Rstudio Server:

  可以看到熟悉的介面,就是個線上版的Rstudio,可以通過它來方便地修改伺服器上的R程式碼。

 

2.4 安裝shiny和shiny server

  接下來到了最重要的地方,我們來安裝shiny和shiny server,首先我們在伺服器上的R環境中安裝shiny包:

  安裝成功:

  接下來安裝shiny server,同樣的在本地從官網下載對應的geb安裝包,然後用pscp上傳到指定目錄下:

  執行下列命令來安裝shiny server:

sudo gdebi shiny-server-1.5.9.923-amd64.deb

  安裝完成後訪問 http://伺服器公網IP:3838,這是shiny server的預設導引頁,若能顯示正常則證明shiny server安裝成功:

  這時可以發現右側下方的應用沒有正常顯示,但這裡並沒有明確顯示具體的報錯資訊,為了在shiny應用出錯時能顯示具體的錯誤資訊,我們需要修改shiny server的配置檔案,執行下列命令開啟shiny server的配置檔案:

vim /etc/shiny-server/shiny-server.conf

  如圖所示位置新增上兩行語句用於設定shiny應用出錯時顯示具體錯誤資訊,儲存退出,重新訪問剛才的頁面:

  可以看出這時顯示的報錯資訊提示我們缺失rmarkdown包,在R環境中安裝rmarkdown後再次訪問此頁面:

  這時可以看到對應的應用都已正常顯示,而這兩個應用所在的路徑在shiny server的配置檔案中有說明:

  開啟對應路徑可以看到hello和rmd兩個資料夾,每個資料夾代表一個應用,其內部擁有標準的shiny應用的ui.R和server.R,有時也會有global.R來輔助程式執行:

  同樣的,我們可以修改配置檔案中的預設應用路徑到我們自己的應用位置,而在管理shiny server執行上,主要用到下列命令:

#檢視狀態
sudo systemctl status shiny-server
#開啟
sudo systemctl start shiny-server
#停止
sudo systemctl stop shiny-server
#重啟
sudo systemctl restart shiny-server

  而直接訪問應用就是在剛才的引導頁url後面新增路徑資訊,如我們直接來訪問hello應用,http://伺服器公網IP:3838/sample-apps/hello/ :

  至此,我們就完成了在ubuntu上配置部署shiny應用的全部工作,當你想要部署新的應用時,只需要將應用對應資料夾放入應用預設目錄下再按照格式訪問即可。

 

  以上就是本文的全部內容,如有筆誤或不清楚之處望指