オンプレのRedHatへRocket.Chatをインストールする

# はじめに
Rocket.Chatをオンプレ（インターネット非接続）のサーバにインストールする必要があり、そこそこ面倒だったのでやったことをまとめました。
※Dockerは使用していません

## [Rocket.Chat](https://rocket.chat/)について
SlackライクなOSSのコミュニケーションツール。
サーバさえ構築すればイントラネットでも使えます。
ただし、依存するツールやライブラリを別途インストールする必要があるのでオフラインだと環境構築がやや__面倒__。

##環境
### OS
* Red Hat Enterprise Linux Server release 7.6

### 導入ソフト
* Rocket.Chat 3.0.0
 * Mongodb 4.0.9
 * NodeJS 12.14.0

# やったこと
基本的には公式ページの[手順](https://rocket.chat/docs/installation/manual-installation/centos/)に従いインスト―ル。
yumやらnpmで導入している依存関係にあるファイルやライブラリはインターネットに接続した端末でローカルリポジトリ化するなどしてオンプレ環境に持ち込んで対応しました。

## インターネットに接続された端末での作業
下記の手順で/tmp/RC以下に必要なファイルを配置する。

### yumで必要なファイルをとってくる
ローカルリポジトリ作成用に必要なパッケージをダウンロード

```
$ sudo yum install yum-plugin-downloadonly

$ sudo yum update --downloadonly --downloaddir=/tmp/RC/yum　-y
$ sudo yum install --downloadonly --downloaddir=/tmp/RC/yum nodejs -y
$ sudo yum install --downloadonly --downloaddir=/tmp/RC/yum gcc-c++ -y
$ sudo yum install --downloadonly --downloaddir=/tmp/RC/yum GraphicsMagick -y
$ sudo yum install --downloadonly --downloaddir=/tmp/RC/yum mongodb-org-server -y
$ sudo yum install --downloadonly --downloaddir=/tmp/RC/yum mongodb-org -y
```
ローカルリポジトリの作成。

```
$ sudo yum install createrepo

$ createrepo --update /tmp/RC/yum
```
これでローカルリポジトリの準備は完了。

### nodeJS 12.14.0の取得
curlコマンドでファイルの取得。

```
$ curl -L https://nodejs.org/download/release/v12.14.0/node-v12.14.0-linux-x64.tar.xz -o /tmp/RC/node-v12.14.0-linux-x64.tar.xz
```
これは特に何も触らない。

### Rocket.Chatの取得
curlコマンドでファイルの取得。

```
$ curl -L https://releases.rocket.chat/latest/download -o /tmp/RC/rocket.chat.tgz
```
ファイルを展開し、必要なパッケージを含めたうえで再圧縮。

```
$ tar -xzf /tmp/RC/rocket.chat.tgz -C /tmp/RC
$ yum install nodejs -y
$ cd /tmp/RC/bundle/programs/server
$ npm install
$ npm install inherits n
$ cd /tmp/RC && tar -zcvf rocket.chat.tgz bundle --remove-file
```

準備完了。
"/tmp/RC"以下に配置したファイルをすべてオンプレ環境に持込む。



## オンプレ環境での作業
インターネットに接続された端末で"/tmp/RC"以下に配置したファイルをすべてオンプレ環境に持込み、インストールを行う。
持ち込んだファイルの配置先も"/tmp/RC"とする。

### ローカルリポジトリからインストール

リポジトリへの参照を追加。

```
$ sudo mkdir etc/yum.repos.d/bk && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bk
$ sudo cat << EOF | sudo tee -a /etc/yum.repos.d/myrepo.repo
[local]
name=localrepo
baseurl=file:///tmp/RC/yum
gpgcheck=0
enabled=1
EOF
```

ローカルリポジトリから必要なものをインストールする。

```
$ sudo yum update -y
$ sudo yum install nodejs -y
$ sudo yum install gcc-c++ -y
$ sudo yum install GraphicsMagick -y
$ sudo yum install mongodb-org-server -y
$ sudo yum install mongodb-org -y
```
ローカルリポジトリからインストールは完了。


### NodeJSの置換
yumで取得してきたnodeJSのバージョンが欲しいバージョンではないのでファイル一式を置換する。

```
$ xz -dv  node-v12.14.0-linux-x64.tar.xz
$ tar xfv node-v12.14.0-linux-x64.tar
$ sudo \cp -pRf /tmp/RC/node-v12.14.0-linux-x64/* /usr/local
$ PATH="$PATH"
```

バージョンの確認。
12.14.0であることを確認。

```
$ node -v
```



### Rocket.Chatの配置
下記コマンドにて持ち込んだRocket.Chatを解凍し、"/opt"以下に配置する。

```
$ tar -xzf /tmp/RC/rocket.chat.tgz -C /tmp/RC
$ sudo mv /tmp/RC/bundle /opt/Rocket.Chat

$ sudo useradd -M rocketchat && sudo usermod -L rocketchat
$ sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat
```
### MongoDBの起動

下記コマンドにてmongodbを起動する。

```
$ sudo sed -i "s/^#  engine:/  engine: mmapv1/"  /etc/mongod.conf
$ sudo sed -i "s/^#replication:/replication:\n  replSetName: rs01/" /etc/mongod.conf
$ sudo systemctl enable mongod && sudo systemctl start mongod
mongo --eval "printjson(rs.initiate())"
```

### Rocket.Chatの起動

Rocket.Chat起動用にサービスファイルを作成。

```
$ cat << EOF |sudo tee -a /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 /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
EOF
```

下記コマンドにてRocket.Chatを起動する。

```
$ sudo systemctl enable rocketchat && sudo systemctl start rocketchat
```

Rocket.Chatの状態確認。

```
$ sudo systemctl status rocketchat
```

ついでに3000番ポートも開放しておく。

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

# 結果
オンプレでRocket.Chatが動く。