Step 1 : 註冊 GCP 服務
GCP 全名是 Google Cloud Platform,是 Google 提供的雲端服務,其他同類型的服務還有 Amazon 的 AWS 以及 Microsoft 的 Azure,本篇僅介紹在 GCP 上架設免費的虛擬主機。
相信在坐各位都有 Google 帳號,接下來用你的 Google 帳號 到 GCP 官網開通服務就行了。
如果是第一次使用的話,應該會看到以下畫面 :
右上方有一個啟用按鈕,可以在接下來 12 個月內免費使用 GCP 的所有服務,並獲得 300 美金的抵免額。
看到這邊不用擔心一年後就要開始付費的問題,因為 GCP 有提供一些永久免費服務,這些服務在 Google 更改他們的營運策略前是不會收費的,本篇會使用到的服務僅有永久免費服務中的 f1-micro 執行個體 (每月) (20210916更新: 免費方案改成e2-micro了),所以就放心的給它啟用下去。
由於使用這類型的雲端服務都必須要綁定信用卡才能使用,所以啟用過程中會系統會要求使用者填入信用卡卡號並收 1 塊錢來進行認證。
Step 2 : 在 GCP 上建立虛擬主機
GCP 服務開通好了以後,點選左邊選單 Compute Engine 中的 vm 執行個體,就可以來建立我們的虛擬主機了。
需要注意的是,GCP 是使用專案的方式來管理各項資源,所以在建立虛擬主機以前,GCP 帳戶中必須要有執行中的專案,剛創立的帳戶若沒有任何專案,這邊系統會引導你建立一個新專案,這個過程通常需要幾分鐘。
這邊我新建的專案名稱叫 FreeVM,專案建立好後就可以點選「建立」來新建虛擬主機。
接下來的畫面就是要設定一些虛擬主機的硬體配備,由於 GCP 的永久免費方案選項中, CPU 只能選擇 f1-micro(1個 vCPU,614 MB記憶體),硬碟大小只能選擇 30GB。但是記憶體太小會導致一些套件安裝過程中,編譯記憶體不足而無法正常安裝,因此 CPU 我們先選擇 n1-standard-1(1個 vCPU,3.75 GB記憶體),等套件安裝完後再把虛擬主機關機並把配備調回低配。
當然也可以選擇使用 Ubuntu 的交換分區(Swap)的方式來增加記憶體大小,但步驟上比較麻煩,所以本篇採用懶人做法。
另外需要注意防火牆選項需要勾選允許 HTTP 流量和允許 HTTPS 流量,並按下「管理、安全性、磁碟、網路、單獨租用」展開更多選單,並點選「網路」標籤。
接著在「網路介面」的下拉式選單中的外部 IP 選擇建立 IP 位址,名稱我命名為 forshinyserver。
完成後就可以建立虛擬主機了。
旁邊的綠色勾勾表示現在虛擬主機是開機的狀態。接著點旁邊的 SSH 就可以連線到虛擬主機並透過指令來安裝 Shiny server 了。
Step 3 : 安裝 R 和相關 Packages
安裝 R 很簡單,四行指令搞定,這樣會安裝 R4.0 的版本 :
至於安裝 Package 就不能那麼單純進去 R 後透過 install.packages 安裝了,否則 ShinyServer 會抓不到套件,必須透過以下指令安裝 :
安裝完 shiny 套件後先按停止把虛擬機關機,然後點進 shinyserver 這台虛擬機器,在上方選單中點選編輯,把機器類型調回 f1-micro(1個 vCPU,614 MB記憶體) 以改回使用 GCP 的永久免費方案。
Step 4 : 安裝 Shiny Server
安裝 Shiny Server 相對來說比較容易,Rstudio 官網有給完整的指令 :
安裝完後 ShinyServer 就會自動啟動,且 Port 預設為 3838,這時候在內網內連線 localhost:3838 應該就可以連上 ShinyServer 了,但要讓外部網路可以連線,還需要在 GCP 的防火牆做一些設定。
Step 5 : GCP 防火牆設定
由於 ShinyServer 預設 Port 為 3838,但 GCP 的防火牆預設只開了一些常用的 Port 如 80 和 443,為了要讓 ShinyServer 通過,我們需要在防火牆上再開一個 3838 的 Port。
首先在最左邊選單選擇 VPC 網路 → 防火牆 → 上方選單「建立防火牆規則」。
防火牆規則的名稱我一樣了無新意的命名為 shinyserver,其他比較重要的設定如下 :
目標 : 網路中的所有執行個體
來源篩選器 : IP範圍
來源IP範圍 : 0.0.0.0/0
通訊協定和通訊埠 : 指定的通訊協定和通訊埠
tcp : 3838
設定無誤後按下建立,接著切回虛擬主機的編輯畫面,在「網路標記」的選項中新增剛剛建立的防火牆規則「shinyserver」並按下儲存。
接著打開瀏覽器,透過外部 IP 就可以連上 ShinyServer 啦,ShinyServer 預設網址為 :
以我的 ShinyServer 為例,網址為
由於 ShinyServer 預設是沒有用 https 的,所以網址如果多打一個 s 會無法連上要多注意。
Step 6 : 部屬自己的 ShinyApp
把自己的 App 放上 ShinyServer 非常簡單,只要透過 SSH 介面上傳檔案後,再移動至指定的路徑即可,我這邊拿我以前寫的「偽裝成StackOverflow的聊天室」App 做個示範。
首先把整個 ShinyApp 連同資料夾一起壓縮成 Zip 檔案,檔名叫做 MediumDemo.zip,然後點選 SSH 介面中右上角的齒輪 → 上傳檔案。
然後把整包 Zip 檔移動到 ShinyServer 的路徑下並且 unzip,再把 App Folder 的權限開給 Shiny,避免一些權限錯誤。 :
到目前為止就算完成了,輸入網址
http://IP:3838
應該就可以看到你的 Shiny Server 了!