新型コロナウイルスの影響により、社内でもテレワーク化が一気に進みました。
しかし、テレワークになると「ちょっと聞きたいこと」が発生したときに近くの席へ行って口頭で話すことができず、電話やメールでのやりとりに依存してしまいます。メールでは履歴が追いにくく、複数人でのスピーディな議論にはかなり不向きです。
かといって、相手の状況が見えない中でいきなりTeamsやZoomなどのWEB会議に招待するのも気が引けますよね。
そこで手軽な「チャット環境」を構築しようと考案したのですが、社内のセキュリティ規定により、外部のクラウド型チャットツールは利用できませんでした。
……という建前(?)のもと、今回はオンプレミス環境に構築できる高機能オープンソースチャット「Rocket.Chat」を導入することにしました!
本記事では、CentOS 7およびCentOS 8環境におけるDockerのインストールから、Rocket.Chatの初期設定までの手順を詳しく解説します。
1. 構築するサーバー情報
今回は以下の2つの環境(どちらも最小構成インストール)で検証を行いました。
- CentOS 7:CentOS Linux release 7.7.1908 (Core) / SELinux:Enforcing(有効)
- CentOS 8:CentOS Linux release 8.1.1911 (Core) / SELinux:Enforcing(有効)
2. Dockerのインストール(OS別)
CentOS 7とCentOS 8では、Dockerのインストール手順が少し異なります。お使いのOSに合わせて実行してください。
【CentOS 7の場合】
① yum-utilsのインストール
コマンドでリポジトリを追加できるよう、まずは yum-utils をインストールします。
sudo yum install yum-utils② Dockerリポジトリをyumに登録
$ sudo yum-config-manager --add-repo [https://download.docker.com/linux/centos/docker-ce.repo](https://download.docker.com/linux/centos/docker-ce.repo)③ Dockerのインストール
$ sudo yum install docker-ce④ Dockerの起動と自動起動の有効化
$ sudo systemctl start docker
$ sudo systemctl enable dockerこれでCentOS 7でのDockerインストールは完了です。
【CentOS 8の場合】
CentOS 8からはコンテナツールとして podman が標準搭載されており、Dockerとは競合関係になります。そのため、あらかじめ podman を削除しておく必要があります。
① podmanの削除
$ sudo dnf remove podman② Dockerリポジトリをdnfに登録
yum と違い、dnf は標準コマンドのままリポジトリの追加が可能です。
$ sudo dnf config-manager --add-repo [https://download.docker.com/linux/centos/docker-ce.repo](https://download.docker.com/linux/centos/docker-ce.repo)③ Dockerのインストール(--nobest オプション必須)
そのまま sudo dnf install docker-ce を実行すると、containerd.io のバージョンが古いためエラー弾かれてしまいます。 そのため、--nobest オプションを付与して、インストール可能な直近のバージョンを指定してインストールします。 (※containerd.io を個別に最新版へアップデートしてからインストールする方法もあります)
$ sudo dnf install docker-ce --nobest④ Dockerの起動と自動起動の有効化
CentOS 7と同様に、起動と自動起動設定を行います。
$ sudo systemctl start docker
$ sudo systemctl enable dockerこれでCentOS 8でのDockerインストールは完了です。
3. 【共通】Docker Composeのインストール
複数のコンテナを一元管理するため、Docker Composeをインストールします。 (※本記事ではバージョン 1.25.5 をインストールしています。最新版は公式リリースベージで確認してください)
$ sudo curl -L [https://github.com/docker/compose/releases/download/1.25.5/docker-compose-](https://github.com/docker/compose/releases/download/1.25.5/docker-compose-)`uname -s`-`uname -m` -o /usr/local/bin/docker-composeダウンロードした実行ファイルに権限を付与します。
$ sudo chmod +x /usr/local/bin/docker-compose4. 【共通】Dockerイメージの取得と構築準備
ここからは、Rocket.Chat本体と、データベースとなるMongoDBのイメージを取得して構築していきます。
① DockerイメージのPull
# MongoDBの取得
$ sudo docker pull mongo:4.0
# Rocket.Chatの取得
$ sudo docker pull rocketchat/rocket.chat② docker-compose.ymlの配置と起動
Rocket.Chatの構成ファイルを作成します。 ※Docker Composeを /usr/local/bin に配置したため、パスを通していない場合はフルパス指定が必要になります。手っ取り早く実行するため、今回は root 権限に切り替えて作業します。
$ sudo su -
# mkdir -p /var/www/rocket.chat
# cd /var/www/rocket.chatRocket.Chat公式から docker-compose.yml をダウンロードします。
# curl -L [https://raw.githubusercontent.com/RocketChat/Rocket.Chat/develop/docker-compose.yml](https://raw.githubusercontent.com/RocketChat/Rocket.Chat/develop/docker-compose.yml) -o docker-compose.yml③ コンテナの起動
順番にコンテナをバックグラウンド(-d)で立ち上げていきます。
# 1. MongoDBの起動
# docker-compose up -d mongo
# 2. レプリカセットの初期化処理
# docker-compose up -d mongo-init-replica
# 3. Rocket.Chat本体の起動
# docker-compose up -d rocketchat④ 起動ステータスの確認
docker-compose ps コマンドで、各コンテナが Up 状態(起動中)になっていることを確認します。
# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------
rocketchat_mongo-init-replica_1 docker-entrypoint.sh bash ... Exit 0
rocketchat_mongo_1 docker-entrypoint.sh mongo ... Up 27017/tcp
rocketchat_rocketchat_1 bash -c for i in `seq 1 30 ... Up 0.0.0.0:3000->3000/tcpこれでサーバー側の構築作業は完了です!
5. Rocket.Chatの初期設定(GUI)
ブラウザから http://【サーバーのIPアドレス】:3000/ にアクセスすると、Rocket.Chatの初期設定(管理者登録)画面が表示されます。
【要注意】ハマりやすいポイント
・全角入力エラー:ユーザー名に全角文字を入力して「次へ」を押すと原因不明のエラーが発生します。その場合は画面をリロードして最初から半角英数字で入力し直してください。
・SMTP設定のフリーズ:メール送信機能(SMTP)が設定されていないサーバーの場合、「次へ」を押したあとに<strong>しばらく画面が固まります</strong>。メール送信処理がタイムアウトして失敗するまで待つか、一度リロードしてログインし直してください。</p>

組織情報を入力します(任意なのでそのままでも可)。

サイト名とサーバーの種類を設定します。 社内のオンプレミス環境のみで運用する場合は、サーバーの種類を「プライベート」に設定します。また、メールサーバーと連携させない場合は、「Auto opt in new users for Two Factor via Email(二段階認証)」を「いいえ」にしておきます。

外部(Rocket.Chat Cloud)と連携させずに完全に独立した環境として構築する場合は、「次を自分で実施し、スタンドアローン利用する」を選択します。

以下の「ワークスペースに行く」画面が表示されれば、初期設定はすべて完了です!

実際にチャンネルを作成して投稿テストをしてみましたが、UIも洗練されていて動作もスムーズ。全く問題なく使えそうです。

最後に
CentOSをインストールしたばかりのほぼ素の状態から、特に複雑な設定をいじることなくDockerとRocket.Chatを立ち上げることができました。
なにより、通常ならハマると抜け出すのに一苦労する**「SELinux」がEnforcing(有効)になったままの環境でも、権限エラーに悩まされることなくサクサクとインストールできた**ことには驚きです。Dockerの強みですね。
セキュリティ上の理由でクラウドツールが導入できずにお困りの方は、ぜひオンプレミス版Rocket.Chatの構築を試してみてください!