AmoungUs用BotのAutoMuteUsをGCPで無料でホストする
AmongUs を Discord で VC を介してプレイする際に、ゲーム状況に応じて自動で参加メンバーの音声 ON/OFF を制御してくれるAutoMuteUsという超便利 Bot があります。
こちら、README にある通りパブリック公開されている DiscordBot をサーバーに招待することで簡単に利用できます。
が、AmongUs 自体が人気なためか、または日本からのアクセスになるためか、時間帯によって動作が非常に遅く遊びづらいことがあります。
それを解決するため、GCP 上に自分専用の AutoMuteUs Bot を無料でホスティングしたので、今回はその方法メモです。
事前の準備
-
AutoMuteUs の README に沿って、適切な権限を持った DiscordBot トークンを取得しておきます
- ※Bot は 2 つ作成して、Token も 2 つあると便利です。後述しますが BOT を 2 つ設定することで音声 ON/OFF 操作が高速になります。
- 上記の Bot を Discord サーバーに招待しておく
- gcloud コマンドが使えること
1. GCP のインスタンスを構築する
GCP の仮想マシンサービスである ComputeEngine は、特定のリージョン、スペックだと無期限で無料になるため、それを利用します。
ポイント
- 無料リージョンに立てる
- 自分は
us-west1
に設定して快適に遊べています。
- 自分は
- マシンタイプは無料対象である シリーズ N1 の
f1-micro
を選びます。 -
HTTP トラフィックを許可する
にチェックを入れます。
イメージ:
2. GCP インスタンス上でBotプログラムを設定する
Docker をインストールする
docker-compose を利用したいので、Docker 公式を参考にインストールします。(多分デフォルトだと debian なのでリンク先は debian 手順)
AutoMuteUs のソースコードを取得する
これを任意の場所におきます。自分は /opt/automuteus
に配置しています。
(以降、本記事も /opt/automuteus
に配置されている前提の記載となります。)
.env ファイルを作成する。
このあたりは AutoMuteUs の README にも記載されている内容なので困ったらそちらへ。
cp sample.env .env
で .env ファイルを作成し、以下のあたりを編集します。
AUTOMUTEUS_TAG=6.5.5
GALACTUS_TAG=2.4.1
DISCORD_BOT_TOKEN=事前準備で作成したDiscordBotTokenその1
GALACTUS_HOST=http://GCPインスタンスの外部IPアドレス (※後で書き変えます)
GALACTUS_EXTERNAL_PORT=80
WORKER_BOT_TOKENS=事前準備で作成したDiscordBotTokenその2
※AUTOMUTEUS_TAG
、GALACTUS_TAG
は AutoMuteUs の Releases、Galactus の Tags から任意のもの(基本最新で良さそう)を指定します。(記載してるのは自分の設定です)
※WORKER_BOT_TOKENS
は空でも実行できますが、1つ以上あった方がBotの動作が軽快になります。
実行
設定がうまくできていれば、docker-compose up
コマンドで起動できます。
起動すると、事前準備で作成した Bot を招待している Discord サーバーに、Bot がオンラインになります。(WORKER_BOT_TOKENS
をセットしていれば合計 2 つの Bot)
あとは、 .au help
でヘルプを見るなり、AutoMuteUs でググると出てくる他のわかりやすいサイトの使い方通りに利用できます。
3. Bot をサービス化する
ところで、このままだとインスタンスを起動し直すたびに ssh で接続して Bot を起動する必要があります。
また、GCP インスタンスの IP アドレスは起動のたびに変更される可能性があるので .env
も修正の手間があります。
以下の手順で、サービス化を試みます。(もっといいやり方もあると思います!一例です。)
systemd でサービス化
単純に docker-compose
コマンドの実行をサービス化するだけです。
GCP インスタンス上で、以下のような automuteus.service
ファイルを作成して
※ /opt/automuteus/
に配置されてる前提
[Unit]
Description=AutoMuteUs
[Service]
EnvironmentFile=/opt/automuteus/.env
ExecStart=/usr/local/bin/docker-compose -p automuteus -f /opt/automuteus/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -p automuteus -f /opt/automuteus/docker-compose.yml down
ExecReload=/usr/local/bin/docker-compose -p automuteus -f /opt/automuteus/docker-compose.yml restart
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target
/etc/systemd/system
ディレクトリにぶち込みます。
sudo cp automuteus.service /etc/systemd/system
あとはサービスを有効化してあげます。
sudo systemctl daemon-reload
sudo systemctl enable automuteus
# 確認
## start
sudo systemctl start automuteus
## stop
sudo systemctl stop automuteus
## restart
sudo systemctl restart automuteus
この時点でインスタンスを起動すると Bot が自動で起動するようになっていると思います。
インスタンス起動時に IP アドレスを .env に記入する
次に、起動時にインスタンス自身の外部 IP アドレスを取得して .env
に書き出すようにします。
IP アドレスを固定してもいいのですが、そうすると多少料金が発生してしまうのでがんばります。
IP アドレスは GALACTUS_HOST
に記載する必要があるので、これを置換するようなスクリプトを書きます。
#!/bin/bash
envfile=/opt/automuteus/.env
external_ip=$(curl -H "Metadata-Flavor: Google" 'http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip')
envfile_new_row="GALACTUS_HOST=http:\/\/${external_ip}"
sed -e "s/^GALACTUS_HOST=.*/${envfile_new_row}/" ${envfile} >.env.tmp && mv .env.tmp ${envfile}
# Restart after envfile replaced.
systemctl restart automuteus
スクリプトが書けたら、インスタンスの起動スクリプトとして設定してあげます。
↓ 3箇所変更が必要なので注意
gcloud compute instances add-metadata インスタンス名 \
--metadata-from-file startup-script=./startup-script.sh \
--project=GCPプロジェクト名 --zone=インスタンスのzone(us-west1-bとか)
おわり
全部の手順が完了できたら、インスタンスを停止→起動するたびに
- Discord サーバーに 2 つの Bot が起動する
-
.au new
コマンドを叩くと、インスタンスの外部 IP が正しく設定された「URL」が DM で送られてくる
という形になると思います。
一度設定すればあまり変更する必要はないと思うので、快適に AmongUs を楽しみましょう!
Discussion
こんにちは。こちらの記事を参考に設置させていただきました。
本当にありがとうございます!
こちらの記事を読めば設置できるよ、と話をしていたら、
PC初心者の方には難しいようで、PC初心者向けに噛み砕いた記事を
自ブログ(設置したばかりなのでほぼ身内向けになると思います)に書きたいのですが、
こちらの記事へのリンクや一部似た内容になってしまうと思うのですが、大丈夫でしょうか?
コメントありがとうございます。問題なしです!🙆♂️
ありがとうございます!
昔の記事で申し訳ありませんが、ご質問させてください。
2の手順まで進めたのですが、BOT起動後、DISCORD上で.au nでスタートした時に、BOTから返ってくるIPアドレス(GCPインスタンスの外部IPアドレス)をクリックすると、ファイアウォール設定を見直してくださいみたいなエラーがでてしまうのですが、どこかに設定が必要でしょうか…?