概要
- 筆者は研究室の情報システム担当である
- Slackを使っていたが、3ヶ月で消える仕様をどうにかしなくてはならなくなった
- MattermostとRocket.Chatを比較し、後者を採用したので引き継ぎを兼ねて記録する
Mattermostとの比較
採用の決め手となったのは、モバイルアプリへのPUSH通知のサポートだった。Mattermostでは本番に耐えうるPUSH通知をサポートしておらず、面倒な設定がある。
インストールはどちらも簡単で、一つのコマンドでインストールからサーバー立ち上げができる。Mattermostでは困った時にフォーラムの方が助けてくれたので、運用の手間は同じくらいだと思う。
LightSail整備
インスタンス起動
今回はLightsailを採用した。予算枠が明朗なのと、将来的にEC2にグレードアップできるみたいなのでとりあえずはLightsailで運用していく。
プランは10$のインスタンスを選択。
RocketChatは頑張ればラズベリーパイでも動くらしいので、とりあえずこれを使ってみる。
これ以下だとSSH接続の際に固まってたりして少し不安だった。
SSHキーを登録して、~/.ssh/
に登録しておく。必要なら~/.ssh/config
も書き換える。
設定
最初にSSH接続をする前にIPアドレスの固定化を行う。最初に割り振られているIPアドレスは公開されているけど、そのままではHTTPでアクセスができない。
NetworkingタブからAttach static IPを押して、固定IPを手に入れる。
ちなみに固定IPはアタッチされている間は無料。
最初の設定ではポート443が空いていないため、同じくNetworkingタブからAdd ruleを選択してTCP443を追加する。
DNS設定
後述するTLS設定にドメインが必要になるので、ドメインの登録をしておく。
どのレジストラを使っているかや、サブドメインを使用するかなどでやり方は異なると思う。
そのドメインがRocket.Chat専用であれば、LightsailのDNSに任せても良い。
今回はchat.example.com
のようにサブドメインを使用したため、Aレコードを登録した。
Rocket.Chatをデプロイ
公式ページ通りにデプロイ
公式ページではDockerかsnapによるデプロイが推奨されている。
今回はSnapを使ってデプロイしていく。1
sudo snap install rocketchat-server
snap get rocketchat-server
これだけで立ち上がっている。試しにLightsailのIP:3000
にアクセスすると、Rocket.Chatが立ち上がっているのがわかる。
TLS設定
HTTPSの設定もコマンドで設定できる。2
sudo snap set rocketchat-server siteurl=https://<your domain>
sudo systemctl enable --now snap.rocketchat-server.rocketchat-caddy
sudo snap restart rocketchat-server
少し待つと再起動され、https:chat.example.com
でRocket.Chatにアクセスできる。
Rocket.Chatのバックアップ設定
とてもありがたいことに、Rocket.Chatはバックアップも簡単なコマンドで行うことができる。
sudo service snap.rocketchat-server.rocketchat-server stop
sudo snap run rocketchat-server.backupdb
sudo service snap.rocketchat-server.rocketchat-server start
これを自動化し、毎日3時に自動でバックアップができるようにしたいと思う。
バックアップ先はS3を選択した。何かの拍子でLightsailのインスタンスを削除しそうで怖いからである。
下記スクリプトを適当なディレクトリに保存する。
# backup rocketchat
sudo service snap.rocketchat-server.rocketchat-server stop
sudo snap run rocketchat-server.backupdb
sudo service snap.rocketchat-server.rocketchat-server start
# find the latest backup file
backupFile=`find /var/snap/rocketchat-server/common/backup/ -mtime -1 -regex "/var/snap/rocketchat-server/common/backup/rocketchat.*" | head -1`
if [ -z "$backupFile" ]; then
echo "No backup file found"
exit 1
fi
# send backup file to AWS S3
aws s3 cp $backupFile s3://your-S3/rocketchat-`date +%Y-%m-%d`.tar.gz
Rocket.Chatの停止時間はおよそ30秒である。
これが毎日3時に動くように、Cronを設定する。
crontab -e
0 18 * * * bash path/to/backup.sh
UTCで計算しているので、18時になっている。本当はJSTにした方がいいんだと思う。
その他
SSHのポート変更
さまざまな記事で書いてあるため、やり方はここでは書かない。
今回は大学のネットワークが22番以外を許可していなかったため、設定を見送った。
Rocket.Chatの設定諸々
通知設定はRocket.ChatサーバーをRocket.Chatに登録すると使える。
まとめ
だいぶ端折ったため、追記できたら追記する。
何か間違っていたら編集リクエストやコメントお待ちしています。