Rails 部署實踐 - 容器化的 Bundler 最佳設定
雖然我們已經轉換為 Alpine 來製作容器鏡像,然而在現代軟體設計中為了加速會有許多快取(Cache)的檔案產生,以利再次執行時能夠更快速的啟動。使用 Bundler 安裝 Ruby Gem 也不例外,這些檔案在容器部署中有非常多是不需要的,因此我們還需要針對 Bundler 進行最佳化。
雖然我們已經轉換為 Alpine 來製作容器鏡像,然而在現代軟體設計中為了加速會有許多快取(Cache)的檔案產生,以利再次執行時能夠更快速的啟動。使用 Bundler 安裝 Ruby Gem 也不例外,這些檔案在容器部署中有非常多是不需要的,因此我們還需要針對 Bundler 進行最佳化。
在容器化 Rails 專案概述這篇文章,我們介紹了非常快速的 Rails 容器製作方式,然而這樣的方式除了容器鏡像會非常大之外,也包含了許多我們不需要在正式環境存在的套件,對安全性也會有索影響,因此接下來我們要透過 Alpine 來製作專為正式環境部署打造的容器鏡像。
完成網站部署後,我們還需要持續的更新網站。然而如果只有一個節點的話,網站是會有一瞬間服務暫停的狀況,為了避免這樣的問題可以採取滾動更新(Rolling Upgrade)的方式處理。
過去我們需要仰賴人工切換,然而到了虛擬機、容器的階段就能夠透過預先安裝好環境來做到半自動、自動的處理。
在過去傳統的部署方式中,我們大多是單機的方式部署,因此網站如果發生障礙連不上,那麼就可以視為無法使用。
然而當我們有多個網站節點的時候,大多會使用負載平衡(Load Balancer)來將流量分散到不同的節點上,這個時候哪一個節點可以接受流量,就會仰賴健康檢查(Health Check)來回報狀態。
當我們透過 Docker Compose 在伺服器上將 Rails 運行起來後,基本上已經符合了部署的條件,也就是我們已經完成了一個可以提供服務的環境。
然而,在現代的網站部署中,使用 SSL 將使用者的連線加密已經是必備的條件,有 Let’s Encrypt 提供的免費憑證也能讓我們快速的搭建安全的網站服務。
現在我們已經有建置好的專案鏡像並且可以被任意伺服器存取,同時也有了能夠運行容器的環境(以 Docker 為基礎)接下來只需要將我們的專案運行起來即可。
要將網站使用容器技術部署,就需要有可以運行容器的伺服器。要滿足可以提供其他人連上使用、隨時提供服務以及能夠運行容器,選擇雲端服務上的 Linux 伺服器會是最適合的選項。
在 Rails 部署實踐 - 容器化 Rails 專案概述中,我們快速的介紹了將專案容器化的入門技巧,雖然我們可以製作出能夠運行的鏡像,卻沒辦法將它傳送到我們想要部署的環境中。
這篇文章會向大家介紹如何讓我們的伺服器可以獲取要部署的鏡像,並且加以部署。
要將 Ruby on Rails 透過容器的方式部署,我們就需要讓我們的專案可以被容器化。這篇文章我們會採用最簡單的方式進行容器化,扣除掉有使用特殊的 Ruby Gem 的情況下,大多能夠透過這種方式完成容器化。
我們在以容器部署 Rails 的方案介紹了以容器化的方式部署 Rails 專案的方案,然而在部署之前我們還有不少前置準備需要處理。
如果你已經有部署過網站,很可能已經有大部分需要的條件,那麼可以考慮跳過這篇文章。如果是第一次準備部署,那麼可以先來看看這些需要預先準備的東西有哪些。