誰でも爆速でチャットツールを立ち上げる方法
はじめに
はじめまして!サーバサイドエンジニアの酒井です。
僕は4ヵ月前(2023年10月)にf4samuraiに入社しました。
前職はシステムインテグレーターでAWSの講師や営業、クラウド環境の設計/構築/運用といった業務を行っていたのですが「ゲーム開発に挑戦したい!」という思いで転職してきました。
今回は社内向けに「Rocket.Chat」の紹介記事を公開したところ反響があったのでエンジニアブログでも紹介します。
Rocket.Chatのご紹介
業務で使用するチャットツールとしては他にChatwork,Slack,Teamsなどが有名だと思います。これらのチャットサービスはどちらかというと社内向けツールで、その場限りの利用をすることは少ないかなと思います。また不特定多数のユーザが利用するチャットとしてはDiscordが有名ですが、アカウント登録やチャットへの招待が必要です。
Rocket.Chatは上記チャットツールと違う点があります。それはユーザがアカウントの登録をする必要がなく、匿名で利用できることです。また、「究極のオープンソースWebチャットプラットフォーム」と謳っています。オープンソースなので無償で使うことができ、クラウド環境とオンプレ環境どちらでもセットアップして使うことができます。
匿名ユーザで質問ができますので、イベント時のQAツールとしてはもってこいの代物です。スマホから使えてメールアドレスなども不要です。また、問題のある発言は管理側で消すこともブロックすることも可能です。AWS上に環境構築したとすると、料金はAWS利用料だけで済みます。
Rocket.Chatの環境構築
実際にRocketChatを使えるようにするための手順を解説します。ここでは、AWS上に環境を構築することを想定しています。
- AWSのアカウントを用意(EC2を扱えるIAMユーザー)
- Amazon Linux2 インスタンスの作成
・インスタンスタイプ:t3.large あたり(あまり小さいサイズだと動作が不安定かも)。個人的にm6.large推奨。1000名もこれで大丈夫
・AMIは「Amazon Linux2」を選択(2023だとコマンド変えないとダメかも)
・パブリックアクセスが可能なものにする(ELB の配下に置いたり EIP をつけたり...)HTTPS 対応とするために ELB 配下とするのが楽でよいかと思います
・SSM 対応の IAM Role の付与(AmazonSSMManagedInstanceCore) - 下記をユーザーデータに貼り付けて起動
#!/bin/bash
# install docker & jq
yum install -y docker jq
systemctl enable docker
# 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
chmod +x /usr/local/bin/docker-compose
# make docker-compose.yml
cat << _EOF_ > /home/ec2-user/docker-compose.yml
version: '2'
services:
rocketchat:
image: rocketchat/rocket.chat:latest
command: >
bash -c
"for i in `seq -s " " 1 30`; do
node main.js &&
s=$$? && break || s=$$?;
echo \"Tried $$i times. Waiting 5 secs...\";
sleep 5;
done; (exit $$s)"
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
depends_on:
- mongo
- 80:3000
mongo:
image: mongo:4.0
restart: unless-stopped
volumes:
- ./data/db:/data/db
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
mongo-init-replica:
image: mongo:4.0
command: >
bash -c
"for i in `seq -s " " 1 30`; do
mongo mongo/rocketchat --eval \"
rs.initiate({
_id: 'rs0',
members: [ { _id: 0, host: 'localhost:27017' } ]})\" &&
s=$$? && break || s=$$?;
echo \"Tried $$i times. Waiting 5 secs...\";
sleep 5;
done; (exit $$s)"
depends_on:
- mongo
_EOF_
# add permission
gpasswd -a ec2-user docker
# run
systemctl start docker
cd /home/ec2-user
docker-compose up -d
4.Rocket.Chat にアクセス(上記のユーザデータだと TCP:80)して初期設定をする
◆ 初期セットアップ
- 最初の [管理者情報] は、後で使うのでメモっておきます
- 次の [組織情報] は、全部空欄で OK です
- 次の [サーバー情報] は、種類はプライベート、電子メールはいいえにしておきます
- 次の [サーバーを登録する] は、スタンドアローン利用を選んでおきます
◆ 匿名ユーザでのアクセスを強制し、個人情報を登録できないようにする
- 匿名ログインの許可([管理] → [アカウント] → [匿名での読み取りを許可] & [匿名での書き込みを許可])
- 匿名ユーザに DM 権限の付与([管理] → [権限] → [Anonymous] を [User] と同じにする)。大規模セミナーの時はDMは禁止のままにする
- 新規アカウントの作成禁止([管理] → [アカウント] → [登録] → [登録フォームの選択] を無効)。管理者用だけ作っておく
◆ トップページの表示を変更してユーザフレンドリーにする
- [管理] → [レイアウト] → [コンテンツ]
<p>セミナー QA部屋へようこそ!</p>
<p>画面左側(←)の"#general"をクリックし、
"または匿名で話す"ボタンをクリックして、好きなお名前を設定してください。</p>
以上で、最低限動作するための環境構築は完了です!ファイルダウンロード機能を使う場合は、以下も設定します。
◆ ファイルダウンロード時の URL 指定
- 「管理] → [全般] → [サイト URL] に正しい URL を入力(これをしないとダウンロード URL がおかしくなる)
実際にイベントで使用した後で、チャットのログを残しておきたいこともあります。その場合は、以下の操作を行ってください。
◆ チャットログを保存する
- データは mongo db に保存されるので、そこから吸い出せばよい
sudo docker exec -it ec2-user_mongo_1 bash
mongo
use rocketchat
db.rocketchat_message.find().forEach(printjson)
もし環境をリセットしたい場合は以下手順を実施します。
- EC2 を再作成する場合は、EC2 をシャットダウンします。再作成時にはカスタム AMI を指定すれば初期設定済みのインスタンスが立ち上がります
イベント毎にコンテナを down/up する場合は、以下のコマンドを実行します。
docker-compose down
docker-compose up -d
まとめ
いかがでしたでしょうか。
一度設定してしまえば、プライベートでも会社のイベント運営時にも使用できます。
勉強会だったり、オンラインゲームでやり取りする時などは特に便利ですね!
ここまで読んでくださってありがとうございました!