1. 記事一覧 >
  2. ブログ記事
category logo

CentOS8にRocket.Chatをインストール

(更新) (公開)

はじめに

Rocket.Chatとは、オープンソースのビジネスチャットシステムです。
Node.js(JavaScript)とMeteorフレームワークで作られています。
MIT Licenseで、GitHubにソースコードが公開されています。

SaaS(クラウド)にも対応しています。
そちらは、現時点で2 USD~です。
オンプレミス(自前サーバーで運用)の場合、MIT Licenseですので、無料です。
ということで、さっそく、自前のCentOSサーバーにインストールしてみようと思います。
ソースコードを触る可能性がゼロではないため、Dockerを使わず、ビルドチャレンジになります。
インストール環境:CentOS Linux release 8.3.2011 (VMware上、インターネット接続あり)


【2023年11月更新】

この手順では、

node v14 からしか対応しなくなったため、

Rocket.Chat v3.13.3(ブログ投稿当時のバージョン)をインストールします。

2023年11月現在、v6.4.5まで来ています。


インストール準備

root権限で作業していますので、全てsudoは省略しています。


リポジトリを書き換えます。

# sed -i -e 's/^mirrorlist/#mirrorlist/g' -e 's/^#baseurl=http:\/\/mirror/baseurl=http:\/\/vault/g' /etc/yum.repos.d/CentOS-*repo

【2023年11月更新】

リポジトリが存在せず、

yum -y check-update でエラーになることが確認されたため、

上記手順を追加しました。


アップデート可能なパッケージを調査します。

# yum -y check-update

たくさん表示されたので、yum updateを行いました。

# yum update

mongodbのyumリポジトリ情報を追加します。

# vi /etc/yum.repos.d/mongodb-org.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

node, mongodb インストール

curlをインストールして、そのままNode.jsのリポジトリをインストールします。

# yum install -y curl && curl -sL https://rpm.nodesource.com/setup_12.x | bash -

curl -sL https://rpm.nodesource.com/setup_12.x | bash -

の意味ですが、

まず、

curl -sL https://rpm.nodesource.com/setup_12.x から得られるのは、シェルスクリプトの内容です。

これがパイプを介して、 - に渡り、- (標準出力内容)がシェルスクリプトファイルのような役割になり、

bash [シェルスクリプト]

と実行しています。

# curl -sL https://rpm.nodesource.com/setup_12.x > hoge.sh

# bash hoge.sh

と同じ意味です。


curlのオプションの意味は、以下です。

-L : レスポンスにリダイレクトの指示があったらリダイレクトする。

-s : エラーやプログレス表示をしない(取りに行った情報以外何も表示しない。)

https://rpm.nodesource.com/setup_12.x

から得られるシェルスクリプトは、けっこう長いです。

#!/bin/bash


# Discussion, issues and change requests at:

# https://github.com/nodesource/distributions

#

# Script to install the NodeSource Node.js 12.x repo onto an

# Enterprise Linux or Fedora Core based system.

#

# Run as root or insert `sudo -E` before `bash`:

#

(略)


gcc-c++、make、mongodb(クライアント、サーバー)、node、npm をインストールします。

# yum install -y gcc-c++ make mongodb-org nodejs

yarnをインストールします。※特に必須ではありませんが、一応。

# curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo
# yum install -y yarn

yarnはnpmの互換ツールです。yarn,npmの説明はここでは割愛します。


バージョン確認

バージョンを確認します。

【2023年11月更新】

2023年11月現在確認したバージョンです。

# mongo -version
MongoDB shell version v4.2.24
git version: 5e4ec1d24431fcdd28b579a024c5c801b8cde4e2
OpenSSL version: OpenSSL 1.1.1k  FIPS 25 Mar 2021
allocator: tcmalloc
modules: none
build environment:
    distmod: rhel80
    distarch: x86_64
    target_arch: x86_64

# node -v
v12.22.12

# npm -v
6.14.16

# npm -v
6.14.18

# yarn -v
1.22.19

Rocket.Chat インストール

サードパーティ製のリポジトリepel-releaseと画像処理ライブラリGraphicsMagickをインストールします。

# yum install -y epel-release
# yum install -y GraphicsMagick

Rocket.Chatをインストールします。

【2023年11月更新】

ブログ投稿当時は、

# curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz

という手順でしたが、

Rocket.Chat v3.13.3(ブログ投稿当時のバージョン)をインストールするため、修正しました。

# curl -L https://releases.rocket.chat/3.13.3/download -o /tmp/rocket.chat.tgz
# tar -xzf /tmp/rocket.chat.tgz -C /tmp
# cd /tmp/bundle/programs/server && npm install
# mv /tmp/bundle /opt/Rocket.Chat
# useradd -M rocketchat && usermod -L rocketchat
# chown -R rocketchat:rocketchat /opt/Rocket.Chat

useraddコマンド:

-M:--no-create-homeの省略形。ユーザーのホームディレクトリを作成しない。

-L:ユーザーをロックし、使用できなくする。


mongodb, Rocket.Chat 起動

# vi /lib/systemd/system/rocketchat.service
[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.service mongod.service
[Service]
ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01 ROOT_URL=http://localhost:3000/ PORT=3000
[Install]
WantedBy=multi-user.target

nodeコマンドの位置を確認します。

# which node
/usr/bin/node

node [main.jsファイル]で起動するのですが、nodeの位置が違うため、修正します。
また、今回は、ブラウザから http://chat.itccorporation.jp:3000 でアクセスしたいため、ROOT_URLを修正します。

# vi /usr/lib/systemd/system/rocketchat.service

ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js

ExecStart=/usr/bin/node /opt/Rocket.Chat/main.js

ROOT_URL=http://localhost:3000

ROOT_URL=http://chat.itccorporation.jp:3000


# sed -i "s/^#replication:/replication:\n  replSetName: rs01/" /etc/mongod.conf

MongoDB の レプリカセット(レプリケーション)を設定しています。ただし、プライマリ1台です。何でこれを行っているかと言いますと、Rocket.Chatの公式サイトには、以下の説明があります。


「Rocket.Chat uses the MongoDB replica set to improve performance via Meteor Oplog tailing.」

⇒Meteor Oplog tailingにより、パフォーマンスを向上させるため。


以上。


で先に進もうかと思いましたが、一つずつ、紐解いてみました。


Oplog = オペレーションログ(プライマリで起きたことをセカンダリに伝える情報)PostgreSQLのWALみたいなものです。(あくまでイメージ)


Meteor = フレームワークですが、ここでは、Oplogを監視する仕組み


tailing = tail -f access_log のようにずっと見ていること


データの差分を把握するよりもOplogをリアルタイム監視した方がレスポンスが速いからこの設定が必要というわけですね。


公式サイトのCentOS7の手順によりますと、

# sed -i "s/^# engine:/ engine: mmapv1/" /etc/mongod.conf

の手順で、ストレージエンジンをmmapv1にする手順がありますが、これは不要でした。

MMAPv1 ストレージエンジンは、メモリとディスクを駆使して、データの読み書きを担当するプログラムです。MongoDB 4.2から廃止されて、WiredTigerストレージエンジンになりました。WiredTiger(標準設定)の方が優れているようです。


# systemctl enable mongod
# systemctl start mongod
# mongo --eval "printjson(rs.initiate())"
MongoDB shell version v4.2.13
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("dc0e6888-0f2f-4135-93c4-29d257deac42") }
MongoDB server version: 4.2.13
{
        "info2" : "no configuration specified. Using a default configuration for the set",
        "me" : "127.0.0.1:27017",
        "ok" : 1
}

"ok" : 1 となっていれば、問題無しです。


# systemctl enable rocketchat
# systemctl start rocketchat

ブラウザアクセス

地味にハマりますが、ファイアウォール有りで、外から見る場合、3000ポートを開ける必要があります。

# firewall-cmd --zone=public --add-port=3000/tcp --permanent
# firewall-cmd --reload

http://chat.itccorporation.jp:3000 へブラウザでアクセス


最初は、管理者アカウントの登録画面になります。

""


できました!

loading...