[ShinyApp]第一次將ShinyApp部署到云服務(wù)器的經(jīng)歷

不知道各位是否經(jīng)歷過,利用shinyapp官網(wǎng)的上傳方式(shinyapp.io)來部署我們的應(yīng)用,用戶上傳文件的速度過于緩慢,一個幾M的壓縮包要上傳N年! 為了滿足項目的需要,有什么好的辦法解決這個問題呢?【背景】

我在網(wǎng)上看到有個博主遇到的情況和我類似,他建議將shinyapp部署到云服務(wù)器上。于是也嘗試將自己寫的app部署到云服務(wù)器上。

PS: 這是第一次用云服務(wù)器,另外沒有接觸過Linux系統(tǒng),可以說對這一套流程完全懵逼!
------ PART 1 云服務(wù)器(ECS)

話不多說,直接開干!一開始我也看了許多博主的經(jīng)驗貼,然后基本上所用到的軟件就是shiny server,于是我就轉(zhuǎn)到這個軟件的官網(wǎng)。嚯!好家伙,要Linux系統(tǒng),這我一電腦windows,這Linux也不會啊,但是沒辦法,得認清現(xiàn)實。


Platform

下一步就是要下載一個帶Linux系統(tǒng)的云服務(wù)器了,于是我就轉(zhuǎn)到了某里云的網(wǎng)址,一堆新奇玩意兒應(yīng)接不暇,如ECS,域名注冊,公網(wǎng)IP等等。那我們肯定是需要云服務(wù)器啦(ECS)。然后誤打誤撞,看見了有免費試用的頁面,這里就不放上面了,讀者自行查找。結(jié)合最開始那個博主的帖子,我也嘗試試用了一臺1核2G的服務(wù)器,
其中地域隨機分配的,1M帶寬,系統(tǒng)是ubuntu 20.04 64位,然后買完就是下面這個樣子:


實例

但是,還沒完,我們要給這個新玩意兒配置安全組?。▌e問我為什么,我也是學(xué)百度的做法)
更多->網(wǎng)絡(luò)和安全組->安全組配置->配置規(guī)則->手動添加->依次設(shè)置


安全組

其中描述隨便寫啦,點擊保存就OK了。但是,我們怎么操控我們的服務(wù)器呢?點擊實例里面的操作(遠程連接),里面有3種方案:Workbench,VNC遠程連接,發(fā)送遠程命令。系統(tǒng)推薦使用第三種,但是我選擇第二種。第一次用VNC要設(shè)置實例密碼,6位數(shù),以后每次用這個登錄都必須要輸入VNC密碼?。≡O(shè)置好了之后,愉快的ubuntu操作頁面就出現(xiàn)了。
------ PART 2 R

首先引入眼簾的是,登錄頁面(當時這里不知道輸啥,還以為是阿里云的賬號,然后瘋狂百度),我們應(yīng)該輸入root,然后密碼是實例密碼,相當于windows的初始管理員admin。然后就可以輸入Linux代碼啦!要修改配置,為了安裝R的最新版本,輸入命令

vim /etc/apt/sources.list
sources

要拉到底才看得見綠色的提示,輸入E,進入編輯模式,插入

deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/

要結(jié)合R語言官網(wǎng)對ubuntu不同版本安裝的要求,我這里安裝的是R4.0的版本。
輸完按ESC,然后按住shift+ : ,最底部可以輸入,我們輸入wq,表示退出(PS:強制退出q!),退出后我們新建一個新用戶,為了shiny環(huán)境的部署,我們就直接取名為shiny,輸入:

useradd shiny 
passwd shiny 

此時會讓我們輸入shiny用戶的密碼,建議和root密碼一樣(以防遺忘),然后我們給shiny添加root權(quán)限,輸入:

chmod +w /etc/sudoers
sudo vim /etc/sudoers 

注意這是在root下,如果你是在shiny用戶下,你要鍵入:sudo su
然后輸入root密碼就好了,如果你想切換到shiny用戶下,鍵入:sudo su shiny
上面2行命令輸完后,就進入到sudoers編輯頁面,找到root ALL=(ALL:ALL) ALL,在他的下面輸入

shiny  ALL=(ALL:ALL)  ALL
shinyALL

此時退出編輯頁面,我們可能會遇見下面這種情況,


Error

強制退出!按住shift+ : ,最底部可以輸入q!,再刪除文件可寫權(quán)限,輸入:

chmod -w /etc/sudoers 

現(xiàn)在切換到shiny賬號,輸入

sudo su shiny

然后按照R官網(wǎng)的安裝說明,一步步安裝

R

然后輸入:

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

運行成功,就會出現(xiàn)下面的界面:


R

是不是感覺到一股熟悉的味道~,然后按q()退出,輸入

sudo R -e "install.packages('shiny', repos = 'https://mirrors.#edu.cn/CRAN/')"

下載shiny包,注意你是在shiny賬戶下,以后下載所有的包都要在shiny賬戶下,不然你的shinyapp是運行不了的。進一步,下載R包的可能依賴包,參考這位博主:

Ubuntu安裝R及R包 (bbsmax.com)

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

sudo add-apt-repository -y ppa:opencpu/imagemagick
sudo apt-get update
sudo apt-get install -y libmagick++-dev
sudo apt-get install libcurl4-openssl-dev

非常重要!!不然后續(xù)下載R包會自閉!

------ PART 3 shiny server

我們現(xiàn)在,進入到安裝shiny server的環(huán)節(jié),先轉(zhuǎn)到官網(wǎng)


shiny server

按照上面說的,輸入:

sudo apt-get install gdebi-core
wget https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.16.958-amd64.deb
sudo gdebi shiny-server-1.5.16.958-amd64.deb

這時候,我們要測試shiny是否安裝好,在瀏覽器中,輸入你的公網(wǎng)IP,就是云服務(wù)器實例那一欄里面的,隨后輸入: :3838,此時就可以進入到shiny的歡迎頁面!


welcome

如果不能顯示,請讀者返回最開始的步驟,看看是不是在安全組里面,沒有加入3838!然后,歡迎頁面的右側(cè)例子是否能正常顯示,主要是右下角的app,如果出現(xiàn)錯誤,你必須像安裝shiny一樣,再安裝Rmarkdown。
此外,還需要注意的是,為了能夠明確的顯示報錯信息,我們必須修改shiny server的配置文件,鍵入:

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

按照之前所說的操作模式,像下面圖一樣,輸入前幾行:

preserve_logs true;
sanitize_errors false;
run_as shiny;
conf

然后保存退出編輯模式,這樣做的還有一個好處是,我們之后部署的shinyapp如果出錯了,可以掉取日志來查看出錯原因!(之后介紹)

------ PART 4 文件上傳(FileZlia)

既然我們安裝好了R,shiny,shiny server,現(xiàn)在最關(guān)鍵的問題變成了如何將我們已經(jīng)在本機調(diào)試過的app文件,傳到云服務(wù)器上?畢竟我不會Linux,要是能有像windows,直接把文件拖到另外盤一樣不就好了!Filezlia ! 具體安裝,以及Filezlia相關(guān)設(shè)置問題,參見這位博主寫的帖子,非常詳細:

Filezilla使用教程_wy_091112的博客-CSDN博客_filezilla使用

注意,要同時下載FileZila的server端與client端!
輸入公網(wǎng)IP,賬號,密碼,端口輸入22,進行快速連接,成功后就是下面這個樣子:


FileZila

這讓一個沒接觸過linux系統(tǒng)的,只會windows的我,看起來不要太舒服!然后就是喜聞樂見的傳app文件的時刻了,我們在本機上找到對應(yīng)文件,然后上傳到云服務(wù)器的 /srv/shiny-server 位置,如圖:


srv

如果在上傳過程中,發(fā)現(xiàn)上傳失敗,一定要檢查權(quán)限!可以輸入:

sudo chmod 777 -R /srv/shiny-server/ 

具體參見這位博主寫的文章:

R語言-Shiny部署 - 嗶哩嗶哩 (bilibili.com)

敲黑板??!一定要提前下載好app文件里面所需要的R包,而且還是shiny賬戶下!不然會報錯!在ubuntu上下載R包最大的困難是不能解決包依賴問題,這個就請讀者遇到了自行百度吧。

最終,我們檢閱部署結(jié)果?。?!

我們在瀏覽器輸入:公網(wǎng)IP:3838/app name,其中app name是你將你的app文件傳到云服務(wù)器的文件名,到這里即可成功將app部署到我們的云服務(wù)器上!

下面列舉出我當時參考的帖子:

云服務(wù)器部署shiny應(yīng)用終極指南 - 知乎

(數(shù)據(jù)科學(xué)學(xué)習手札66)在ubuntu服務(wù)器上部署shiny - 費弗里 - 博客園

R語言-Shiny部署 - 嗶哩嗶哩

------ 后話
  1. 如果出現(xiàn)錯誤,請學(xué)會看shiny server的日志
    在FileZila里面,轉(zhuǎn)到 /var/log/shiny-server 位置,我們會看到我們運行shinyapp的各種日志,找到報錯的日志(通常是時間最近的那個),點開就知道出現(xiàn)了什么問題。但是有一種除外,就是直接寫“Killed”,那么我們就需要從云服務(wù)器里面看到底發(fā)生了什么!如果出現(xiàn)了提示“Out of memory”,那就是內(nèi)存不足,需要升級我們的云服務(wù)器配置,想要查看具體被“Killed”的原因,可以查看這位博主寫的文章:

linux 程序被Killed,如何精準查看日志_shuihupo的博客-CSDN博客

  1. 一些簡單的linux命令
    轉(zhuǎn)到某個文件夾:cd /fiename 比如轉(zhuǎn)到 shiny-server 輸入:
cd /srv/shiny-server

切換到shiny用戶:

sudo su shiny

強制關(guān)閉進程:ctrl+C
強制退出賬號:ctrl+D
進入R軟件: 直接輸入R

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容