Rocketchatのインストール

Rocketchatのインストール
Page content

メンバー同士のメッセージルールとしてrocketchatGKE 上で運用していたが、2020年6月から価格改定によって1クラスタ当り$0.10/hrsの管理手数料を取られるを取られるようになる。これにより月8,000円上乗せされることになるので別サーバへ移行することにした。正直それほど可用性は必要ないので普通のVPSに移行する。コストパフォーマンスが良さそうなところを色々調べたところNTTPCが運用しているWebArena Indigo が性能に対して費用が安いようなのでこちらにRocketchatをインストールしてみた。なおOSはCentOS8.3を使用。


MongoDB インストール等

MongoDBをインストールするため、yumのレポジトリとしてMongoDBのレジストリ設定をする。

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

MongoDBの他、Node.js等のパッケージをインストールする。

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

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

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

yum install -y GraphicsMagick

npm install -g inherits n && sudo n 12.14.0

yum install -y nginx

各種パッケージのアップデートとSELINUXのDisable化をする。Kernelもアップデートされるためリブートを実施。

yum -y check-update
yum update

vi /etc/sysconfig/selinux
---
SELINUX=disabled  # Disabledに変更
---

reboot

Rocketchat のインストールと設定

Rocketchat をダウンロードしてインストール。

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

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

cd /tmp/bundle/programs/server && npm install

mv /tmp/bundle /opt/Rocket.Chat

rocketchat ユーザを作成してsystemdの設定ファイルを作成

useradd -M rocketchat && sudo usermod -L rocketchat

chown -R rocketchat:rocketchat /opt/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

MongoDB の設定と起動

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

systemctl enable mongod && sudo systemctl start mongod

mongo --eval "printjson(rs.initiate())"

rocketchat の起動

systemctl enable rocketchat && sudo systemctl start rocketchat

TLS/SSL設定

最近のブラウザはHTTPSでないと警告を発するためHTTPS対応はほぼ必須の状況。ここではNginx をリバースプロキシとして動かし、Let&rsquo;s Encrypt でサーバ証明書を発行、Nginxに登録することでHTTPS対応とさせた。

Let’s Encryptを使ってサーバ証明書を発行するためcertbot を使う。

yum install wget -y

wget https://dl.eff.org/certbot-auto

mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

またLet’s Encryptがサイトの存在を確認するためこのタイミングでNginxを起動させる。

systemctl enable nginx && systemctl start nginx

下記コマンドにてサーバ証明書発行を行う。最初は--dri-runでコマンドラインが間違いないか念の為確認した上で、次に--dri-runを外して実行する。なお発行するホスト名はLet’s Encryptがサイトを確認する必要があるためこの段階でDNSに登録されている必要がある。下記ではホスト名に「chat.example.com」、メールアドレスに「mailaddr@example.com」を例として使用した。

下記コマンド実行後に2回ほど入力を求められるがその時は「Agree」と「Yes」を選択する。

/usr/local/bin/certbot-auto certonly --dry-run --webroot -w /usr/share/nginx/html -d chat.example.com -m mailaddr@example.com
/usr/local/bin/certbot-auto certonly --webroot -w /usr/share/nginx/html -d chat.example.com -m mailaddr@example.com

リバースプロキシの設定

リバースプロキシの設定をする。設定ファイルに先程作成したサーバ証明書と秘密鍵を指定する。

vi /etc/nginx/conf.d/rproxy.conf
---
# Upstreams
upstream backend {
    server 127.0.0.1:3000;
}

# HTTPS Server
server {
    listen 443;
    server_name chat.example.com;

    # You can increase the limit if your need to.
    client_max_body_size 200M;

    error_log /var/log/nginx/rocketchat.access.log;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/chat.example.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/chat.example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don’t use SSLv3 ref: POODLE

    location / {
        proxy_pass http://backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}
---

リバースプロキシの設定を追加したのでNginxを再起動する。

systemctl restart nginx

発行された証明書の有効期限は90日なのでcronにて定期的に更新されるようにする。

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew --post-hook \"/usr/sbin/nginx -s reload\" -q" | sudo tee -a /etc/crontab > /dev/null

参考サイト


Tumblr
Pinterest
はてブ