AutoMuteUsをGCP上にセルフホスティングしてみた

はじめに

1 年ほど前に友人同士で Among Us を楽しむために AutoMuteUs のサーバーをセルフホスティングした際のメモです。
初心者向けの記事ではなくなってしまったので、それなりに知識がある方向けの記事となっております。
また、スクリーンショットの画像が古く、現在の画面と多少異なると思いますがご容赦ください。

1. 事前の準備

1.1. Discord のサーバー管理権限を取得しておく

Discord のログインメンバーに管理者権限があるか確認します。
もし自分がサーバー作成者であれば右のように 👑 マークがあると思います。
この場合はサーバー所有者(admin) なので問題ありません。

image

1.2. Discord の Bot の作成

Discord Developer Portal — My Applications にアクセスして Bot を作成します。
リンクからサイトにアクセスして、New Application から作成します。

image

アプリケーション名を入力して CREATE を選択。

image

作成後、左側の SETTINGS メニューから Bot を選択します。

image

Build-A-Bot から Add Bot を選択。

image

Yes, do it! を選択。

image

Bot が作成されました。
Click to Reveal Token をクリックします。

image

表示されたトークンをコピーして保存しておきます。
後で使用します。
その後、左側の SETTINGS メニューから OAuth2 を選択します。

image

遷移後、SCOPES から Bot を選択してチェックを入れます。

image

Bot の権限を設定するため BOT PERMISSIONSAdministrator にチェックを入れます。

image

先程の SCOPES の下部の URL を Copy してブラウザの新しいタブでリンクを開きます。
そうすると以下のような承認画面が表示されます。
AutoMuteUs を追加したいサーバーを選択します。
ここでサーバーが選択できない場合、 1.1. Discord のサーバー管理権限を取得しておく にてサーバー管理権限が取得できていないと思われますので再度確認してください。

image

認証に成功すると対象のサーバーに Bot が参加します。
これにて Bot の作成と準備は完了です。

image

1.4. AUCapture のダウンロード

Releases · automuteus/amonguscapture から AmongUsCapture.zip をダウンロードします。
ダウンロードしたら、 zip ファイルを展開し、中にある exe ファイルを取り出します。
このソフトはゲームプレイ時に毎回起動して利用します。
ユーザーのドキュメントフォルダにも打ち込んでおいてデスクトップやタスクバーにショートカットをおいておくと便利かもしれません。

image

1.3. GCP のアカウントを作成しておく

クラウド コンピューティング サービス  |  Google Cloud から 無料で開始 を選択して GCP のアカウントを作成します。
GCP のアカウント作成方法は調べれば色々出てきますのでこちらの記事では割愛します。

2. インスタンス(AutoMuteUs サーバー)の作成

実際に AutoMuteUs サーバーを作成します。
インスタンスの作成からインスタンスを作成します。

変更ポイントは以下になります。

  • 名前 automuteus
  • リージョン us-east-1
  • ゾーン us-east1-b
  • マシンタイプ e2.micro
  • HTTP,HTTPS トラフィックを許可する
  • 自動化、起動スクリプトに以下のコードを設定

可能な限り無料枠を利用するために以下の点を工夫しました。

  • 固定 IP は使用しない
  • us-east-1e2.micro のインスタンスを作成することで Compute Engine の無料枠を利用
  • ネットワークの Tier を プレミアム から スタンダード に変更

起動スクリプトの YOUR_PRIMARY_BOT_TOKEN は先程コピーしたトークン、 yourdomainishere の部分は公開するドメインまたは IP アドレスに変更する必要があります。
自分はドメインを所持していたので、ドメインを指定、その後ドメインに対して A レコードで作成されたインスタンスのグローバル IP アドレスを設定しました。
GALACTUS_HOST は後ほど Bot から送信される、URL のドメイン部分になります。
参考までに起動スクリプトを以下に貼っておきます。

#! /bin/bash

# install requirements
apt update
apt install -y git apt-transport-https ca-certificates curl gnupg lsb-release

# install automuteus
cd /root/ && git clone https://github.com/denverquane/automuteus.git && cd automuteus
cp sample.env .env
sed -i -e 's/AUTOMUTEUS_TAG=/AUTOMUTEUS_TAG=6.15.2/g' .env
sed -i -e 's/GALACTUS_TAG=/GALACTUS_TAG=2.4.1/g' .env
sed -i -e 's/DISCORD_BOT_TOKEN=/DISCORD_BOT_TOKEN=YOUR_PRIMARY_BOT_TOKEN/g' .env
sed -i -e 's/^GALACTUS_HOST=$/GALACTUS_HOST=https:\/\/yourdomainishere/g' .env
sed -i -e 's/^GALACTUS_EXTERNAL_PORT=$/GALACTUS_EXTERNAL_PORT=80/g' .env

# install Docker
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io

# install docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# run
docker-compose up -d

3. 実際に使用してみる

まず、AmongUs を起動します。
(今回はオレンジ色のプレイヤーでプレイしています。)

image

Discord のサーバー上で .au new と入力します。
そうすると、以下のようなメッセージが表示されます。

image

同時に DM で以下のようなリンクが表示されるので、リンクをクリックします。
リンクをクリックすると AmongUsCapture が起動します。
起動しない場合は、あらかじめ AmongUsCapture ソフトを起動しておいた状態でリンクをクリックします。
(リンクのドメインはこの画像ではlocalhost になっていますが、実際は先程構築したサーバーのグローバル IP アドレスになっているはずです。)

image

リンクをクリックすることで AmongUsCapture と先ほど構築した AutoMuteUs サーバーで接続されます。
接続されるとメッセージが変化して、以下のようになります。
ただし、この状態では AmongUs のプレイヤーと Discord のメンバーが紐付いていないので Unlinked と表示されています。
そのため、紐付けを行うためプレイヤーの色に対応するアイコン(今回はオレンジ色のプレイヤー)をクリックします。

image

メンバーの紐付けが完了すると、紐付けられた Discord のメンション名に切り替わります。
ゲームを開始する前に参加プレイヤーが全員 Unlinked になっていないか確認してください。

image

AmongUs のプレイを終了する際には .au end を入力します。

おわりに

公式が提供している AutoMuteUs サーバーはセルフホスティングすることができます。
また、GCP の無料枠を利用してサーバーを構築すれば、無料で利用することができます。
AutoMuteUs を利用したい方の参考になれば幸いです。