Ubuntu
Rocket.Chat

snapを使ったRocket.Chatの簡単インストール

対象OS : Ubuntu Server 16.04.1 LTS, Ubuntu Server 18.04.1 LTS

WebチャットアプリのRocket.Chatはバージョン0.40くらいからsnap1というパッケージシステムでインストールすることができるようになりました。
これにより、DockerやMongoDBの準備なども不要で非常に簡単にインストールができます。
参考:https://rocket.chat/docs/installation/manual-installation/ubuntu/snaps

2018/08/15追記
2018/07/26 に Ubuntu Server 18.04.1 LTS(ubuntu-18.04.1-live-server-amd64.iso) がリリースされたので、こちらにもインストールしてみました。
結論から言うと、なんとOSインストール時に初期インストールできるようになっていました。
ただし、日本語インストールができなくなり、Englishでインストールすると、タイムゾーンがUTCになっているので、インストール後、sudo timedatectl set-timezone Asia/Tokyo したりする必要があります。
image.png
Rocket.Chatの他にもnextcloudやwekan, dockerなどもありました。

事前準備

OSのインストール

以下からUbuntu Server 16.04.1 LTSをダウンロードし、インストールします。
https://www.ubuntu.com/download/server
私はstandard system utilitiesとOpenSSH serverにチェックを入れてインストールしましたが、両方なくてもRocket.Chatはインストール可能です。

最新化

sudo apt-get update && sudo apt-get dist-upgrade -y

その他

ファイアウォールや時刻など必要に応じて導入設定します。

Rocket.Chatのインストール

sudo snap install rocketchat-server

これだけです。
インストール完了後は以下のコマンドでサービスが正常に起動しているか確認します。

# Rocket.Chatのサービス確認
systemctl status snap.rocketchat-server.rocketchat-server.service
# MongoDBのサービス確認
systemctl status snap.rocketchat-server.rocketchat-mongo.service

また、http://<サーバーのIPアドレス>:3000にアクセスし、ログイン画面が表示されることを確認します。

アップデート

snapは自動アップデート機能があり、現在無効にすることはできません。
新しいバージョンがリリースされると6時間以内に自動アップデートされます。
手動でアップデートする場合は以下のコマンドを実行します。

sudo snap refresh rocketchat-server

snapd 2.31からアップデートの時間指定(refresh.timer)ができるようになったようです。
https://snapdocs.labix.org/configuration-options/87

自動アップデートの無効化については、議論が上がってます。
どうしても自動アップデートを無効にしたい場合、ネットワークレベルでブロックできるかも。(未確認)
https://forum.snapcraft.io/t/disabling-automatic-refresh-for-snap-from-store/707

ロードマップに上がってる Parallel snap installs でバージョン固定機能とか入るといいなぁ。
https://forum.snapcraft.io/t/the-snapd-roadmap/1973

※余談ですが、go の snapのチャンネル構成を見たら(snap info go)、以下のようになっていました。

channels:                                    
  stable:         1.10.3        (2130) 66MB  classic
  candidate:      ↑                          
  beta:           1.11beta2     (2355) 99MB  classic
  edge:           devel-c882f4b (2496) 111MB classic
  1.10/stable:    1.10.3        (2130) 66MB  classic
  1.10/candidate: ↑                          
  1.10/beta:      ↑                          
  1.10/edge:      ↑                          
  1.11/stable:    –                          
  1.11/candidate: –                          
  1.11/beta:      1.11beta2     (2355) 99MB  classic
  1.11/edge:      ↑                          
  1.6/stable:     1.6.4         (122)  49MB  classic
  1.6/candidate:  ↑                          
  1.6/beta:       ↑                          
  1.6/edge:       ↑                          
  1.7/stable:     1.7.6         (324)  48MB  classic
  1.7/candidate:  ↑                          
  1.7/beta:       ↑                          
  1.7/edge:       ↑                          
  1.8/stable:     1.8.7         (1407) 51MB  classic
  1.8/candidate:  ↑                          
  1.8/beta:       ↑                          
  1.8/edge:       ↑                          
  1.9/stable:     1.9.7         (2117) 58MB  classic
  1.9/candidate:  ↑                          
  1.9/beta:       ↑                          
  1.9/edge:       ↑  

このような構成であれば、auto-updateもありがたいかもしれませんが、Rocket.Chatは snap info rocketchat-server で見たら現在こんな感じ。

channels:                        
  stable:    0.68.3 (1317) 213MB -
  candidate: 0.68.3 (1317) 213MB -
  beta:      ↑                   
  edge:      0.68.3 (1317) 213MB -

今のところ、snapへのバージョンアップは慎重に行ってくれているようですし、snapに変えて1年以上運用していて大きな問題は今のところ遭遇していませんが、たまに BREAKING CHANGES が入ってくるので、ちょっと心配・・・

運用で気を付けていること

バックアップを取る

毎日バックアップを取っています。
参考:https://qiita.com/bibimarujp/items/3c27b697144d08ec8cef

リリース情報を監視する

以下をRSSに登録してリリース情報を確認しています。
https://github.com/RocketChat/Rocket.Chat/releases.atom
最近のRocket.Chatは月1回メジャーバージョンが上がっています。
snapには翌週以降に上がってきています。
安定しないと上がってこないので、マイナーバージョンが上がってからリリースされたり、メジャーバージョン自体がスキップされることもあります。

open.rocket.chatの情報を確認する

なかなかsnapに上がってこないなー、というときはここを見に行ってみます。
https://open.rocket.chat/channel/ubuntu-snap

サービスが上がってこない場合がある

再起動、バージョンアップ後などにサービスが上がってこない場合があります。
その場合は手動でサービスを上げます。
#mongoが上がらなかった経験は今のところ無いです。

# サービス状態確認
systemctl status snap.rocketchat-server.rocketchat-server.service

# サービス起動
sudo systemctl start snap.rocketchat-server.rocketchat-server.service

# 起動状況確認
journalctl -u snap.rocketchat-server.rocketchat-server.service -f

2018/04/11追記

事象の詳細

ログを確認したところ、以下のような事象でした。
snapアップデート時、まずmongoが再起動開始。
1秒後、serverがサービス停止。ここまで2秒。
その後、serverが6回起動リトライするが、mongoに接続できず。
最後は以下で終了。

snap.rocketchat-server.rocketchat-server.service: Start request repeated too quickly.
Failed to start Service for snap application rocketchat-server.rocketchat-server.

その間22秒。

mobgoは停止開始から停止完了まで6秒、
開始から開始完了まで19秒かかっていた。

対応策1

snap.rocketchat-server.rocketchat-server.service に設定を加えようとしたが、 # Auto-generated, DO NOT EDIT と書かれていたので、仕方なく、外側から対応。
以下のサービスを追加して様子見。
mongoの起動完了から30秒後にserverを起動させる。

delayed-start-rocketchat-server.service
[Unit]
Description=start server 30sec after mongo started
Requires=snap.rocketchat-server.rocketchat-mongo.service
After=snap.rocketchat-server.rocketchat-mongo.service
BindsTo=snap.rocketchat-server.rocketchat-mongo.service

[Service]
Type=oneshot
ExecStartPre=/bin/sleep 30
ExecStart=/bin/systemctl start snap.rocketchat-server.rocketchat-server.service

[Install]
WantedBy=multi-user.target
WantedBy=snap.rocketchat-server.rocketchat-mongo.service

参考:サービスの追加手順は以下。

cd /etc/systemd/system
sudo vi delayed-start-rocketchat-server.service

# 中身記載

sudo systemctl daemon-reload
sudo systemctl enable delayed-start-rocketchat-server.service

2018/06/14追記

対応策2

対応策1でも動作していたが、結構ぎりぎりだったので、mongoが上がってくるまで待つように変更して様子見中。
今のところ、問題なく起動している。

delayed-start-rocketchat-server.service
[Unit]
Description=start server after mongo started
Requires=snap.rocketchat-server.rocketchat-mongo.service
After=snap.rocketchat-server.rocketchat-mongo.service
BindsTo=snap.rocketchat-server.rocketchat-mongo.service

[Service]
Type=oneshot
ExecStartPre=/bin/sh -c 'while ! /snap/rocketchat-server/current/bin/mongo --eval "db.version()" > /dev/null 2>&1; do echo "wait...";sleep 1; done'
ExecStart=/bin/systemctl start snap.rocketchat-server.rocketchat-server.service

[Install]
WantedBy=multi-user.target
WantedBy=snap.rocketchat-server.rocketchat-mongo.service

ubuntuサーバーメンテ

/bootの領域が狭い場合、放っておくとディスクフルになってアップデートが面倒になるので、定期的に掃除が必要です。

# 使用量確認
df -h /boot

# linux-image確認
dpkg --get-selections | grep linux-image

# 掃除
sudo apt-get autoremove

使用率が100%になって autoremove ができなくなってしまった場合、
最終手段として、/boot内のファイルを以下のような感じで古いものを手動削除して領域を空けてから autoremove します。

sudo rm linux-image-4.4.0-57-generic

留意事項

  • MongoDBのポート番号は27017
  • DB名はparties

  1. Ubuntu 16.04より新たに導入されたパッケージシステム