備註:

在 Oracle Cloud Infrastructure 上部署新一代的 Ampere A1

本教學課程將引導您在 Oracle Cloud Infrastructure (OCI) 上安裝新雲與熱門的開源協同合作平台。下一個雲端伺服器將使用單一 Ampere A1 運算執行處理。您也應該使用 Podman 執行下一雲作為一組容器。Podman 是使用 Open Container Initiative 標準管理與執行容器的容器引擎。這項服務提供與 Docker 的完整 API 相容,並作為 docker 指令的刪除動作。不過,與 Docker 相較之下,包含無常駐程式架構、支援無 root 容器且支援 cgroupsv2。

Nextcloud 提供支援 Arm 架構的媒體容器映像檔。Nextcloud 也需要資料庫,我們能夠使用 MySQL 或 MariaDB。若要進行更具擴展性的部署,您可以考慮在 OCI 上使用 MySQL 資料庫服務,以便輕鬆調整規模、備份及管理 MySQL 資料庫。

在容器內建立的資料不會保存,而 Nextcloud 需要永久儲存來儲存我們上傳的檔案,以及內部狀態。為了保存資料,我們可以使用 OCI 區塊儲存體服務來使用磁碟區。磁碟區是由 Podman 建立及管理的儲存裝置。磁碟區會透過 podman volume 命令或容器建立期間直接建立。

若要啟用「新雲端 Web 式 UI」和服務,我們需要對 OCI 網路安全清單進行必要的變更,以允許流量。

有了這些元件,我們部署會有基本拓樸。

架構

arch.png 圖解的描述

簡介

目標

本教學課程將會:

必要條件

  1. Oracle Free Tier (Trial)、Payables 或 LiveLabs 雲端帳戶
  2. 熟悉 OCI 主控台
  3. 網路總覽
  4. 熟悉區間
  5. 容器與 Podman 的基本概念知識

設定您的環境

首先,您可以從起始將用於建立及部署 Java EE 應用程式的 Oracle 雲端環境。此環境將包含在雲端區間中,而區間內的通訊將會透過虛擬雲端網路 (VCN)。區間和 VCN 會隔離並保護整體環境。您將部署 Ampere A1 運算執行處理以代管下一雲伺服器。運算執行處理建立後,您將設定存取原則以公開應用程式,然後在執行處理上安裝 Nextcloud。

基本 OCI 基礎架構設定

  1. 開啟導覽功能表。在「治理和管理」底下,前往識別,然後按一下區間。您可以在此畫面中看到區間清單,然後按一下建立區間

  2. 輸入下列資訊:

    • 名稱:輸入 "AppDev「。
    • 描述:輸入描述 (必要),例如:「AppDev 區間的入門教學課程」。請避免輸入機密資訊。
    • 父項區間:選取此區間的區間。預設為根區間 (或租用戶)。
    • 按一下建立區間
    • 您的區間會顯示在清單中。

建立 Ampere A1 Compute 執行處理

  1. 若要建立 Ampere A1 運算執行處理,請使用主控台左上角的導覽功能表,並前往運算 > 執行處理

  2. 開啟執行處理建立流程。

    1. 確認您在 AppDev 區間
    2. 按一下建立執行處理
  3. 在「建立執行處理」頁面中,您將建立新的執行處理,以及新的網路資源 (例如虛擬雲端網路 (VCN)、網際網路閘道 (IG) 及其他資源。

    1. 將執行處理命名為 Nextcloud
    2. 更新映像檔選擇,以使用 Oracle Linux 8 或更新版本
    3. 按一下變更資源配置按鈕,即可查看可用的運算資源配置。

     建立執行處理

    03_create_instance02.png 圖例的描述

  4. 設定執行處理的映像檔。

    1. 按一下變更映像檔按鈕,即可查看可用的作業系統映像檔。
    2. 選擇 Oracle Linux 8 或更新版本。

    選擇 Oracle Linux 8

    03_create_instance02_1.png 圖例的描述

  5. 設定執行處理的資源。

    1. 選擇資源配置系列選擇的 Ampere Arm 式處理器。
    2. 從配備 Ampere Arm 型處理器的資源配置清單中選擇 VM.Standard.A1.Flex 資源配置。Ampere A1 資源配置是具有彈性的,您可以修改核心數目和記憶體大小。為 VM 選擇 1 個核心和 6 GB 的記憶體。

    選擇資源配置

    04_create_instance03.png 圖例的描述

  6. 選擇您的網路選項。為您的下一個雲端部署建立新的 VCN 和子網路。確定已為您的執行處理指定公用 IP 位址。

  7. 產生並下載 SSH 金鑰組。此步驟是選擇性的,但強烈建議您使用稍後的維護與升級。如果您已經有要使用的鍵盤,也可以使用公用金鑰。如果要瞭解如何產生 SSH 金鑰,請遵循Generate SSH Keys tutorial 中的指示。

    網路選項

    06_create_instance05.png 圖例的描述

  8. 按一下建立 (Create) 以建立網路資源,然後啟動運算執行處理。啟動實例

    07_create_instance06.png 圖例的描述

對使用者顯示應用程式連接埠

如果要從網際網路存取應用程式,您需要開啟應用程式將使用的連接埠。在本節中,您將在運算執行處理上的雲端網路和防火牆規則上設定安全清單,讓您的應用系統可傳送並接收流量。

設定您的虛擬雲端網路 (VCN)

安全清單扮演執行處理的虛擬防火牆,包括輸入和輸出規則,指定允許輸入和輸出的流量類型。安全清單會在子網路層次設定,套用安全規則至該子網路中的所有網路元素。您的網路隨附預設安全清單,其中包含一組初始規則。預設安全清單可讓您使用 SSH 連線至執行處理,以及讓執行處理對任何目的地進行外送網路呼叫。

  1. 瀏覽您已建立之執行處理的執行處理詳細資訊頁面。運算 (Compute) > 執行處理 > 按一下您所建立的執行處理
  2. 按一下子網路即可瀏覽至您執行處理所連附的子網路 選取子網路

    01_setup_network_01.png 圖例的描述

  3. 在子網路上,選取預設安全清單
  4. 按一下「新增傳入規則」即可新增規則,以允許符合規則的內送流量。
  5. 新增輸入規則,以允許連接埠 8080 上的內送流量
    1. 來源 CIDR 設為 0.0.0.0/0。這可讓來自所有來源的內送流量。
    2. 目的地連接埠範圍設為 8080。這會將目的地設為僅連接埠 8080。此規則現在允許來自所有來源的流量使用連接埠 8080。這是我們所需要的,因此我們的應用系統可以從任何地方取得。
    3. 提供描述。設定輸入規則

      01_setup_network_04.png 圖例的描述

設定您的執行環境

防火牆規則會控制進出執行處理的封包層次流量。您可以直接在執行處理上配置防火牆規則,並提供其他安全等級。

  1. 瀏覽您已建立之執行處理的執行處理詳細資訊頁面。運算 (Compute) > 執行處理 > 按一下您所建立的執行處理
  2. 複製執行處理的公用 IP 位址。
  3. 使用 SSH 登入執行處理。請使用您在執行處理建立步驟期間產生或提供的金鑰。使用 Oracle Linux 作業系統之執行處理的預設使用者名稱為 opc
  4. 執行防火牆組態指令。這可修改執行處理本身中的防火牆,顯示連接埠 8080 並接受內送流量。

    sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    

在 Ampere A1 上部署下一代

您現在可以在 Ampere A1 運算平台上執行 Nextcloud 作為容器部署。您也將使用包含在 Oracle Linux 8 中的新容器工具 (例如 Podman)。Podman 提供輕量型公用程式,可執行與管理 Open Container Initiative (OCI) 相容容器。Podman 部署可以重複使用現有的容器映像檔。Podman 不需要執行中的常駐程式,也可讓容器在沒有 root 權限的情況下啟動和執行。若要深入瞭解 Oracle Linux 的 Podman,請瀏覽官方文件

安裝容器工具

使用 Oracle Linux 8.x 建立執行處理之後,我們就可以安裝 container-tools 套裝程式,準備執行處理所需的工具,以便部署容器化工作負載。

  1. 使用 SSH 登入執行處理。請使用您在執行處理建立步驟期間產生或提供的金鑰。在 Oracle Linux 作業系統上執行之執行處理的預設使用者名稱為 opc

  2. 安裝提取使用容器所需之所有工具的 container-tools 模組。

    sudo dnf module install container-tools:ol8
    
    sudo dnf install git
    

建立 Pod 定義

Podman 可以管理稱為 Pod 的容器群組。正式上,pod 是一或多個容器的一群,共用相同網路、pid 及 ipc 命名空間。這項概念一開始是由 Kubernetes 專案引進,而 Podman Pod 與 Kubernetes Pods 相似。

在許多方面,Pod 的運作方式就像每個容器內執行服務的虛擬主機。這意謂著,每個容器都可以像在同一個主機上執行服務一樣存取另一個容器上的服務。以這種方式執行容器會移除關於網路的複雜性,而且可以更輕鬆地限制只限於應用程式本身內服務所使用的連接埠公開風險。

Pod 是管理相關容器的絕佳方式,就像應用程式由多個容器構成的時間。在本教學課程中,您應該將下一雲部署為 Pod。NextCloud 所需的容器包含在我們的 Pod 內,並同時啟動和停止。管理我們應用程式作為 Pod 的第一步,就是建立空的 Pod 定義。

使用下面的指令建立 Pod

podman pod create --hostname nextcloud --name nextcloud --publish 8080:80 --infra-image k8s.gcr.io/pause:3.1
  1. podman pod create - 建立 Pod。
  2. --hostname nextcloud - 將 Pod 的主機名稱設為 nextcloud
  3. --name nextcloud - 將 Pod 的名稱設為 nextcloud
  4. --publish 8080:80 - 將 Pod 上的連接埠 80 發布至主機上的連接埠 8080

定義儲存磁碟區

現在已定義 Pod 後,我們應該先定義一些儲存選項,再將容器植入 Pod。容器會針對在容器內建立的所有檔案,預設使用可寫入的容器層。這表示容器中處理作業建立的檔案和資料不會保存,當容器移除或終止時,就會遺失。此外,它也使得跨容器共用資料。磁碟區是保存容器建立資料的偏好方式。它們可被認為是主機機器上儲存位置的儲存體限制,但是獨立於容器的生命週期。在多個容器上同時掛載容器,就能輕鬆在容器之間共用資料。

我們使用 3 個磁碟區來管理資料,

  1. 名為 nextcloud-appdata 的磁碟區會儲存下一個雲端的主要應用程式狀態

  2. 名為 nextcloud-files 的磁碟區會儲存上傳與使用方式建立的檔案。

  3. 名為 nextcloud-db 的磁碟區會儲存 MySQL 資料庫的資料庫檔案。

    podman volume create nextcloud-appdata 
    podman volume create nextcloud-files
    podman volume create nextcloud-db
    

執行 MySQL Database

現在,您可以在連附磁碟區的情況下,針對下一雲啟動資料庫。資料庫容器是在已建立的 Pod 中啟動。Nextcloud 所使用的資料庫即為 MySQL,而此處則是 Pod 中的一個容器。為了更強大且完全受管理的部署,您可以使用 OCI MySQL 資料庫服務來取代此容器。

下面顯示啟動資料庫的命令,並說明每個選項。

注意:請確定為下列 MYSQL_PASSWORDMYSQL_ROOT_PASSWORD 變數提供更安全的密碼。

podman run --detach --pod=nextcloud \
--env MYSQL_DATABASE=nextcloud \
--env MYSQL_USER=nextcloud \
--env MYSQL_PASSWORD=NEXTCLOUD_PASSWORD \
--env MYSQL_ROOT_PASSWORD=MYSQL_ROOT_PASSWORD \
--volume nextcloud-db:/var/lib/mysql:Z \
--restart on-failure \
--name nextcloud-db \
mysql/mysql-server:8.0 
  1. podman run - 執行命令會告知 podman 使用指定的參數在容器中執行命令。要執行的指令通常是在影像本身中定義。
  2. --detach - 分開模式:在背景執行容器,然後列印新的容器 ID。
  3. --pod=nextcloud - 在現有 Pod 中執行容器。我們選擇在這邊執行我們先前為下一代所創立的容器介紹
  4. --env - 設定任意環境變數。您可以在容器內執行的處理作業存取這些環境變數。
  5. --volume nextcloud-db:/var/lib/mysql:Z - 將名為 nextcloud-db 的磁碟區掛載到 /var/lib/mysql,這是 MySQL 資料檔的預設位置。Z 選項會告知 Podman 將內容與專用未共用標籤加上標籤。
  6. --restart on-failure - 重新啟動容器結束時要遵循的原則。此容器會在失敗時重新啟動。失敗是指容器中的處理作業處於非零的狀態時。
  7. --name nextcloud-db - 將名稱 nextcloud-db 指派給容器。
  8. mysql/mysql-server:8.0 - 用來建立容器的影像

由於您是以分離模式執行容器,因此 Podman 會在背景啟動並結束。若要查看啟動和日誌的狀態,您可以執行下列命令。按 Ctrl+C 以停止後續日誌。

podman logs -f nextcloud-db

部署下一個雲端

現在您可以在同一個 Pod 中將下一雲部署成另一個容器。參數與上一個命令類似,這裡您送出的資料庫連線詳細資訊 。

注意:請確定變數 MYSQL_DATABASEMYSQL_USERMYSQL_PASSWORD 的值與您啟動資料庫時所提供的相同。確定將 NEXTCLOUD_ADMIN_USERNEXTCLOUD_ADMIN_PASSWORD 的值更新為您選擇的值。

podman run --detach --pod=nextcloud \
  --env MYSQL_HOST=127.0.0.1 \
  --env MYSQL_DATABASE=nextcloud \
  --env MYSQL_USER=nextcloud \
  --env MYSQL_PASSWORD=NEXTCLOUD_PASSWORD \
  --env NEXTCLOUD_ADMIN_USER=NC_ADMIN \
  --env NEXTCLOUD_ADMIN_PASSWORD=NC_PASSWORD \
  --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> \
  --volume nextcloud-appdata:/var/www/html:Z \
  --volume nextcloud-files:/var/www/html/data:Z \
  --restart on-failure \
  --name nextcloud-app \
  docker.io/library/nextcloud:21
  1. --env MYSQL_HOST=127.0.0.1 - 由於資料庫與應用程式都位於相同的 Pod 中,因此應用程式可以使用 127.0.0.1 存取資料庫容器,就像它們是在相同的主機上執行一樣。
  2. --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> - 信任的網域為 Nextcloud 使用的安全功能,您需要提供每個可存取的網域清單。在此情況下,將成為執行處理的公用 IP 位址,因為我們預期下次雲端執行位置。

若要查看您可以使用的啟動日誌:

podman logs -f nextcloud-app

啟動完成後,您可以瀏覽至 http://<your_public_ip>:8080 以到達「下一雲端」伺服器。使用您提供給 NEXTCLOUD_ADMIN_USERNEXTCLOUD_ADMIN_PASSWORD 的值進行登入。

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或是存取更多免費學習內容至 Oracle Learning YouTube 通道。此外,瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請瀏覽 Oracle Help Center