はじめに
Rocket.Chatとは、オープンソースのビジネスチャットシステムです。
Node.js(JavaScript)とMeteorフレームワークで作られています。
MIT Licenseで、GitHubにソースコードが公開されています。
SaaS(クラウド)にも対応しています。
そちらは、現時点で2 USD~です。
オンプレミス(自前サーバーで運用)の場合、MIT Licenseですので、無料です。
ということで、さっそく、自前のCentOSサーバーにインストールしてみようと思います。
ソースコードを触る可能性がゼロではないため、Dockerを使わず、ビルドチャレンジになります。
インストール環境:CentOS Linux release 8.3.2011 (VMware上、インターネット接続あり)
インストール準備
root権限で作業していますので、全てsudoは省略しています。
アップデート可能なパッケージを調査します。
# 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の説明はここでは割愛します。
バージョン確認
バージョンを確認します。
# mongo -version
MongoDB shell version v4.2.13
# node -v
v12.22.1
# npm -v
6.14.12
# npm update -g
# npm -v
6.14.13
# yarn -v
1.22.5
Rocket.Chat インストール
サードパーティ製のリポジトリepel-releaseと画像処理ライブラリGraphicsMagickをインストールします。
# yum install -y epel-release
# yum install -y GraphicsMagick
Rocket.Chatをインストールします。
# curl -L https://releases.rocket.chat/latest/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 へブラウザでアクセス
最初は、管理者アカウントの登録画面になります。
できました!
Next.js next-sitemapで静的Webサイトのサイトマップを作成itc-engineering-blog.netlify.app/blogs/next-sitemap
Native Messagingのexeを試作してみた(Chrome,Firefox,Edge拡張機能) itc-engineering-blog.netlify.app/blogs/h06vi6tnar9i
#blog_itc
Raspberry Pi 4に温湿度気圧センサBME280を取り付けてデータをLCD 1602Aに表示する itc-engineering-blog.netlify.app/blogs/pelfuqnq5o
#blog_itc
Jamstackなこのブログの公開方法(Next.js,microCMS,GitHub,Netlify) itc-engineering-blog.netlify.app/blogs/efxq_5j84z
#blog_itc
技術ブログ「ITC Engineering Blog」も公開しました。itc-engineering-blog.netlify.app
ブログの方もソースコードを公開しています。github.com/itc-lab/itc-blog
コーポレートサイトを公開しました。itccorporation.jp
ソースコードも公開しました。github.com/itc-lab/itccor...