不知道各位是否經(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也不會啊,但是沒辦法撒踪,得認(rèn)清現(xiàn)實过咬。
下一步就是要下載一個帶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位冕末,然后買完就是下面這個樣子:
但是,還沒完孩哑,我們要給這個新玩意兒配置安全組Kㄋ(別問我為什么,我也是學(xué)百度的做法)
更多->網(wǎng)絡(luò)和安全組->安全組配置->配置規(guī)則->手動添加->依次設(shè)置
其中描述隨便寫啦横蜒,點擊保存就OK了胳蛮。但是,我們怎么操控我們的服務(wù)器呢丛晌?點擊實例里面的操作(遠程連接)仅炊,里面有3種方案:Workbench,VNC遠程連接澎蛛,發(fā)送遠程命令抚垄。系統(tǒng)推薦使用第三種,但是我選擇第二種。第一次用VNC要設(shè)置實例密碼呆馁,6位數(shù)桐经,以后每次用這個登錄都必須要輸入VNC密碼!浙滤!設(shè)置好了之后阴挣,愉快的ubuntu操作頁面就出現(xiàn)了。
------ PART 2 R
首先引入眼簾的是纺腊,登錄頁面(當(dāng)時這里不知道輸啥畔咧,還以為是阿里云的賬號,然后瘋狂百度)揖膜,我們應(yīng)該輸入root誓沸,然后密碼是實例密碼,相當(dāng)于windows的初始管理員admin壹粟。然后就可以輸入Linux代碼啦拜隧!要修改配置,為了安裝R的最新版本煮寡,輸入命令
vim /etc/apt/sources.list
要拉到底才看得見綠色的提示虹蓄,輸入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
此時退出編輯頁面掏熬,我們可能會遇見下面這種情況佑稠,
強制退出!按住shift+ : ,最底部可以輸入q!旗芬,再刪除文件可寫權(quán)限讶坯,輸入:
chmod -w /etc/sudoers
現(xiàn)在切換到shiny賬號,輸入
sudo su shiny
然后按照R官網(wǎng)的安裝說明岗屏,一步步安裝
然后輸入:
sudo apt-get update
sudo apt-get install r-base
運行成功辆琅,就會出現(xiàn)下面的界面:
是不是感覺到一股熟悉的味道~,然后按q()退出这刷,輸入
sudo R -e "install.packages('shiny', repos = 'https://mirrors.#edu.cn/CRAN/')"
下載shiny包婉烟,注意你是在shiny賬戶下,以后下載所有的包都要在shiny賬戶下暇屋,不然你的shinyapp是運行不了的似袁。進一步,下載R包的可能依賴包咐刨,參考這位博主:
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
非常重要j夹啤!不然后續(xù)下載R包會自閉定鸟!
------ PART 3 shiny server
我們現(xiàn)在而涉,進入到安裝shiny server的環(huán)節(jié),先轉(zhuǎn)到官網(wǎng)
按照上面說的联予,輸入:
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的歡迎頁面子刮!
如果不能顯示,請讀者返回最開始的步驟窑睁,看看是不是在安全組里面挺峡,沒有加入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;
然后保存退出編輯模式,這樣做的還有一個好處是司澎,我們之后部署的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è)置問題穆刻,參見這位博主寫的帖子置尔,非常詳細:
注意,要同時下載FileZila的server端與client端蛹批!
輸入公網(wǎng)IP撰洗,賬號篮愉,密碼腐芍,端口輸入22,進行快速連接试躏,成功后就是下面這個樣子:
這讓一個沒接觸過linux系統(tǒng)的猪勇,只會windows的我,看起來不要太舒服颠蕴!然后就是喜聞樂見的傳app文件的時刻了泣刹,我們在本機上找到對應(yīng)文件,然后上傳到云服務(wù)器的 /srv/shiny-server 位置犀被,如圖:
如果在上傳過程中椅您,發(fā)現(xiàn)上傳失敗,一定要檢查權(quán)限寡键!可以輸入:
sudo chmod 777 -R /srv/shiny-server/
具體參見這位博主寫的文章:
敲黑板O朴尽!一定要提前下載好app文件里面所需要的R包,而且還是shiny賬戶下员舵!不然會報錯脑沿!在ubuntu上下載R包最大的困難是不能解決包依賴問題,這個就請讀者遇到了自行百度吧马僻。
最終庄拇,我們檢閱部署結(jié)果!>碌恕措近!
我們在瀏覽器輸入:公網(wǎng)IP:3838/app name,其中app name是你將你的app文件傳到云服務(wù)器的文件名女淑,到這里即可成功將app部署到我們的云服務(wù)器上熄诡!
下面列舉出我當(dāng)時參考的帖子:
(數(shù)據(jù)科學(xué)學(xué)習(xí)手札66)在ubuntu服務(wù)器上部署shiny - 費弗里 - 博客園
------ 后話
- 如果出現(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命令
轉(zhuǎn)到某個文件夾:cd /fiename 比如轉(zhuǎn)到 shiny-server 輸入:
cd /srv/shiny-server
切換到shiny用戶:
sudo su shiny
強制關(guān)閉進程:ctrl+C
強制退出賬號:ctrl+D
進入R軟件: 直接輸入R