技術・開発

【CentOS 7/8】Dockerでオンプレ版Rocket.Chatを構築!インストールから初期設定まで

2020年4月20日

新型コロナウイルスの影響により、社内でもテレワーク化が一気に進みました。

しかし、テレワークになると「ちょっと聞きたいこと」が発生したときに近くの席へ行って口頭で話すことができず、電話やメールでのやりとりに依存してしまいます。メールでは履歴が追いにくく、複数人でのスピーディな議論にはかなり不向きです。
かといって、相手の状況が見えない中でいきなり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-compose

4. 【共通】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.chat

Rocket.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>

Rocket.Chat 管理者ユーザー作成画面

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

Rocket.Chat 組織情報入力画面

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

Rocket.Chat サーバー情報設定画面

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

Rocket.Chat スタンドアローン設定画面

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

Rocket.Chat 初期設定完了画面

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

Rocket.Chat チャットテスト画面

最後に

CentOSをインストールしたばかりのほぼ素の状態から、特に複雑な設定をいじることなくDockerとRocket.Chatを立ち上げることができました。

なにより、通常ならハマると抜け出すのに一苦労する**「SELinux」がEnforcing(有効)になったままの環境でも、権限エラーに悩まされることなくサクサクとインストールできた**ことには驚きです。Dockerの強みですね。

セキュリティ上の理由でクラウドツールが導入できずにお困りの方は、ぜひオンプレミス版Rocket.Chatの構築を試してみてください!

-技術・開発
-, , , , , , , ,