ノート:

Oracle Cloud Infrastructure上のAmpere A1でNextcloudをデプロイ

このチュートリアルでは、人気のあるオープン・ソース・コラボレーション・プラットフォームであるNextcloudをOracle Cloud Infrastructure (OCI)にインストールします。Nextcloudサーバーには、単一のAmpere A1コンピュート・インスタンスを使用します。Podmanを使用して、Nextcloudをコンテナのセットとして実行することもできます。Podmanは、Open Container Initiativeの基準を使用してコンテナを管理および実行するためのコンテナ・エンジンです。Dockerとの完全なAPI互換性を提供し、dockerコマンドの置換のドロップ・インとして機能します。ただし、デーモンレス・アーキテクチャ、ルートレス・コンテナのサポート、cgroupsv2サポートを含むDockerと比較して、いくつかのメリットがあります。

Nextcloudは、Armアーキテクチャをサポートするdockerコンテナ・イメージを提供します。Nextcloudには、MySQLまたはMariaDBを使用できるデータベースも必要です。よりスケーラブルなデプロイメントの場合は、MySQLデータベースを簡単にスケーリング、バックアップおよび管理できるようにOCIでMySQLデータベース・サービスを使用することを検討できます。

コンテナ内で作成されたデータは永続化されず、Nextcloudには、アップロードするファイルの格納および内部状態に対する永続ストレージが必要です。データを永続化するために、OCI Block Storageサービスを使用してボリュームを使用できます。ボリュームは、Podmanによって作成および管理されるストレージ・デバイスです。ボリュームは、podman volumeコマンドを使用して、またはコンテナの作成時に直接作成されます。

Nextcloud WebベースのUIおよびサービスを有効にするには、トラフィックを許可するためにOCIネットワーク・セキュリティ・リストに必要な変更を行う必要があります。

これらのコンポーネントを使用すると、導入の基本的なトポロジが提供されます。

アーキテクチャ

図arch.pngの説明

イントロダクション

目的

このチュートリアルの内容:

前提条件

  1. Oracle Free Tier (トライアル)、有料またはLiveLabsクラウド・アカウント
  2. OCIコンソールの理解
  3. ネットワーキングの概要
  4. コンパートメントの知識
  5. コンテナおよびポドマンの基本概念知識

環境を設定する

まず、Java EEアプリケーションの作成およびデプロイに使用するOracleクラウド環境を開始します。この環境はクラウド・コンパートメント内に格納され、コンパートメント内の通信は仮想クラウド・ネットワーク(VCN)経由になります。コンパートメントとVCNは、環境全体を分離および保護します。Nextcloudサーバーをホストするために、Ampere A1コンピュート・インスタンスをデプロイします。コンピュート・インスタンスが作成されると、アクセス・ポリシーを設定してアプリケーションを公開し、Nextcloudをインスタンスにインストールします。

基本OCIインフラストラクチャ設定

  1. ナビゲーション・メニューを開きます。「ガバナンスおよび管理」で、「アイデンティティ」に移動して「コンパートメント」をクリックします。この画面から、コンパートメントのリストが表示され、「コンパートメントの作成」をクリックします。

  2. 次を入力します:

    • 名前: "AppDev"と入力します。
    • 説明:説明(必須)を入力します。例:チュートリアルを開始するためのAppDevコンパートメント。機密情報を入力しないでください。
    • 親コンパートメント:このコンパートメントを配置するコンパートメントを選択します。デフォルトでは、ルート・コンパートメント(またはテナンシ)に設定されます。
    • 「コンパートメントの作成」をクリックします。
    • コンパートメントがリストに表示されます。

Ampere A1コンピュート・インスタンスの作成

  1. アンペアのA1コンピュート・インスタンスを作成するには、コンソールの左上隅にあるナビゲーション・メニューを使用して、「コンピュート」 > 「インスタンス」に移動します。

  2. インスタンス作成フローを開きます。

    1. AppDevコンパートメントにあることの確認
    2. 「インスタンスの作成」をクリックします。
  3. インスタンスの作成ページで、仮想クラウド・ネットワーク(VCN)、インターネット・ゲートウェイ(IG)などの新しいネットワーク・リソースとともに新しいインスタンスを作成します。

    1. インスタンスにNextcloudという名前を付けます
    2. イメージの選択を更新して、Oracle Linux 8以降を使用します
    3. 「シェイプの変更」ボタンをクリックして、使用可能なコンピュート・シェイプを表示します。

     インスタンスの作成

    図03_create_instance02.pngの説明

  4. インスタンスのイメージを構成します。

    1. 使用可能なOSイメージを表示するには、「イメージの変更」ボタンをクリックします。
    2. Oracle Linux 8以降を選択します。

    Oracle Linux 8の選択

    図03_create_instance02_1.pngの説明

  5. インスタンスのリソースを構成します。

    1. シェイプシリーズの選択でアンペレアームベースのプロセッサを選択します。
    2. Ampere Armベースのプロセッサを含むシェイプのリストからVM.Standard.A1.Flexシェイプを選択します。アンペアのA1シェイプは柔軟で、コア数およびメモリーの量を変更できます。VM用に1コアと6GBのメモリーを選択します。

    シェイプの選択

    図04_create_instance03.pngの説明

  6. ネットワーク・オプションを選択してください。次のクラウド・デプロイメント用の新しいVCNおよびサブネットを作成します。インスタンスにパブリックIPアドレスを割り当てるように選択してください。

  7. SSHキー・ペアを生成してダウンロードします。このステップは省略可能ですが、後の保守とアップグレードには特にお薦めします。また、使用するキーペアがすでにある場合は、公開キーを持ち込むこともできます。SSHキーの生成方法を知りたい場合は、「SSHキーの生成」チュートリアルの手順に従ってください。

    ネットワーク・オプション

    図06_create_instance05.pngの説明

  8. 「作成」をクリックしてネットワーキング・リソースを作成し、コンピュート・インスタンスを起動します。インスタンスの起動

    図07_create_instance06.pngの説明

アプリケーション・ポートをユーザーに公開

インターネットからアプリケーションにアクセスするには、アプリケーションで使用するポートを開く必要があります。この項では、アプリケーションでトラフィックを送信および受信できるように、コンピュート・インスタンスのクラウド・ネットワークおよびファイアウォール・ルールでセキュリティ・リストを構成します。

仮想クラウド・ネットワーク(VCN)の構成

セキュリティ・リストは、インスタンスの仮想ファイアウォールとして機能し、内外で許可されるトラフィック・タイプを指定するイングレスおよびエグレス・ルールが含まれます。サブネット・レベルで構成されているセキュリティ・リスト。そのサブネット内のすべてのネットワーク要素にセキュリティ・ルールを適用します。ネットワークには、ルールの初期セットを含むデフォルト・セキュリティ・リストが付属しています。デフォルトのセキュリティ・リストを使用すると、SSHを使用してインスタンスに接続でき、インスタンスが任意の宛先にアウトバウンド・ネットワーク・コールを行うことができます。

  1. 作成したインスタンスのインスタンス詳細ページをナビゲートします。コンピュート > インスタンス > 作成したインスタンスをクリック
  2. サブネットをクリックして、インスタンスがアタッチされているサブネットに移動します サブネットの選択

    図01_setup_network_01.pngの説明

  3. サブネットで、デフォルトのセキュリティ・リストを選択します
  4. 「Add Ingress Rule」をクリックして、ルールに一致する受信トラフィックを許可する新しいルールを追加します。
  5. ポート8080で受信トラフィックを許可するイングレス・ルールを追加します
    1. 「ソースCIDR」0.0.0.0/0に設定します。これにより、すべてのソースからの受信トラフィックが許可されます。
    2. 「宛先ポート範囲」8080に設定します。これにより、宛先はポート8080のみに設定されます。これで、すべてのソースからのトラフィックがポート8080を使用できるようになりました。これは、アプリケーションをどこからでも到達できるように、必要なものです。
    3. 摘要を入力します。 イングレス・ルールの設定

      図01_setup_network_04.pngの説明

インスタンスの構成

ファイアウォール・ルールは、インスタンス内外のパケット・レベルのトラフィックを制御します。ファイアウォール・ルールはインスタンス自体で直接構成し、追加レベルのセキュリティを提供します。

  1. 作成したインスタンスのインスタンス詳細ページをナビゲートします。コンピュート > インスタンス > 作成したインスタンスをクリック
  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
    

ポッド定義の作成

ポッドマンは、ポッドと呼ばれるコンテナのグループを管理できます。正式には、ポッドは、同じネットワーク、pidおよびipcネームスペースを共有する1つ以上のコンテナのグループです。この概念は最初にKubernetesプロジェクトによって導入され、ポッドマン・ポッドはKubernetesポッドとよく似ています。

様々な点で、ポッドは、各コンテナ内のサービスが実行される仮想ホストのように動作します。つまり、各コンテナは、同じホストで実行されているかのように、相互にコンテナのサービスにアクセスできます。この方法でコンテナを実行すると、ネットワーキングの複雑さが解消され、アプリケーション自体のサービスでのみ使用されるポートのパブリック・エクスポージャを制限しやすくなります。

ポッドは、複数のコンテナで構成されるアプリケーションの場合のように、関連するコンテナを管理するための優れた方法です。このチュートリアルでは、Nextcloudをポッドとしてデプロイします。NextCloudに必要なコンテナは、ポッド内に格納され、同時に開始および停止されます。アプリケーションをポッドとして管理する最初のステップは、空のポッド定義を作成することです。

次のコマンドを使用してポッドを作成します

podman pod create --hostname nextcloud --name nextcloud --publish 8080:80 --infra-image k8s.gcr.io/pause:3.1
  1. podman pod create -ポッドを作成します。
  2. --hostname nextcloud -ポッドのホスト名をnextcloudとして設定します
  3. --name nextcloud -ポッドの名前をnextcloudとして設定します
  4. --publish 8080:80 -ポッドのポート80をホスト上のポート8080に公開します。

ストレージ・ボリュームの定義

ポッドが定義されたので、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を実行

これで、ボリュームをアタッチしてNextcloudのデータベースを起動できます。データベース・コンテナは、すでに作成されたポッドで起動されます。Nextcloudで使用されるデータベースはMySQLです。ここでは、ポッドのコンテナとして実行します。より堅牢で完全管理型のデプロイメントの場合、このコンテナをOCI MySQLデータベース・サービスと置き換えることができます。

データベースを起動するコマンドを次に示します。各オプションについて説明します。

ノート:次のMYSQL_PASSWORDおよびMYSQL_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 - runコマンドは、指定されたパラメータを使用してコンテナでコマンドを実行するようにポッドマンに指示します。実行するコマンドは、通常、イメージ自体で定義されます。
  2. --detach -デタッチ・モード:バックグラウンドでコンテナを実行し、新しいコンテナIDを出力します。
  3. --pod=nextcloud -既存のポッドでコンテナを実行します。ここでは、Nextcloud用に以前に作成したコンテナintを実行することを選択しました
  4. --env -任意の環境変数を設定します。これらの環境変数には、コンテナ内で実行されているプロセスによってアクセスできます。
  5. --volume nextcloud-db:/var/lib/mysql:Z - nextcloud-dbという名前のボリュームを、MySQLデータ・ファイルのデフォルトの場所である/var/lib/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

Nextcloudのデプロイ

これで、Nextcloud自体を同じポッドの別のコンテナとしてデプロイできるようになりました。パラメータは前のコマンドと似ており、ここでは、Nextcloudが使用するデータベースに関するデータベース接続の詳細を渡します。

ノート:変数MYSQL_DATABASEMYSQL_USERおよびMYSQL_PASSWORDの値が、データベースの起動時に指定した値と同じであることを確認します。NEXTCLOUD_ADMIN_USERおよびNEXTCLOUD_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 -データベースとアプリケーションの両方が同じポッドにあるため、アプリケーションは127.0.0.1を使用して、両方とも同じホストで実行されているかのようにデータベース・コンテナにアクセスできます。
  2. --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> -信頼できるドメインは、Nextcloudによって使用されるセキュリティ機能で、Nextcloudにアクセスできるすべてのドメインのリストを指定する必要があります。この場合、これはNextcloudが実行されると予想されるため、インスタンスのパブリックIPアドレスになります。

起動ログを表示するには、次を使用します。

podman logs -f nextcloud-app

起動が完了したら、http://<your_public_ip>:8080に移動してNextcloudサーバーにアクセスできます。NEXTCLOUD_ADMIN_USERおよびNEXTCLOUD_ADMIN_PASSWORDに指定した値を使用してログインします。

その他の学習リソース

docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルでさらに無料の学習コンテンツにアクセスします。さらに、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerにします。

製品ドキュメントは、Oracleヘルプ・センターを参照してください。