folder_open

30 天打造 MERN Stack Boilerplate

arrow_right
article

Day 24 - Deploy - Technique Stack

Day 24 - Deploy - Technique Stack

一個 Web App 經過了開發和測試週期之後,最終要面對的就是部署上線,目前 Modern Web 的趨勢幾乎不考慮自架 Server 了,主要都是仰賴 AWS(Amazon Web Services)、Microsoft Azure 等 IaaS 服務,或是 Heroku、Linode 等 PaaS 服務。

Heroku

#

我們的 Boilerplate 目前的 Demo Siteopen_in_new 就是使用 Herokuopen_in_new,Heroku 屬於 PaaS 服務,可以免費使用,主打的特色就是平台上提供了非常多樣的 ,大家可以把它想像成 Plugin 的概念,當 App 需要 MongoDB 的服務時,就購買 Mongo Dyno,需要排程服務時,也可以購買 Scheduling 相關的 Dyno。

不過,使用免費版本最大缺點就是,當 App 閒置一段時間沒有收到 Request 的話會被迫休眠,直到收到新的 Request 才會被喚醒,而喚醒的時間通常要數十秒,我個人覺得非常久,不過畢竟是免費的就將就一下吧!

OpenShift

#

除了 Heroku 之外,還有另一個免費的 VPS 服務 - OpenShiftopen_in_new,不過它是比較偏向 IaaS,而且速度相對 Heroku 好像慢了點,有興趣的讀者可以玩玩看。

PM2

#

找 VPS 的同時,我們也要注意 App 程式在 Production 的環境下該如何優化,PM2open_in_new 是一個 Production Process Manager,我們的 Boilerplate 在 Production 環境也是透過 PM2 來啟動 Server 的,筆者自己使用它的原因主要是因為 Node 本身是 Single Thread,只能跑在單一 Core 上,藉由 PM2 的輔助,我們可以將 App Fork 到所有的 CPU Cores 上形成 Cluster,理論上可以達到平行化加速的效果。

Boilerplate 中的 Porduction App 程式進入點 src/server/pm2Entry.jsopen_in_new 是修改自 PM2 官網提供的教學文件open_in_new,內容是在講解使用 Programmable 的方式控制 PM2 運行在 Heroku 上,有興趣的讀者歡迎自行閱讀。