Community Edition Case Study: Quick Start on Google Cloud with AWS Services 日本語版


本ブログポストは、Hubs Creator Labsに掲載された **Community Edition Case Study: Quick Start on Google Cloud with AWS Services**の日本語版です。日本語訳に加えて、筆者が有用と考えた情報を追記しています。

本文に入る前に軽く自己紹介。 私、やのせんは情報系学部の大学教員で、現在の主な専門分野は教育工学、特にVRやメタバースを活用した教育です。今回のCommunity Editionの前身であるHubs Cloudについては、操作方法などを追加したものを個人で運用して、実際の授業で活用してきました。

残念ながらHubs Cloudがディスコンになることを受けて、Community Editionに移行予定です。

今回のCommunity Editionでは新たにDockerやKubernetesといった技術が使われていますが、自分は使用経験が無かったので正直少々戸惑いました。それでも、上記のQuick Startを参考にして自分用のサーバーを設置出来ました。その経験を参考に、以下の日本語版を作成しています。ご活用いただければ幸いです。もし質問がある時は、Discord(yanosen_jp)かTwitter(現X)(@yanosen_jp)でメッセージください。分かる範囲でお答えします。


はじめに

このステップバイステップガイドでは、AWSのRoute53とSimple Email Service (SES)を使用してGoogle CloudにHubs Community Editionのインスタンスを迅速にデプロイする方法を学びます。AWSサービスの操作に慣れており、Google Cloudのような新しいプラットフォームでHubsをホストする方法を学びたいHubs Cloudの利用者の方に最適なガイドです。

始めるにあたっては、Community EditionやKubernetesといった技術の基本情報とそれらがどのように連携して機能するかを理解することが重要です。既にこれらの情報を熟知している場合は、「デプロイメントの必要事項」という小見出しからチュートリアルを開始しても構いません。

Hubs Community Edition インフラストラクチャを理解する

"Mozilla Hubs" として知られる製品は、いくつかの強力なソフトウェアで構成されています。

例えば、ウェブブラウザで Hub を訪れた時、あなたは Hubsクライアントとインタラクションしています。

Hubsクライアント自体は、例えば以下のようないくつかの他のソフトウェアとやりとりします:

  • Reticulum | Hubs のネットネットワークおよび API サーバー
  • Dialog | Hubs の WebRTC 音声およびビデオ通信サーバー

Hubsクライアント、Dialog、および Reticulum は、より大きなソフトウェアスタックの3つのコンポーネントに過ぎません。このスタックの各コンポーネントは個別に設定され、Hubs が適切に機能するように他のコンポーネントとネットワークされています。

Hubs Community Edition は、開発者がスタックの各コンポーネントを個別にダウンロード、インストール、設定、接続、および更新する必要を無くしてくれます。Community Edition は、コンテナ化されたソフトウェアオーケストレーションシステムである Kubernetesと呼ばれるソフトウェアを使用して、その複雑なデプロイメントプロセスのほとんどを簡素化および自動化します。

コンテナ化されたソフトウェアとは

この記事を読むにあたり、現在使用しているウェブブラウザを考えてみましょう:

  1. そのブラウザが工場出荷時にデバイスにインストールされていない限り、あなたはまずデバイスのオペレーティングシステムに対応するブラウザのバージョンをダウンロードする必要がありましたね。
  2. 次に、指定したディレクトリにアプリケーションファイルが配置されるようにブラウザをインストールしましたね。
  3. その後、ブラウザを開き、Firefox アカウントまたは Google アカウントにサインインしたかもしれません。
  4. そして、広告ブロッカーの拡張機能やパスワードマネージャーをインストールしたかもしれません。
  5. 最後に、あなたはどこかのウェブサイトに行ってお気に入りバーに追加したかもしれませんね...

そこで、もしウェブブラウザのインストールの完全な状態をパッケージ化し、設定、ログインしているアカウント、拡張機能、ブラウザの履歴、お気に入りなどを含め、それをオペレーティングシステムに関係なく他のコンピュータで使用できるとしたら、どうですか?

同様に、任意のアプリケーションの完全な状態をパッケージ化し、その依存関係、ライブラリ、設定ファイル、およびアプリケーションコードを含め、そのパッケージを他のどのコンピュータでも実行できることを想像してみてください。

これはDockerと呼ばれるオープンソースソフトウェアを使用すれば可能になります。Dockerコンテナは、独自にパッケージされ設定されたソフトウェアを走らせる、コンピュータ上で実行されるプロセスです。DockerおよびDockerコンテナについては、公式ドキュメントでより詳しく学んでください。

💡
最小限の設定で迅速なソフトウェアのデプロイを支援するために、セルフホスト型ソフトウェアが、Dockerコンテナとして配布されることは一般的です。

Dockerコンテナとしてパッケージされた人気ソフトウェアの他の例には以下のようなものがあります:
Wordpress | ブログウェブサイトシステム
Nextcloud | コンテンツコラボレーションソフトウェアのスイート Ubuntu | すべてのLinuxディストリビューション

Hubs Community Editionの多くのコンポーネントは別々のDockerコンテナ内で実行されます。これらのコンテナはそれ自体では互いについて多くを知りません。もし、Dialogコンテナも実行せずにコンピュータ上でReticulumコンテナを実行した場合、Hubに接続した人は互いに見ることができますが、聞くことはできません

したがって、これらのコンテナが互いに通信する方法が必要です。Hubに接続する人々がそのHubに関連するDialogサーバーにも接続できるようにする方法が必要です。また、Reticulumコンテナを停止することなくDialogコンテナのコードを更新する方法も必要です。これらすべてのコンテナをどのようにまとめるのでしょうか?

Kubernetesならできます!

Kubernetesとは

Kubernetes(しばしば「K8s」と省略される)は、コンテナ化されたソフトウェアを管理するためのシステムです。Kubernetesのデプロイメント、いわゆる「クラスタ」は、2つの部分で構成されています:

  1. 管理者や開発者によって定義されたクラスタの状態を維持するコントロールプレーン
  2. コントロールプレーンによって定義されたソフトウェアを実行する仮想または物理的なコンピュータであるノード。各ノードには、ストレージとネットワークリソースを共有する1つ以上のポッドが含まれています。各ポッドは1つ以上のコンテナを実行します。

Kubernetesを使用して構築されたソフトウェアをデプロイするためには、開発者はクラスタのポッド、それらのポッドのコンテナ、コンテナの機能に必要なコンピュータリソース、ネットワーク情報などを記述したプレーンテキストの設定ファイルとともに、Kubernetesの実行可能ファイルを提供する必要があります。この設定ファイルはデプロイメント仕様と呼ばれます。

💡
たとえば、あるHubsの開発者が、設定ファイルに「私のK8sクラスターには、ポート9100にReticulumサーバのバージョンret.prod.220712.200を、ポート4443にDialogサーバのバージョンdialog.prod.220303.63を実行させたい」と記述するとしましょう。

コントロールプレーンはその設定ファイルを取り込み、指定のコンテナ化されたソフトウェアをノードにダウンロードして実行するよう指示します。

Kubernetesクラスターは、以下を含む多くの種類のコンピューターにデプロイ可能です:

Community Editionのコンテナ化されたサービス

以下は、Hubs Community Editionを構成する各コンテナの概要です

  1. Hubs | Webブラウザ用のHubsクライアント。
  2. Spoke | Hubs用のカスタム3D環境を作成するためのWebベースのコンテンツ作成ツール。
  3. Reticulum | HubsのネットワーキングとAPIサーバー。認証、アバターの位置決め、オブジェクトの操作などを扱います。
  4. Dialog | WebRTCオーディオおよびビデオ通信サーバー。これにはWebRTC選択的転送ユニットが含まれています。HubsがWebRTCをどのように使用しているかの詳細については、こちらの資料をご覧ください。
  5. Coturn | WebRTC通信に使用されるTURNおよびSTUNサーバー。HubsがWebRTCをどのように使用しているかの詳細については、こちらの資料をご覧ください。
  6. Nearspark | 画像からサムネイルを生成するためのサービス。
  7. Speelycaptor | 動画をHubs互換フォーマットに変換するサービス。ffmpegを使用しています。
  8. PgBouncer | PostgreSQLの軽量なコネクションプーリングツール。新たに高コストなPostgreSQLデータベース接続をクライアントやクエリごとに行うかわりに、コネクションプーラーはデータベースへの長寿命な接続グループを作成し、必要に応じてそれらの接続を再利用します。これによりデータベースアクセスのパフォーマンスと可用性が向上します。
  9. Photomnemonic | ウェブサイトのスクリーンショットを撮るためのサービス。

ご自身のCommunity Editionをデプロイした後、これらのコンテナ化されたサービスが各々の個別のポッドで実行されているのが見られるようになります。ここで詳細な説明はおわりにしますので、デプロイメントチュートリアルに進みましょう!

デプロイの必要事項

💡
このガイドを使っていて問題が起きた時、それを知らせる最も効果的な方法は、Discordサーバーの#community-editionチャンネルを利用するか、Hubs Cloudのリポジトリでissueを作成することです。

Community Editionを成功裏にデプロイするためには、一定の必須条件を満たす必要があります。以下で説明する要件は、このケーススタディに合わせて調整されており、Community Editionのコードベースと完全に一致するわけではありません。このチュートリアルは、macOS Ventura 13.1を搭載した2021年モデルのM1 MacBook Proを使用して作成されたことに注意してください。Community Editionをデプロイするために使用する個々のコマンドは、お使いのデバイスとオペレーティングシステムによって異なる場合があります。

パート1: 始める前に、Amazon Web ServicesとGoogle Cloud Platformのアカウントで課金の設定を行う必要があります。このガイドではアカウントと請求情報の設定の個々のステップは説明しませんが、設定プロセスについての詳細は次のリンクで確認できます:AWS | GCP

パート2: 次の無料のサードパーティアプリケーションを使用します:

 A. VSCode | Community Editionを設定しデプロイするためのコードエディター。

 B. Lens | K8sクラスターを監視し管理するためのインターフェース。

パート3: コンピュータに以下のソフトウェアがインストールされていることを確認する必要があります。インストールに使用したコマンドも記載しています:

A. Homebrew

/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"

B. The Google Cloud SDK

brew install --cask google-cloud-sdk

C. Kubectl

curl -LO "<https://dl.k8s.io/release/$>(curl -L -s <https://dl.k8s.io/release/stable.txt>)/bin/darwin/arm64/kubectl"

D. gettext

brew install gettext

ステップ1:AWSのRoute53でDNSを設定する

: AWSにHubs Cloudインスタンスを設定したことがあるなら、Route53でドメインを登録するプロセスはもうご存知でしょう。実際、Community Editionインスタンスで使用したい既存のドメインを持っているかもしれません。しかし、Hubs Cloudとは異なり、Community Editionをデプロイするためには1つの登録ドメインだけが必要です。

  1. このデプロイメントに使用する予定のドメインを既に持っていない場合は、AWS Route53で購入する必要があります:
  2. AWSコンソールでRoute53に移動します。
  3. 左側のツールバーで「登録済みドメイン」タブを選択します。
  4. 「登録済みドメイン」ボタンを選択し、希望するドメインを検索して、チェックアウトプロセスに従ってドメインを購入します。
  5. 購入が成功したことを示す確認メールを待ちます。登録プロセスの完了を待つ必要もあります。
  6. 最後に、ドメインの移管のロックを無効にします。これ「登録済みドメイン」タブでドメインを選択し、「移管のロック」の隣の「無効化」ハイパーリンクをクリックすることで行えます。

希望のドメインを登録したら、4つのレコードを作成する必要があります…

  1. 左側のツールバーにある「ホストゾーン」タブに移動し、ドメインをクリックします。
  2. ドメインの詳細で、「レコードを作成」を選択して、プレースホルダー値を持つ4つのAレコードを作成します。心配しないでください、これらは後で更新します:

 a.  レコード名:{空白のまま}

   レコードタイプ:A

   値:0.0.0.0 (プレースホルダー)

 b. レコード名:assets

  レコードタイプ:A

  値:0.0.0.0 (プレースホルダー)

 c. レコード名:stream

  レコードタイプ:A

  値:0.0.0.0 (プレースホルダー)

 d. レコード名:cors

   レコードタイプ:A

   値:0.0.0.0 (プレースホルダー)

これが完了したら、デプロイ用にドメインを適切に設定したことになります。このガイドの後のほうで、それらのプレースホルダーレコード値を更新します。

ステップ 2: AWSのSimple Email Service (SES) でSMTPを設定する

Hubsでは、ユーザーのメールアドレスをSpokeシーン、ルーム、アバターなど重要なアカウント情報と関連付ける必要があります。ユーザーにメールを送信するために、 Simple Mail Transfer Protocol(SMTP)を設定する必要があります。

  1. AWSコンソールで「Amazon Simple Email Service」に移動します。

2. 左手のツールバーで「SMTP設定」を選択します。

3. SMTPエンドポイントURLをメモしておきます。これは後で使用します。

4.「SMTP認証情報の作成」ボタンを選択します。

5.(オプション)「ユーザーの詳細を指定」ページで、割り当てられたIAMユーザー名をカスタマイズすることができます。

6.「ユーザーのアクセス許可ポリシー」に以下のキーが対応する値を持っていることを確認します:

 “Effect”: ”Allow”
 “Action”: ”ses:SendRawEmail”
 “Resource”: ”*”

7.「ユーザーの作成」を選択します。

8. SMTPユーザー名SMTPパスワードをダウンロードまたはコピーします。これらは後ほどCommunity Editionのデプロイメント仕様を設定する際に使用します。

これが完了したら、メールサービスはデプロイメントのために適切に設定されたことになります。

💡
このクイックスタートガイドは、私のHubのドメインと管理者のメールアドレスを検証済みのアイデンティティとして、SESがまだサンドボックスモードである状態でテストされました(サンドボックス内ではSESは未検証の受信者と送信者との送受信は出来ません)。Hubs Cloudと同様に、あなたのHubsを本番環境用にするためには、SESの上限を増やすことをリクエストするのをお勧めします。

ステップ3:Google Cloud Kubernetes Engineを使用してKubernetesクラスタを作成する

次に、Community Editionコンテナを保持するための新しいKubernetesクラスタを作成する必要があります。google-cloud-sdkがインストールされたコマンドラインを使用して、このクラスターを作成できます:

1. google cloud sdkにログインします。

gcloud auth login

2. クラスタを作成したいプロジェクトで作業していることを確認します。プロジェクトを新しく作成する必要がある場合は、これらのステップに従ってください。

gcloud config list

3. 正しいプロジェクトで作業していない場合は、次のコマンドを実行して正しいプロジェクトに変更します。

gcloud config set project <YOUR_PROJECT_ID>

4. K8sクラスタを作成します。一般に、クラスタは対象のユーザーベースに最も近いゾーンに割り当てることをお勧めします.ゾーンに関する詳細な情報はこちらで確認できます。

gcloud container clusters create <YOUR_DESIRED_NAMESPACE> --zone=<YOUR_DESIRED_ZONE>

5. クラスタが構成されるのを待ちます。これには数分かかる場合があります。完了すると、クラスタに関する確認メッセージと関連情報が届きます。

Created [<https://container.googleapis.com/v1/projects/YOUR_PROJECT_ID/zones/YOUR_DESIRED_ZONE/clusters/YOUR_DESIRED_NAMESPACE>].

これで、私たちのK8sクラスタは、Community Edition用のデプロイメント仕様の適用が可能になりました!

ステップ4:Community Editionをダウンロード、設定、そしてデプロイする

Community Editionを構成するコードは、現在Hubs CloudのGitHubリポジトリのこのセクションにあります。K8sクラスタにデプロイするには、リポジトリをダウンロードし、我々が使用するサービスに関する情報を用いてデプロイメントスクリプトを編集し、設定ファイルをデプロイする必要があります。

1. VSCodeのコマンドラインを使用してGitHubリポジトリをクローンします。

git clone <https://github.com/mozilla/hubs-cloud.git>

2. community-editionディレクトリに移動します。

cd community-edition

3. VSCodeでrender_hcce.shを編集し、以下の必要なパラメーターの内容を使用するサービスの情報に置き換えます。また、ローカルのデバイスに保存するべき複数の秘密のパスワードも設定します:

 HUB_DOMAIN | Route53からのドメイン。
ADM_EMAIL | 作成時に管理者権限を与えたメールアドレス。
Namespace | Kubernetesクラスタ内で使用する名前空間。
DB_PASS | あなたが選んだ秘密のパスワード。
SMTP_SERVER | SESのSMTPエンドポイントのURL。
SMTP_PORT | 587
SMTP_USER | SESのSMTPユーザー名。
SMTP_PASS | SESのSMTPパスワード。
NODE_COOKIE | あなたが選んだ秘密のパスワード。
GUARDIAN_KEY | あなたが選んだ秘密のパスワード。
PHX_KEY | あなたが選んだ秘密のパスワード。

4.(オプション)VSCodeでrender_hcce.shを編集し、SKETCHFAB_API_KEYおよびTENOR_API_KEYをこれらのサービスの認証情報に置き換えます。Sketchfab(3Dモデル検索用)やTenor(アニメーションGIF検索用)を設定したくない場合は、これらの値をそのままにしておいてよいです。

5. デプロイメントスクリプトの設定が完了したら、以下のコマンドを実行してデプロイメント仕様を作成し、クラスタに適用します。

bash render_hcce.sh && kubectl apply -f hcce.yaml

6. デプロイの完了を待ちます。これには数分かかる場合があります。

7. 次のコマンドでデプロイが正常に行われたかを確認します。戻り値で11個のポッドがリストされているはずです。

kubectl get deployment -n NAMESPACE_WITHIN_CLUSTER

8. より詳しく調べたい場合は、各ポッドの詳細を調べて、意図した値が存在することを確認できます。特に、Reticulumポッドの情報を確認することをお勧めします。

kubectl describe deployment POD_NAME -n NAMESPACE_WITHIN_CLUSTER
💡
Community Editionのコードベースのスクリプトは、デバイスやオペレーティングシステムに応じて調整する必要があるかもしれません。例えば、render_hcce.shの58行目と59行目は、M1 macOS 13.1上で実行するために、base64 <secret> -w 0からbase64 -i <secret>に修正しました。

ステップ5: サービスの公開

Community Editionインスタンスにアクセスする前に、ドメインを自動的に割り当てられた外部IPアドレスに紐付ける必要があります。

1. インスタンスの外部IPアドレスを取得します。

kubectl -n NAMESPACE_WITHIN_CLUSTER get svc lb

2. AWS Route53の”Hosted Zones”タブに戻り、ドメインを選択します。

3. 以前に作成した4つのAレコードのプレースホルダー値をインスタンスの外部IPアドレスで置き換えます。これらは以下の通りです:

 <HUB_DOMAIN>
assets.<HUB_DOMAIN>
stream.<HUB_DOMAIN>
cors.<HUB_DOMAIN>

4. すべてのレコードを保存し、変更が反映されるのを数分待ちます。

ステップ6: Lensを使用してインスタンスを検証および管理する

IPをドメインに公開したら、設定したドメインでCommunity Editionインスタンスの使用を開始できるようになります。

初めてドメインに接続する...

  1. ドメインに接続を試みます。まだHubの証明書を設定していないため、証明書を「自己署名」する必要があります。 証明書のないドメインのページを開こうとすると、Webブラウザは警告を表示し、それでもページを閲覧するかどうかのオプションを提示します。Firefoxの場合は、「詳細設定」をクリックして「危険性を承知で続行」を選択すれば実現できます。
  2. URLを初めて開くするとき、メールアドレスを使用してサインインするように促されます。

Reticulumログを確認する...

  1. Lensと呼ばれる無料インターフェースを使用してK8sクラスターのバックエンドを確認すると便利です。設定プロセス中に、LensはGoogle Cloudアカウントに関連付けられたすべてのアクセス可能なクラスタを自動的に検出するはずです。次に、左側のツールバーを使用して個々のクラスタとそのポッドを確認できます。
  2. Reticulumのポッドを選択し、詳細ページの右上隅にあるアイコンをクリックしてログを開きます。ログアイコンは、4つの水平線で示され、4番目の線が他の線より短いです。
  3. Reticulumのログを選択すると、インスタンスのバックエンドで発生しているプロセスを閲覧できるはずです。

SMTPが正しく動作していることを確認する...

  1. Reticulumのログを開いた状態で、WebブラウザでADM_EMAILのメールアドレスを使用してインスタンスにサインインを試みます。
  2. 成功した場合、Reticulumはリクエストを登録し、noreply@<HUB_DOMAIN>からメールが届くはずです。 これにより、部屋を作成したり、アセットをアップロードしたり、シーンをHubにデプロイしたりすることができるようになります!
  3. もし失敗した場合、Reticulumはエラーの原因を記録するので、それを使用してトラブルシューティングを行うことができます。

設定値を確認してください...

  1. Lensに戻り、左側のツールバーにある”Pods”タブを選択し、あなたのReticulumポッドを選択します。
  2. “Pod Shell”を開き、sshを使用してあなたのReticulumポッドに接続します。このアイコンは”Pod Logs”アイコンの直接左にあるはずです。
  3. Pod Shellで、以下のコマンドを実行します:
cat config.toml

4. これにより、デプロイメントの設定に使用した値が返されます。実行中の値が設定した値と一致することを確認してください。

設定値を更新して再デプロイ...

  1. 更新された設定値でCommunity Editionをデプロイするコマンドをいつでも再実行できます。
  2. 設定を再デプロイした後、変更が反映されるためには、現在稼働中のポッドを再起動する必要があります。これは、”Pods”タブのLensインターフェースを使用して、すべてのポッドまたは個々のポッドを単純に削除することで実現できます。Kubernetesのおかげで、Community Editionは自動的に最新の更新を含む新しいポッドを作成しようと試みます。
💡
注意してください。ポッドを終了すると、重要なデータを損なったり削除してしまう結果になることがあります。デプロイメントプロセス中のトラブルシューティングには役立ちますが、本番環境ではK8sのポッドを無闇に終了すべきではありません。

ステップ7: 証明書の設定

このガイドの最後のステップは、インスタンスを保護し、Webブラウザーに表示される自動SSL警告を取り除くために証明書を設定することです。Community EditionのGitHub READMEには、証明書を設定するための2つのオプションが記載されています:
A. Hubsチームのcertbotbotサービスをデプロイしてもよいです。
B. コマンドラインやLensのようなインターフェースを使用して、手動で証明書を設定することもできます。

このチュートリアルでは、オプションAを採用します。

1. VSCodeでcbb.shを編集し、以下の必要なパラメーターを選択した設定で置き換えます

 ADM_EMAIL | render_hcce.shで指定したのと同じメールアドレス
HUB_DOMAIN | Route53からのドメイン。
Namespace | K8sクラスタであなたが設定した名前空間。

2. 必要なパラメーターを設定したら、以下のコマンドを実行して、サービスをK8sクラスターに追加します。

bash [cbb.sh](<http://cbb.sh/>)

3. 適用後、Lensインターフェースを使用してサービスが追加されたことを確認します。左手のツールバーの”Pods”タブに移動します。certbotbot-httpが表示され、エラーが見られないことを確認してください。

4. 数分後、Community Editionドメインに接続を試みます。これにより、Webブラウザー上でSSL警告が表示されなくなるはずです。

結論

このガイドがHubs Community Editionを構成する技術についての情報を提供し、ご自身のインスタンスの設定に役立ったことを願っています。このガイドはクイックスタートであり、Community Editionのバージョンを本番環境に対応させるためには、多くのアップグレードを検討すべきである、ということを念のためにお伝えしておきます。

  • スケーラビリティ | この方法で作成したインスタンスは約15人の同接ユーザーをサポートできます。水平および垂直方向のスケーリングのために追加のサービスを追加することで、容量を増やすことができます。
  • AWS SMTPサンドボックス | この方法で作成されたインスタンスは、Hubのユーザーに送信できるメールに制限があるかもしれません。上限増加をリクエストする手順はHubs Cloudと同様で、こちらに文書化されています。
  • カスタムアプリのDev Ops | この方法で作成されたインスタンスは、Hubsコードベースの最新バージョンを自動的に追跡します。多くの開発者がHubsクライアント、Reticulum、およびSpokeの独自バージョンをデプロイしたいと思っていることは存じ上げています。それを行うには、独自のデプロイメントシステムを設定する必要があります。今後数ヶ月間でその手順に関する詳細なドキュメントを公開予定なので、お待ちください。
  • Hubs Cloudデータの移行 | 既存のHubs Cloudのお客様は、既存のデータをCommunity Editionインスタンスに移行したいと考えるかもしれません。このプロセスを迅速かつ簡単にするため、自動化されたツールとドキュメントを今後数ヶ月にわたってリリースする予定ですので、ご期待ください

コミュニティがこの新技術をどのように使用するのか、そしてCommunity Editionの改善方法について皆さんからのフィードバックを待ち望んでいます。ご意見を共有し、最新情報を入手する最良の方法は、私たちのDiscordサーバーに参加して#community-editionチャンネルを調べて見ることです。

アップデート:2023年12月

読者の皆様、ただいま、Hubs Cloudの管理パネルで見られたような設定の構成方法、およびHubsチームが使用している手順を用いてHubsを構成するサービスのカスタムバージョンをデプロイする方法に関する、新しいセクションをこのドキュメントに追加中です。

Admin Settingsの設定

Hubs Community Editionは、管理パネルを含め、サブスクリプション版のHubsと同じコードの多く使用しています。Community Editionの管理パネルとHubs Cloudのバージョンの管理パネルの主な違いは、特定の設定を構成するためのフィールドの有無です。例えば、以下のようなものです:

  • 開発者が外部APIにアクセスすることを許可するものを含む、追加のコンテンツセキュリティポリシーのルール
  • アバター、ルーム、およびシーンのための追加のヘッダー、HTML、およびスクリプト

Community Editionでも、これらの設定はK8sクラスタにチャートをデプロイする際に引き続き構成可能です。これらを構成するには、config.toml.templateを参照して、チャートの該当部分に希望の値を入力してください:

[ret."Elixir.RetWeb.Plugs.AddCSP"]
child_src = ""
connect_src = "wss://*.stream.<DOMAIN>:4443"
font_src = ""
form_action = ""
frame_src = ""
img_src = "nearspark.reticulum.io"
manifest_src = ""
media_src = ""
script_src = ""
style_src = ""
worker_src = ""

[ret."Elixir.RetWeb.PageController"]
skip_cache = false
extra_avatar_headers = ""
extra_index_headers = ""
extra_room_headers = ""
extra_scene_headers = ""

extra_avatar_html = ""
extra_index_html = ""
extra_room_html = ""
extra_scene_html = ""

extra_avatar_script = ""
extra_index_script = ""
extra_room_script = ""
extra_scene_script = ""

例えば、私のHubが迅速なモデレーションや画像生成のためにOpenAI APIを呼び出せるようにしたい場合、script_srcのコードは次のようになります。各URLはシングルスペースで区切ってください

script_src = "<https://api.openai.com/v1/moderations> <https://api.openai.com/v1/images/generations>"

カスタムアプリのデプロイ

デフォルトでは、Community Editionは私たちの公開されているdockerレジストリに含まれるHubsのコードベースの最新リリースを追跡します。しかし、多くの開発者は、Hubsの様々なコードベースの自身のバージョンをデプロイしたいと考えるかもしれません。ここでは、HubsチームがGitHub Actionsを利用してあなた自身のdockerレジストリを構築し、このコードをCommunity Editionインスタンスで使用する方法について手順を追って説明します。

  1. まず、docker hubアカウントを作成し、必要なら、あなたのイメージのためのレジストリを作成します。デフォルトでは、docker hubはあなたのユーザー名でレジストリを作成します。
  2. カスタマイズしたいHubsのコードベースをGitHubでフォークしてください(これを行うためにはGitHubアカウントが必要です)。このチュートリアルでは、Hubsクライアントを使用し、カスタマイズを加えるための開始点としてmasterブランチを使用します。
  3. カスタマイズが完了し、デプロイ準備ができたら、.github/workflows/ に移動し、HubsチームメンバーのBrandon Pattersonが作成したこのコードを入力したce-build.ymlというファイルを追加します。完了したら、これらの変更がチェックインされ、フォークしたmasterブランチにマージされていることを確認してください。
  4. GitHubリポジトリのActionsセクションに移動してください。ce-build.ymlを追加しコミットした後、”ce”というアクションが一覧に表示されるはずです。
  5. あなたのフォークのsettingsタブに移動し、”Secrets and Variables”そして”actions”を選択します。"DOCKER_HUB_PWD"という名前の新しいリポジトリシークレットを作成します。シークレットの値には、docker hubのパスワードを入力するか、docker hubでアクセストークンを作成し、そのシークレットのパスワードを使用します。
  6. シークレットを保存したら、”Actions”タブに戻り、”ce”を選択し、”Run Workflow”を選びます。ポップアップで、masterブランチを選択し、”CodePath”は空欄のままとし、”DOCKER_HUB_USR”はdocker hubのユーザー名を入力し、dockerfileがRetPageOriginDockerfileであることを確認し、”registry”にdocker hubのレジストリ名を入力してください。
  7. ビルドが成功するのを待ちます。docker hubで成功したデプロイメントを確認できます。
  8. 最後に、カスタマイズされたバージョンのHubsクライアントを使用するようにコミュニティ版のデプロイメントを更新する必要があります。hcce.yamlの中で、mozillareality/hubs:stable-latestを指す代わりに、デプロイされたコードを含むあなたのdockerイメージを指定してください。