AWS EC2(CentOS7)でRocketChatを構築する。　～RocketChatインストール～

# 記事内容

第2部　[AWS EC2(CentOS7)でRocketChatを構築する。~サーバー操作&事前準備~](https://qiita.com/TomTam/items/ec60d06a06cb045fcdfe)の続きとなります。

- [第1部](https://qiita.com/TomTam/items/7205d140f7a98abcc55e)
  - AWSでEC2インスタンス(CentOS7)の作成
  - EC2インスタンスに対するセキュリティーグループ設定


- [第2部](https://qiita.com/TomTam/items/ec60d06a06cb045fcdfe)
 - Linuxサーバ操作方法
 - RocketChat事前準備(便利パッケージのインストール)


- 第3部(今回)
 - RocketChatのインストール

# 本編

## インストール

基本的には[公式マニュアル](https://rocket.chat/docs/installation/manual-installation/centos/)に記載されています。
そのため、マニュアルを自分なりに読み取った形式で紹介しつつ、躓いた点を記載します。
※日本語訳といっても自分なり解釈ですので、誤りがあればご指摘ください。

### マニュアル

```
# 1
#RPMパッケージのアップデートを実行する。
sudo yum -y check-update
```
-------------------------------------------------------
```sh
# 2
#MongoDBをインストールする際に参照される「mongodb-org-4.0.repo」を作成する。
cat << EOF | sudo tee -a /etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF
```

-------------------------------------------------------


```sh
# 3
#「curl」パッケージのインストール 
#「curl」を使って、NodeSourceのリポジトリをyumリポジトリに追加し、
#セットアップファイルを実行する。
sudo yum install -y curl && curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -
```

-------------------------------------------------------

```sh
# 4
# 「gcc-c++」・「mongodb-org」・「nodejs」をインストールする。
#　※補足1
sudo yum install -y gcc-c++ make mongodb-org nodejs

```

-------------------------------------------------------

```sh
# 5
# 「GraphicsMagick」をインストールする。
sudo yum install -y epel-release && sudo yum install -y GraphicsMagick

```
-------------------------------------------------------

```sh
# 6
# nパッケージのインストール
# ver8.11.4への切り替え
sudo npm install -g inherits n && sudo n 8.11.4
```
-------------------------------------------------------

```sh
# 7
# RocketChatのインストール
# 「rocket.chat.tgz」としてRocketChatソースを入手する。
curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz
```

-------------------------------------------------------
```sh
# 7
# tgzファイルの解凍
tar -xzf /tmp/rocket.chat.tgz -C /tmp

```
-------------------------------------------------------
```sh
# 8
# ディレクトリ移動
# npmリポジトリからライブラリを入手する。
cd /tmp/bundle/programs/server && npm install

# パッケージ群を移動する。(任意のディレクトリに移動も可)
sudo mv /tmp/bundle /opt/Rocket.Chat

```
-------------------------------------------------------

```sh
# 9
# ディレクトリ作成
# ユーザロック
sudo useradd -M rocketchat && sudo usermod -L rocketchat
```

-------------------------------------------------------

```sh
# 10
# ディレクトリ・ファイルの所有権を再帰的に変更する？
sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat
```

-------------------------------------------------------

```sh
# 11
# rocketchat.serviceの編集
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
```

```sh
# この部分は、各自の環境によってカスタム可能
MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01
MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01
ROOT_URL=http://your-host-name.com-as-accessed-from-internet:3000
PORT=3000
```
------------------------------------------------------

```sh
# 12
# mongoDBの設定ファイルに対して、文字列置換
sudo sed -i "s/^#  engine:/  engine: mmapv1/"  /etc/mongod.conf
```

------------------------------------------------------

```sh
# 13
# mongoDBの設定ファイルに対して、文字列置換
sudo sed -i "s/^#replication:/replication:\n  replSetName: rs01/" /etc/mongod.conf

```

------------------------------------------------------
```sh
# 14
# mongoDBサービスのサービス自動起動有効化
# mongoDBサービスの開始
sudo systemctl enable mongod && sudo systemctl start mongod

```

------------------------------------------------------
```sh
# 15
# 直接mongoDBにコマンド実行
mongo --eval "printjson(rs.initiate())"
```

------------------------------------------------------

```sh
# 16
# rocketchatサービスのサービス自動起動有効化
# rocketchatサービスの開始
sudo systemctl enable rocketchat && sudo systemctl start rocketchat

```

------------------------------------------------------

そして、
『http://(IPアドレス):3000』にアクセスを行うと、やっとRocketChat画面にアクセスすることができます。

![初回アクセス_管理者ページ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265314/7f522d70-3803-15ac-1d98-c6bee07a2d17.png)


## 補足

### 1.MongoDBがインストールできない

マニュアルの#4でコマンドを実行しても、
「mongodb-org」がインストールされておらず、コケました。
そのため、mongoDBのインストールについては公式サイトに記載されているコマンドを実行しました。

```sh
sudo yum install -y mongodb-org
```


### 2.起動できない

MongoDB・RocketChatのサービスが立ち上がっても、
なぜか起動できていない、、、、、、

```sh
[(ユーザー名)@ip-(IPアドレス) centos]$ systemctl status
● ip-(IPアドレス).us-east-2.compute.internal
    State: degraded
#　以下略～～～
```

調査してみると、、、「kdump.service」がダメとのことでした。

```
[(ユーザー名)@ip-(IPアドレス) centos]$ systemctl --failed
  UNIT          LOAD   ACTIVE SUB    DESCRIPTION
● kdump.service loaded failed failed Crash recovery kernel arming
```

ただ、これはバックアップファイルを生成する「kdump.service」が使用するメモリ容量が、
不足していることによる発生するそうですが、今回はサービスの無効化を実施しました。
```sh
#kdump.serviceの無効化
systemctl disable kdump.service
```

その結果、デグレ解消ができました。

##コマンド備忘録

```sh
#catコマンド
#この場合はヒアドキュメントとの合わせ技で単なるテキストファイルの書き込みではなく、
#コマンド呼び出しも実行しています。
cat << EDF | コマンド 
～～～～
EOF
```

```sh
#teeコマンド
#「ファイル名」に書き込みを行う。
#また、ファイルが存在しなければ新規作成したうえで、書き込みを行う。 
tee -a ファイル名
```


#参考

[Linux関連のありがたいサイト　その1](https://www.kushiro-ct.ac.jp/yanagawa/ex-2016/3-unix/03.html)

[mongoDB オフィシャルサイト](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/)