在 Oracle Cloud Infrastructure 上的 Rails 上部署 Ruby

Rails 上的 Ruby 是 Ruby 程式設計語言的主流 Web 應用程式架構。為了支援在 Rails (RoR) 上使用 Ruby 進行開發,我們提供了有彈性的基礎架構,可部署必要的網路、VM 及 MySQL 資料庫執行處理,以及在 Rails 和相關相依性上部署 Ruby 的命令檔。

您可以在 DevRel GitHub 儲存區域中找到此可部署架構 (oci-arch-ruby-rails-build) 的 Terraform,可從下方的「瀏覽更多」主題存取。

架構

此架構由一個 VCN 組成,有數個子網路可隔離不同服務。因此,公用存取會透過作用中 / 待命負載平衡器進行。額外的公用子網路提供支援使用 SSH 存取後端服務的堡壘主機。

負載平衡器會在 Rails 伺服器上為每個代管 Ruby 的運算虛擬機器 (VM) 前面固定兩個。這些伺服器可以存取 MySQL 資料庫。VM 和 MySQL 資料庫都位於它們自己的個別子網路,以因應存取等考量。

下圖說明此參照架構。

以下是 deploy-ruby-rails-mds-arch.png 的描述
deploy-ruby-rails-mds-arch.png 圖解描述

deploy-ruby-rails-mds-arch-oracle.zip

此架構包含下列元件:
  • 租用戶

    租用戶是指註冊 Oracle Cloud Infrastructure 時 Oracle 在 Oracle Cloud 內設定的安全隔離分割區。您可以在租用戶的 Oracle Cloud 中建立、組織及管理您的資源。

    租用戶與公司或組織同義。通常,公司會有一個租戶並反映其在該租戶內的組織結構。單一租用戶通常與單一訂閱關聯,而單一訂閱通常只有一個租用戶。

  • 區域

    Oracle Cloud Infrastructure 區域是包含一或多個資料中心 (稱為可用性網域) 的本地化地理區域。區域獨立於其他區域,因此廣大的距離可以劃分區域 (跨國家甚至大陸)。

  • 區間

    區間是 Oracle Cloud Infrastructure 租用戶內的跨區域邏輯分割區。使用區間組織您的 Oracle Cloud 資源、控制對資源的存取,以及設定使用量配額。若要控制對指定隔離專區中資源的存取,您必須定義指定可存取資源的人員及其可執行動作的原則。

  • 可用性網域

    可用性網域是區域內獨立且獨立的資料中心。每個可用性網域中的實體資源會與其他可用性網域中的資源隔離,以提供容錯能力。可用性網域並不共用基礎設施 (例如電力或散熱冷卻系統) 或內部可用性網域網路。因此,一個可用性網域發生失敗並不會影響區域中的其他可用性網域。

  • 容錯域

    容錯域是可用性網域內的一組硬體和基礎設施,每個可用性網域都具備三個獨立電源和硬體的容錯域。當您將資源分配給多個容錯域時,您的應用程式可以容許容錯域內的實體伺服器故障、系統維護和電源故障。

  • 虛擬雲端網路 (VCN) 和子網路

    VCN 是您在 Oracle Cloud Infrastructure 區域中設定的可自訂軟體定義網路。與傳統資料中心網路相同,VCN 可讓您完整控制網路環境。一個 VCN 可以有多個非重疊的 CIDR 區塊,您可以在建立 VCN 後進行變更。您可以將 VCN 分割成子網路,範圍可至區域或可用性網域。每個子網路均包含一系列不與 VCN 中其他子網路重疊的連續位址。您可以在建立子網路後變更其大小。子網路可以是公用或專用子網路。

  • 負載平衡器

    Oracle Cloud Infrastructure Load Balancing 服務提供從單一進入點到後端多個伺服器的自動化流量分配。

    負載平衡器可讓您存取不同的應用系統。

  • 安全清單

    對於每個子網路,您可以建立安全規則,指定必須允許進出子網路的來源、目的地和流量類型。

  • NAT 閘道

    NAT 閘道可讓 VCN 中的專用資源存取網際網路上的主機,而無須向內送網際網路連線暴露這些資源。

  • 服務閘道

    服務網關提供從 VCN 到其他服務 (例如 Oracle Cloud Infrastructure Object Storage) 的存取。從 VCN 到 Oracle 服務的流量透過 Oracle 網路結構傳輸,一律不會周遊網際網路。

  • MySQL Database 服務

    Oracle MySQL Database Service 是一項完全託管的 Oracle Cloud Infrastructure (OCI) 資料庫服務,可讓開發人員快速開發及部署安全的雲端原生應用程式。Oracle MySQL Database Service 已針對 OCI 最佳化且獨家提供,由 OCI 和 MySQL 工程團隊建置、管理及支援 100%。

    Oracle MySQL Database Service 具有整合式高效能分析引擎 (HeatWave),能夠直接在作業 MySQL 資料庫執行複雜的即時分析。

  • 堡壘主機服務

    Oracle Cloud Infrastructure Bastion 對不具有公用端點且需要嚴格資源存取控制的資源提供受限與時間限制的安全存取,例如裸機和虛擬機器、Oracle MySQL Database Service Autonomous Transaction Processing (ATP)、Oracle Container Engine for Kubernetes (OKE) 以及任何其他允許 Secure Shell Protocol (SSH) 存取的資源提供安全存取。有了 Oracle Cloud Infrastructure Bastion 服務,您不需部署和維護蹦現面板主機即可存取私有主機。此外,您還可以透過識別權限與集中式、稽核及時間導向 SSH 階段作業來改善安全狀態。Oracle Cloud Infrastructure Bastion 免除存取堡壘主機所需的公用 IP,在提供遠端存取時消除麻煩和潛在攻擊面。

建議

在 OCI 上的 Rails 上部署 Ruby 時,請使用下列建議作為起點。您的需求可能不同。

  • 安全

    透過 Oracle Cloud Guard 主動監控和維護 OCI 資源的安全性。雲端保全會使用您可以定義的偵測器處方來檢查資源是否有安全漏洞,並且監控操作員和使用者是否有危險的活動。偵測到任何組態錯誤或不安全活動時,雲端保全會根據您可以定義的回應器處方,建議採取更正動作並協助採取這些動作。

    對於需要最高安全性的資源,Oracle 建議您使用安全區域。安全區域是一個與 Oracle 定義的安全原則處方關聯的區間 (以最佳做法為基礎)。例如,安全區域中的資源不得從公用網際網路存取,且必須使用客戶管理的金鑰進行加密。當您在安全區域中建立和更新資源時,OCI 會根據安全區域處方中的原則來驗證作業,並拒絕違反任何原則的作業。

    如果應用系統已導入以公開動態內容,或允許從屬端透過 API 送出資料,建議採用 API 閘道,因為這提供了透過使用 API 原則管理與 API 互動的方式。

  • 雲端保全

    複製和自訂 Oracle 提供的預設處方,以建立自訂偵測器和回應器處方。這些處方可讓您指定產生警告的安全性違規類型,以及允許對它們執行哪些動作。例如,您可能想要偵測已將可見性設為公用之物件儲存的儲存桶。

    在租用戶層級套用雲端保全以涵蓋最廣範圍,並降低維護多個組態的管理負擔。

    您也可以使用「受管理清單」,將特定組態套用至偵測器。

  • 安全區域

    複製和自訂 Oracle 提供的預設處方,以建立自訂偵測器和回應器處方。這些處方可讓您指定產生警告的安全性違規類型,以及允許對它們執行哪些動作。例如,您可能想要偵測已將可見性設為公用之物件儲存的儲存桶。

    在租用戶層級套用雲端保全以涵蓋最廣範圍,並降低維護多個組態的管理負擔。

    您也可以使用「受管理清單」,將特定組態套用至偵測器。

  • 網路安全群組 (NSG)

    您可以使用 NSG 定義一組適用於特定 VNIC 的輸入和輸出規則。建議使用 NSG 而非安全清單,因為 NSG 可讓您將 VCN 的子網路架構與應用程式的安全性需求分開。

    您可以使用 NSG 定義一組適用於特定 VNIC 的輸入和輸出規則。建議使用 NSG 而非安全清單,因為 NSG 可讓您將 VCN 的子網路架構與應用程式的安全性需求分開。

  • 負載平衡器頻寬

    建立負載平衡器時,您可以選取提供固定頻寬的預先定義資源配置,或是指定可設定頻寬範圍的自訂 (彈性) 資源配置,然後讓服務根據流量模式自動調整頻寬。藉由上述任一方式,您可以在建立負載平衡器之後,隨時變更資源配置。

注意事項

建置此參照架構時,請考量以下各點。
  • 效能

    使用此 RA 作為起始點表示效能將受到 VM 節點數目和為每個節點選取的 VM 類型影響。Terraform 支援裁適評估這些伺服器,以使用不同的規格伺服器和節點數目。

    使用 GraalVM 執行 Ruby 和 Rails 可以增加效能

  • 安全

    基本組態不會考慮任何應用程式認證和授權或 API 支援。在網路層次,必須調整存取與路由以因應 Ruby 服務是供內部使用或外部使用。使用外部時,也應擴充環境以包含使用 Web 應用系統防火牆和雲端保全。

  • 使用狀態

    只要將節點分配到更多可用性區域,就可以擴充可用性,並可能有跨區域最重要的可用性層級。

    可用性不僅取決於運算節點是否存在,同時具備安全性,因此只有合法流量才能與部署的應用程式互動。這可以透過安全建議來處理。

  • 成本

    安全性也可透過限制服務要求所需的運算量來協助管理成本。如此一來,防止意外或惡意流量到達 WAF 或 API 閘道的伺服器,可減少產生潛在工作負載的量。

探索更多

若要進一步瞭解如何在 OCI 上的 Rails 上部署 Ruby,請參閱下列資源:

複查這些其他資源:

致謝

  • Authors: Hassan Ajan, Phil Wilkins
  • Contributors: Chiping Hwang, Luke Feldman