ノート:
- このチュートリアルではOracle Cloudにアクセスする必要があります。無料アカウントに登録するには、Oracle Cloud Infrastructure Free Tierの使用を開始するを参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
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ネットワーク・セキュリティ・リストに必要な変更を行う必要があります。
これらのコンポーネントを使用すると、導入の基本的なトポロジが提供されます。
イントロダクション
目的
このチュートリアルの内容:
- Ampere A1コンピュート・インスタンスの作成
- コンテナ化されたアプリケーションをデプロイするためのコンピュート・インスタンスの準備
- 次のクラウドをコンテナのセットとしてデプロイします。
- アプリケーションを接続し、ファイル同期を設定します。
- デプロイメントのクリーンアップ
前提条件
- Oracle Free Tier (トライアル)、有料またはLiveLabsクラウド・アカウント
- OCIコンソールの理解
- ネットワーキングの概要
- コンパートメントの知識
- コンテナおよびポドマンの基本概念知識
環境を設定する
まず、Java EEアプリケーションの作成およびデプロイに使用するOracleクラウド環境を開始します。この環境はクラウド・コンパートメント内に格納され、コンパートメント内の通信は仮想クラウド・ネットワーク(VCN)経由になります。コンパートメントとVCNは、環境全体を分離および保護します。Nextcloudサーバーをホストするために、Ampere A1コンピュート・インスタンスをデプロイします。コンピュート・インスタンスが作成されると、アクセス・ポリシーを設定してアプリケーションを公開し、Nextcloudをインスタンスにインストールします。
基本OCIインフラストラクチャ設定
-
ナビゲーション・メニューを開きます。「ガバナンスおよび管理」で、「アイデンティティ」に移動して「コンパートメント」をクリックします。この画面から、コンパートメントのリストが表示され、「コンパートメントの作成」をクリックします。
-
次を入力します:
- 名前: "AppDev"と入力します。
- 説明:説明(必須)を入力します。例:チュートリアルを開始するためのAppDevコンパートメント。機密情報を入力しないでください。
- 親コンパートメント:このコンパートメントを配置するコンパートメントを選択します。デフォルトでは、ルート・コンパートメント(またはテナンシ)に設定されます。
- 「コンパートメントの作成」をクリックします。
- コンパートメントがリストに表示されます。
Ampere A1コンピュート・インスタンスの作成
-
アンペアのA1コンピュート・インスタンスを作成するには、コンソールの左上隅にあるナビゲーション・メニューを使用して、「コンピュート」 > 「インスタンス」に移動します。
-
インスタンス作成フローを開きます。
- AppDevコンパートメントにあることの確認
- 「インスタンスの作成」をクリックします。
-
インスタンスの作成ページで、仮想クラウド・ネットワーク(VCN)、インターネット・ゲートウェイ(IG)などの新しいネットワーク・リソースとともに新しいインスタンスを作成します。
- インスタンスにNextcloudという名前を付けます
- イメージの選択を更新して、Oracle Linux 8以降を使用します
- 「シェイプの変更」ボタンをクリックして、使用可能なコンピュート・シェイプを表示します。
-
インスタンスのイメージを構成します。
- 使用可能なOSイメージを表示するには、「イメージの変更」ボタンをクリックします。
- Oracle Linux 8以降を選択します。
-
インスタンスのリソースを構成します。
- シェイプシリーズの選択でアンペレアームベースのプロセッサを選択します。
- Ampere Armベースのプロセッサを含むシェイプのリストから
VM.Standard.A1.Flex
シェイプを選択します。アンペアのA1シェイプは柔軟で、コア数およびメモリーの量を変更できます。VM用に1コアと6GBのメモリーを選択します。
-
ネットワーク・オプションを選択してください。次のクラウド・デプロイメント用の新しいVCNおよびサブネットを作成します。インスタンスにパブリックIPアドレスを割り当てるように選択してください。
-
SSHキー・ペアを生成してダウンロードします。このステップは省略可能ですが、後の保守とアップグレードには特にお薦めします。また、使用するキーペアがすでにある場合は、公開キーを持ち込むこともできます。SSHキーの生成方法を知りたい場合は、「SSHキーの生成」チュートリアルの手順に従ってください。
-
「作成」をクリックしてネットワーキング・リソースを作成し、コンピュート・インスタンスを起動します。
アプリケーション・ポートをユーザーに公開
インターネットからアプリケーションにアクセスするには、アプリケーションで使用するポートを開く必要があります。この項では、アプリケーションでトラフィックを送信および受信できるように、コンピュート・インスタンスのクラウド・ネットワークおよびファイアウォール・ルールでセキュリティ・リストを構成します。
仮想クラウド・ネットワーク(VCN)の構成
セキュリティ・リストは、インスタンスの仮想ファイアウォールとして機能し、内外で許可されるトラフィック・タイプを指定するイングレスおよびエグレス・ルールが含まれます。サブネット・レベルで構成されているセキュリティ・リスト。そのサブネット内のすべてのネットワーク要素にセキュリティ・ルールを適用します。ネットワークには、ルールの初期セットを含むデフォルト・セキュリティ・リストが付属しています。デフォルトのセキュリティ・リストを使用すると、SSHを使用してインスタンスに接続でき、インスタンスが任意の宛先にアウトバウンド・ネットワーク・コールを行うことができます。
- 作成したインスタンスのインスタンス詳細ページをナビゲートします。コンピュート > インスタンス > 作成したインスタンスをクリック
-
サブネットをクリックして、インスタンスがアタッチされているサブネットに移動します
- サブネットで、デフォルトのセキュリティ・リストを選択します
- 「Add Ingress Rule」をクリックして、ルールに一致する受信トラフィックを許可する新しいルールを追加します。
- ポート8080で受信トラフィックを許可するイングレス・ルールを追加します
- 「ソースCIDR」を
0.0.0.0/0
に設定します。これにより、すべてのソースからの受信トラフィックが許可されます。 - 「宛先ポート範囲」を
8080
に設定します。これにより、宛先はポート8080
のみに設定されます。これで、すべてのソースからのトラフィックがポート8080
を使用できるようになりました。これは、アプリケーションをどこからでも到達できるように、必要なものです。 -
摘要を入力します。
- 「ソースCIDR」を
インスタンスの構成
ファイアウォール・ルールは、インスタンス内外のパケット・レベルのトラフィックを制御します。ファイアウォール・ルールはインスタンス自体で直接構成し、追加レベルのセキュリティを提供します。
- 作成したインスタンスのインスタンス詳細ページをナビゲートします。コンピュート > インスタンス > 作成したインスタンスをクリック
- インスタンスのパブリックIPアドレスをコピーします。
- SSHを使用してインスタンスにログインします。インスタンス作成ステップで生成または指定したキーを使用します。Oracle Linuxオペレーティング・システムを使用するインスタンスのデフォルトのユーザー名は
opc
です。 -
ファイアウォール構成コマンドを実行します。これにより、インスタンス自体のファイアウォールが変更され、ポート
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
パッケージをインストールして、コンテナ化されたワークロードをデプロイするために必要なツールでインスタンスを準備できます。
-
SSHを使用してインスタンスにログインします。インスタンス作成ステップで生成または指定したキーを使用します。Oracle Linuxオペレーティング・システムで実行されているインスタンスのデフォルトのユーザー名は
opc
です。 -
コンテナの操作に必要なすべてのツールをプルする
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
podman pod create
-ポッドを作成します。--hostname nextcloud
-ポッドのホスト名をnextcloud
として設定します--name nextcloud
-ポッドの名前をnextcloud
として設定します--publish 8080:80
-ポッドのポート80
をホスト上のポート8080
に公開します。
ストレージ・ボリュームの定義
ポッドが定義されたので、Podにコンテナを移入する前に、ストレージ・オプションをいくつか定義する必要があります。コンテナは、コンテナ内に作成されたすべてのファイルに対して、デフォルトで書込み可能なコンテナ・レイヤーを使用します。つまり、コンテナ内のプロセスによって作成されたファイルおよびデータは永続化されず、コンテナが削除または終了すると失われます。また、コンテナ間でデータを共有することも困難になります。ボリュームは、コンテナによって作成されたデータを永続化するための推奨方法です。ホスト・マシン上のストレージ・ロケーションのストレージ抽象化とみなすことができますが、コンテナのライフサイクルとは無関係に管理されます。また、複数のコンテナに同時にマウントすることで、コンテナ間でデータを簡単に共有できます。
次のクラウドの推奨に基づいて、3つのボリュームを使用してデータを管理します。
-
nextcloud-appdata
という名前のボリュームは、次のクラウドのメイン・アプリケーション状態を格納します -
nextcloud-files
という名前のボリュームには、使用によってアップロードおよび作成されたファイルが格納されます。 -
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
podman run
- runコマンドは、指定されたパラメータを使用してコンテナでコマンドを実行するようにポッドマンに指示します。実行するコマンドは、通常、イメージ自体で定義されます。--detach
-デタッチ・モード:バックグラウンドでコンテナを実行し、新しいコンテナIDを出力します。--pod=nextcloud
-既存のポッドでコンテナを実行します。ここでは、Nextcloud用に以前に作成したコンテナintを実行することを選択しました--env
-任意の環境変数を設定します。これらの環境変数には、コンテナ内で実行されているプロセスによってアクセスできます。--volume nextcloud-db:/var/lib/mysql:Z
-nextcloud-db
という名前のボリュームを、MySQLデータ・ファイルのデフォルトの場所である/var/lib/mysql
にマウントします。Z
オプションは、コンテンツをプライベート非共有ラベルでラベル付けするようPodmanに指示します。--restart on-failure
-コンテナの終了時に従うようにポリシーを再起動します。ここでは、コンテナが失敗すると再起動されます。失敗は、ゼロ以外のステータスを持つコンテナ内のプロセスが存在する場合です。--name nextcloud-db
-名前nextcloud-db
をコンテナに割り当てます。mysql/mysql-server:8.0
-コンテナの作成に使用するイメージ
コンテナをデタッチ・モードで実行しているため、Podmanがバックグラウンドで起動し、終了します。起動とログのステータスを確認するには、次のコマンドを実行します。Ctrl+C
を押して、ログの後に停止します。
podman logs -f nextcloud-db
Nextcloudのデプロイ
これで、Nextcloud自体を同じポッドの別のコンテナとしてデプロイできるようになりました。パラメータは前のコマンドと似ており、ここでは、Nextcloudが使用するデータベースに関するデータベース接続の詳細を渡します。
ノート:変数
MYSQL_DATABASE
、MYSQL_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
--env MYSQL_HOST=127.0.0.1
-データベースとアプリケーションの両方が同じポッドにあるため、アプリケーションは127.0.0.1
を使用して、両方とも同じホストで実行されているかのようにデータベース・コンテナにアクセスできます。--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ヘルプ・センターを参照してください。
Deploy Nextcloud on Ampere A1 on Oracle Cloud Infrastructure
F50344-01
November 2021
Copyright © 2021, Oracle and/or its affiliates.