(數據科學學習手札66)在ubuntu服務器上部署shiny
- 2019 年 10 月 3 日
- 筆記
一、簡介
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應用的全部工作,當你想要部署新的應用時,只需要將應用對應文件夾放入應用默認目錄下再按照格式訪問即可。
以上就是本文的全部內容,如有筆誤或不清楚之處望指出!