f4エンジニアブログ

f4samuraiの中の人たちが書いています

誰でも爆速でチャットツールを立ち上げる方法

はじめに

はじめまして!サーバサイドエンジニアの酒井です。

僕は4ヵ月前(2023年10月)にf4samuraiに入社しました。

前職はシステムインテグレーターAWSの講師や営業、クラウド環境の設計/構築/運用といった業務を行っていたのですが「ゲーム開発に挑戦したい!」という思いで転職してきました。

今回は社内向けに「Rocket.Chat」の紹介記事を公開したところ反響があったのでエンジニアブログでも紹介します。

www.rocket.chat

Rocket.Chatのご紹介

業務で使用するチャットツールとしては他にChatwork,Slack,Teamsなどが有名だと思います。これらのチャットサービスはどちらかというと社内向けツールで、その場限りの利用をすることは少ないかなと思います。また不特定多数のユーザが利用するチャットとしてはDiscordが有名ですが、アカウント登録やチャットへの招待が必要です。

 

Rocket.Chatは上記チャットツールと違う点があります。それはユーザがアカウントの登録をする必要がなく、匿名で利用できることです。また、「究極のオープンソースWebチャットプラットフォーム」と謳っています。オープンソースなので無償で使うことができ、クラウド環境とオンプレ環境どちらでもセットアップして使うことができます。

 

匿名ユーザで質問ができますので、イベント時のQAツールとしてはもってこいの代物です。スマホから使えてメールアドレスなども不要です。また、問題のある発言は管理側で消すこともブロックすることも可能です。AWS上に環境構築したとすると、料金はAWS利用料だけで済みます。

Rocket.Chatの環境構築

実際にRocketChatを使えるようにするための手順を解説します。ここでは、AWS上に環境を構築することを想定しています。

  1. AWSのアカウントを用意(EC2を扱えるIAMユーザー)
  2. Amazon Linux2 インスタンスの作成
    インスタンスタイプ:t3.large あたり(あまり小さいサイズだと動作が不安定かも)。個人的にm6.large推奨。1000名もこれで大丈夫
    ・AMIは「Amazon Linux2」を選択(2023だとコマンド変えないとダメかも)
    ・パブリックアクセスが可能なものにする(ELB の配下に置いたり EIP をつけたり...)HTTPS 対応とするために ELB 配下とするのが楽でよいかと思います
    ・SSM 対応の IAM Role の付与(AmazonSSMManagedInstanceCore)
  3. 下記をユーザーデータに貼り付けて起動

#!/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

    ports:

      - 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

まとめ

いかがでしたでしょうか。


一度設定してしまえば、プライベートでも会社のイベント運営時にも使用できます。
勉強会だったり、オンラインゲームでやり取りする時などは特に便利ですね!

 

ここまで読んでくださってありがとうございました!