2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rocket.ChatをSnapでデプロイ、本番運用してみた

Last updated at Posted at 2023-04-08

概要

  • 筆者は研究室の情報システム担当である
  • Slackを使っていたが、3ヶ月で消える仕様をどうにかしなくてはならなくなった
  • MattermostとRocket.Chatを比較し、後者を採用したので引き継ぎを兼ねて記録する

Mattermostとの比較

採用の決め手となったのは、モバイルアプリへのPUSH通知のサポートだった。Mattermostでは本番に耐えうるPUSH通知をサポートしておらず、面倒な設定がある。

インストールはどちらも簡単で、一つのコマンドでインストールからサーバー立ち上げができる。Mattermostでは困った時にフォーラムの方が助けてくれたので、運用の手間は同じくらいだと思う。

LightSail整備

インスタンス起動

今回はLightsailを採用した。予算枠が明朗なのと、将来的にEC2にグレードアップできるみたいなのでとりあえずはLightsailで運用していく。

OSはUbuntu22.04を選択した。
Ubuntu22.04を選択しているインスタンス起動画面

プランは10$のインスタンスを選択。
RocketChatは頑張ればラズベリーパイでも動くらしいので、とりあえずこれを使ってみる。
これ以下だとSSH接続の際に固まってたりして少し不安だった。

10$のインスタンスを選択している様子

SSHキーを登録して、~/.ssh/に登録しておく。必要なら~/.ssh/configも書き換える。

設定

最初にSSH接続をする前にIPアドレスの固定化を行う。最初に割り振られているIPアドレスは公開されているけど、そのままではHTTPでアクセスができない。

NetworkingタブからAttach static IPを押して、固定IPを手に入れる。
ちなみに固定IPはアタッチされている間は無料。

IPアドレスの設定画面

最初の設定ではポート443が空いていないため、同じくNetworkingタブからAdd ruleを選択してTCP443を追加する。

IPアドレスの設定画面

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.sh
# 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に登録すると使える。

まとめ

だいぶ端折ったため、追記できたら追記する。

何か間違っていたら編集リクエストやコメントお待ちしています。

  1. https://docs.rocket.chat/deploy/prepare-for-your-deployment/rapid-deployment-methods/snaps

  2. https://docs.rocket.chat/deploy/prepare-for-your-deployment/rapid-deployment-methods/snaps/auto-ssl-with-snaps

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?