Edited at

CentOS7.5 に Rocket.Chatをインストール


Rocket.Chatとは?

SlackクローンのOSS。ローカルで動作可能

クラウド使えない環境に生きるエンジニアが

ローカルだから!!って大手を振ってチャットを

使えるようになるありがたいツール。

Windowsアプリやモバイルアプリも出ており使い勝手は良い。

Webhookも使えるのでスクリプト等で他のツールと連携も可能。

[root@RocketChat server]# cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)
[root@RocketChat server]#

のOS入れて以下の手順でver.固定してyum updateを行った環境で実施。


CentOS 7.5にver.固定


固定したいver.指定

echo 7.5.1804 > /etc/yum/vars/releasever

vault-repositoryがあるver.を指定すること。

2019/02/21時点では 7.5.1804が最新のvault。


該当ver.のvault-repositoryに変更

sedコマンドで置換する。

sed -i".org" -e "s/^mirror/#mirror/" \

-e "s/^#baseurl/baseurl/g" \
-e "s/mirror.centos/vault.centos/g" \
/etc/yum.repos.d/CentOS-Base.repo

書き換え前のファイルも-iオプションで.org末尾に追加された状態で残るので

戻したいときはそっちに置き換えればOK。


[root@RocketChat server]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo epel-testing.repo mongodb-org-3.6.repo
CentOS-Base.repo.org CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo epel.repo nodesource-el7.repo
[root@RocketChat server]#


ここからは公式手順 のまま。

一部パラメータを環境に合わせて変更したのみ。


必要パッケージインストール


MongoDBリポトリ追加

MongoDB 3.6を入れるためのリポジトリをechoで追加。

[root@RocketChat ~]# echo -e "[mongodb-org-3.6]\nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.6/x86_64/\ngpgcheck=1\nenabled=1\ngpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc" | sudo tee /etc/yum.repos.d/mongodb-org-3.6.repo

[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
[root@RocketChat ~]#


Node.js 8.xをパッケージマネージャーで入れるようにする

curlコマンド追加してNode.js 8.xのソースを取得。

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


Repositoryを追加してyumでinstall


yumで入れれるものを入れる

[root@RocketChat ~]# sudo yum install -y epel-release && sudo yum install -y GraphicsMagick

[root@RocketChat ~]# sudo yum install -y gcc-c++ make mongodb-org nodejs


nodejs ver.8.11.3を入れる

指定ver.が細かく書かれてるので指定どおり入れる。

[root@RocketChat ~]# sudo npm install -g inherits n && sudo n 8.11.3

ここがズレるとあとの工程が大変なのかも?


Rocket.Chatをインストール


latestを取ってくる

[root@RocketChat ~]# curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz


パッケージ展開

/tmpへ解凍

tar -xzf /tmp/rocket.chat.tgz -C /tmp


npmでインストール

なんかwarning出るけど無視して先に行っても問題なかったので、

参考の為に実施時の結果も添付。

取ってきて展開したファイルの中に入ってnpm install実行

[root@RocketChat ~]# cd /tmp/bundle/programs/server && npm install

npm WARN notice [SECURITY] hoek has the following vulnerability: 1 moderate. Go here for more details: https://nodesecurity.io/advisories?search=hoek&version=2.16.3 - Run `npm i npm@latest -g` to upgrade your npm version, and then `npm audit` to get more info.
npm WARN deprecated boom@2.10.1: This version is no longer maintained. Please upgrade to the latest version.
npm WARN deprecated cryptiles@2.0.5: This version is no longer maintained. Please upgrade to the latest version.
npm WARN deprecated hoek@2.16.3: This version is no longer maintained. Please upgrade to the latest version.

> fibers@2.0.0 install /tmp/bundle/programs/server/node_modules/fibers
> node build.js || nodejs build.js

`linux-x64-57` exists; testing
Problem with the binary; manual build incoming
make: ディレクトリ `/tmp/bundle/programs/server/node_modules/fibers/build' に入ります
CXX(target) Release/obj.target/fibers/src/fibers.o
CXX(target) Release/obj.target/fibers/src/coroutine.o
CC(target) Release/obj.target/fibers/src/libcoro/coro.o
SOLINK_MODULE(target) Release/obj.target/fibers.node
COPY Release/fibers.node
make: ディレクトリ `/tmp/bundle/programs/server/node_modules/fibers/build'
から出ます
Installed in `/tmp/bundle/programs/server/node_modules/fibers/bin/linux-x64-57/fibers.node`
npm WARN lifecycle meteor-dev-bundle@~install: cannot run in wd %s %s (wd=%s) meteor-dev-bundle@ node npm-rebuild.js /tmp/bundle/programs/server
added 150 packages in 28.187s
[root@RocketChat server]#

公式では/opt/を使っているが、今回は/usr/local/binを使う。

[root@RocketChat server]# sudo mv /tmp/bundle /usr/local/bin/Rocket.Chat


設定を実施


ユーザ作成/権限付与

RocketChatを動かすrocketchatユーザを作成して、

インストールしたファイルのpermission変更。

[root@RocketChat server]# sudo useradd -M rocketchat && sudo usermod -L rocketchat

[root@RocketChat server]# sudo chown -R rocketchat:rocketchat /usr/local/bin/Rocket.Chat


サービスファイルの作成

systemctlコマンドで叩くサービスファイルを作成。

echo -e "[Unit]\nDescription=The Rocket.Chat server\nAfter=network.target remote-fs.target nss-lookup.target nginx.target mongod.target\n[Service]\nExecStart=/usr/local/bin/node /usr/local/bin/Rocket.Chat/main.js\nStandardOutput=syslog\nStandardError=syslog\nSyslogIdentifier=rocketchat\nUser=rocketchat\nEnvironment=LD_PRELOAD=/usr/local/bin/Rocket.Chat/programs/server/npm/node_modules/sharp/vendor/lib/libz.so NODE_ENV=production MONGO_URL=mongodb://localhost:27017/rocketchat ROOT_URL=http://<ホスト名 or IPアドレス指定>:3000/ PORT=3000\n[Install]\nWantedBy=multi-user.target" | sudo tee /usr/lib/systemd/system/rocketchat.service

作成されたファイルは/usr/lib/systemd/system/rocketchat.service

[root@RocketChat server]# cat /usr/lib/systemd/system/rocketchat.service

[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target
[Service]
ExecStart=/usr/local/bin/node /usr/local/bin/Rocket.Chat/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat
Environment=LD_PRELOAD=/usr/local/bin/Rocket.Chat/programs/server/npm/node_modules/sharp/vendor/lib/libz.so NODE_ENV=production MONGO_URL=mongodb://localhost:27017/rocketchat ROOT_URL=http://<サーバーのホスト名or IPアドレス>:3000/ PORT=3000
[Install]
WantedBy=multi-user.target
[root@RocketChat server]#


  • MongoDBの設定を変更しているなら以下のように追記して

    設定しろと書かれているが今回はMongoDBの設定はイジらないので無視。


MONGO_URL=mongodb://localhost:27017/rocketchat

ROOT_URL=http://your-host-name.com-as-accessed-from-internet:3000

PORT=3000



MongoDBとRocketChatの起動

enable指定して起動

[root@RocketChat server]# sudo systemctl enable mongod && sudo systemctl start mongod

[root@RocketChat server]# sudo systemctl enable rocketchat && sudo systemctl start rocketchat
Created symlink from /etc/systemd/system/multi-user.target.wants/rocketchat.service to /usr/lib/systemd/system/rocketchat.service.
[root@RocketChat server]#

起動確認。

[root@RocketChat server]# systemctl status mongod.service

● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since 木 2019-02-21 23:31:10 JST; 22s ago
Docs: https://docs.mongodb.org/manual
Main PID: 12392 (mongod)
CGroup: /system.slice/mongod.service
mq12392 /usr/bin/mongod -f /etc/mongod.conf

2月 21 23:31:09 RocketChat systemd[1]: Starting High-performance, schema-free document-oriented database...
2月 21 23:31:09 RocketChat mongod[12389]: about to fork child process, waiting until server is ready for connections.
2月 21 23:31:09 RocketChat mongod[12389]: forked process: 12392
2月 21 23:31:10 RocketChat systemd[1]: Started High-performance, schema-free document-oriented database.
[root@RocketChat server]#
[root@RocketChat server]# systemctl status rocketchat.service
● rocketchat.service - The Rocket.Chat server
Loaded: loaded (/usr/lib/systemd/system/rocketchat.service; enabled; vendor preset: disabled)
Active: active (running) since 木 2019-02-21 23:31:20 JST; 18s ago
Main PID: 12442 (node)
CGroup: /system.slice/rocketchat.service
mq12442 /usr/local/bin/node /usr/local/bin/Rocket.Chat/main.js

2月 21 23:31:20 RocketChat systemd[1]: Starting The Rocket.Chat server...
2月 21 23:31:30 RocketChat rocketchat[12442]: Updating process.env.MAIL_URL
2月 21 23:31:30 RocketChat rocketchat[12442]: LocalStore: store created at
2月 21 23:31:30 RocketChat rocketchat[12442]: LocalStore: store created at
2月 21 23:31:30 RocketChat rocketchat[12442]: LocalStore: store created at
2月 21 23:31:30 RocketChat rocketchat[12442]: Setting default file store to GridFS
2月 21 23:31:30 RocketChat rocketchat[12442]: Starting Email Intercepter...
2月 21 23:31:37 RocketChat rocketchat[12442]: Warning: connect.session() MemoryStore is not
2月 21 23:31:37 RocketChat rocketchat[12442]: designed for a production environment, as it will leak
2月 21 23:31:37 RocketChat rocketchat[12442]: memory, and will not scale past a single process.
[root@RocketChat server]#

どちらもActive: active (running)なので問題無さそう。


Firewall穴あけ

[root@RocketChat server]# sudo firewall-cmd --permanent --add-port=3000/tcp

success
[root@RocketChat server]# sudo systemctl reload firewalld

設定時に指定したhttp://<ホスト名 or IPアドレス>:3000にアクセスしたら

以下のような初期セットアップウィザードが出る。

20190221_233848_0000.png

憧れ?のSlack(モドキ)が完全ローカルで実現できます!!


使用前の注意/知っておくと良いこと

GUIで大体の設定が可能。

管理画面へのアクセス.png

管理者権限でログインすると左のサイドバーの上部。

赤線で囲った部分から管理画面の呼び出しができる。


ファイルアップロード先の指定

管理ファイルアップロード スクショには写ってないけど左の下の方。

ファイルアップロード先.png

ローカルで使用したいならアップロード先に注意。

デフォルトはGridFSになっているはずなので問題ないと思うが念の為に確認を。

GridFSならバックアップ時にメッセージもファイルもdbdumpで全部引っこ抜けて楽。


Markdownのパーサーの指定

メッセージの中にあり。

デフォルトのものだと微妙にHackMDやGrowi等と違うためMarkedに変更。

お好きな方でどうぞ。

Markdownのパーサー指定.png


カスタム絵文字の追加

思う存分、治安を悪くすれば良いと思います。

20190222_001450_0000.png

定型文なんかスタンプにしておくと文章打たなくて楽。


WebHookの設定

サービス連携 → 右上の 新しいサービス連携から作成可能。

20190222_001502_0000.png


Slackからの移行

インポートから各種形式のデータが入れれる模様。

試したことは無いので上手くいくかは知りません。

20190222_001522_0000.png


機能の追加

アプリからMarketplaceへアクセスでき公開されている

追加機能のインストールが可能。

20190222_001547_0000.png

あまり数は多くないですがPollなんかはあると便利かも?

/poll "質問文" "回答1" "回答2" "回答3" "回答3"

が下のようになる。

20190222_003305_0000.png


バックアップ/リストア

MongoDB使ってるのでパラメータ変えてGrowiの手順と同じモノが使えます。

- Growiのバックアップとリストア

そのうち、ちゃんとRocketChat用の記事も書くかも?


使い方はSlackが使えればほぼ同じです。

ピンどめ、スターもあります。

スレッド機能が無いのは賛否両論ありそう。



参考資料1:公式ドキュメント Rocket.Chat CentOS