Mattermost更新作業について¶
更新指示書作成前に¶
必ず当該バージョンがESR(Extended Support Release)であることを確認してください。ESRでないバージョンへのアップグレードを行うと、頻繁な更新を行う必要が出るため、非効率であり、またソフトウェアの安定性もESRより劣る場合がある。
更新先がESRだった場合でも、必ず更新先バージョンa.b.cにおいてc部が1以上になってから更新を行ってください。
[前提知識]Mattermostのバージョン文字列¶
Mattermost においてはa.b.cフォーマットでバージョンが記述される。a 部分のバージョンアップはメジャーバージョンアップと呼ばれ、多くの機能の追加や破壊的変更が実施される。
b部分はマイナーバージョンと呼ばれ、特定のメジャーバージョン内での細かな(時に多 くの機能が追加されるが)修正や機能追加が行われる。
c部分はパッチバージョンです。マイナーバージョンに対して微小な変更を加える。弊部のシステムでは Watchtower を利用し、パッチバージョンアップのみ自動更新する。
Mattermost の場合、マイナーバージョンアップでデータベース構造が変わり、SQLを入力し、明示的にDBに変更を与える必要がある場合がある。そのため、弊部ではMattermostのマイナーバージョンより大きい単位での更新を手動にしている。
Mattermostのバージョンアップ情報は https://docs.mattermost.com/deploy/mattermost-changelog.html にある。
[前提知識]Shellコマンドの記述について¶
$
から始まるコマンドは、標準ユーザで実行されるべきものであり、$
の部分は入力するコマンドに含まれない。
#
から始まるコマンドは、特権(root)ユーザで実行されるべきものであり、#
の部分は入力するコマンドに含まれない。特権昇格は、sudo
コマンドなどで行う。
コマンドの先頭が$
や#
でない場合、コマンドの実行結果の可能性がある。
いずれの場合でも、コマンドの先頭に空白は絶対に入れてはならない。
また、コマンドの途中に#
が入っている場合、コメントとなっている場合がある。必要に応じて削除する。
Mattermostのアップデートパス¶
Mattermost のアップデートをする場合は、必ず 1 マイナーバージョンずつ更新を行う。 ただし、もし最新のパッチバージョンになっていない場合、先にパッチバージョンを最新の ものにする。
Mattermost のバージョンは Mattermost 画面左上のメニュー(普段 Channels などと表記されている)から「About Pim Mattermost」を選択し、Mattermost の現在のバージョンを確認する。
Mattermost 更新前の準備事項¶
https://docs.mattermost.com/upgrade/prepare-to-upgrade-mattermost.html と https://docs.mattermost.com/upgrade/important-upgrade-notes.html を確認し、アップグレードにおける注意点を必ず確認する。もし双方に記述がない場合、必ず詳しい人に相談をし、バックアップを取ってから作業を開始する。
Mattermost の実態ファイル¶
PimのMattermostはDockerで動いており(正確にはDocker Composeでネットワークの作成などを行っている)データはすべてホストのディレクトリをマウントして永続化している。
Docker Composeのプロジェクトは、/home/docker/chat.pim-shimane.comに保存されている。
更新手順¶
以下の全てのコマンドはPimのサーバーのコンソールにアクセスしている前提
更新作業の始めに¶
まず、接続が切れてもセッションを保持するようにする。
$ tmux
tmuxが起動すると、画面下に緑色のバーが表示される。
バックアップ¶
全てのdockerの停止¶
現在、動いている全てのdockerを停止させる。
$ cd /home/docker/chat.pim-shimane.com # dockerのファイルの中に入る(docker-compose.ymlのあるフォルダ)
$ pwd # 現在の場所を確認するコマンド
/home/docker/chat.pim-shimane.com
# docker compose down # docker composeを使って落とす。
これを同サーバーにある全てのdockerに対して行いる。
現状(2024/07/02)の運用しているcomposeは下記のとおりである。
- chat.pim-shimane.com
- chat-edge.pim.gr.jp
- files-chief.pim.gr.jp
- files-sysadm.pim.gr.jp
- redmine.pim.gr.jp
データベースのバックアップを取る¶
それぞれのdockerのデータベースのバックアップを取る。この例では、PostgreSQLを使っているものとして記述する。
まず、データベースを扱うためにpostgresを立てる。
$ pwd # パスがcomposeの場所であることを確認
/path/to/compose/location
# docker compose up -d postgres
postgresが立ったらそれを用いてバックアップを取る。
# docker compose exec -T postgres pg_dump -U mmuser -F p mattermost > backupwk_YYYYMMDD.sql
YYYYMMDD
は日付のフォーマットである。もし、作業日が2024/07/02の場合、20240702
となる。
mmuser
は任意のユーザ名に、mattermost
は任意のデータベース名に変更する。
これは、現在、mattermostとredmineに対してのみ行われているものである。
実体ファイルのバックアップを取る¶
前途の手順通りに、全てのdockerを停止する。
次にサーバー本体にSSDを差す。
# fdisk -l
上記のコマンドでSSDがUbuntuにどんな名前で認識されているかを確認する。本資料では、今後認識されている名前をsdb1
とする。
SSDをマウントする。下記のコマンドでは、/data_ssd
にマウントするが、このディレクトリが存在し、空であることを確認すること。
# mount /dev/sdb1 /data_ssd
完了したら、マウントした場所に移動する。
$ cd /data_ssd
ここまで来たら、コピーコマンドでフォルダごとdata_ssdにコピーする。
# cp -r /home/docker/chat.pim-shimane.com bkup-YYYYMMDD.chat
ここで拡張子は何でも良いです。cpコマンドの-rはディレクトリごとコピーするオプションなので必ず付ける。
これをMattermostとRedmineに対して行う。
最後に全てのコピーが終わったらSSDをアンマウント。
# sync
# sync
# sync
# umount /dev/sdb1
# sync
# sync
# sync
このコマンドを打たないと、ファイルの書き込みが途中でキャンセルされる可能性があるので、必ず実行する。
また、sync3回はおまじないであるので、最悪省略できる。
dockerの状態の確認¶
dockerの現在起動しているコンテナの一覧を確認するコマンドを実行する。
# docker ps # (存在する全てのコンテナ一覧を取得する場合は-aオプション)
これで動いているコンテナが無ければOK
Ubuntuのアプリのアップデート¶
更新情報の取得¶
# apt update
これで全てのアプリのバージョンのリストを更新する。
更新可能なアプリと更新先をメモ¶
$ apt list --upgradable
このコマンドでアップデート可能なアプリの一覧を確認
cloudflaredに更新があるのにここに表示されない場合などは手動更新が必要となる。
$ apt list --installed
で現在インストールされているアプリの一覧が見れる。
Ubuntuのアプリの更新¶
# apt upgrade
これで更新をかける。思ったよりも時間がかかる。
途中、アップグレードするかをYes/Noだけで聞かれるが、この際はyを押すかそのままEnterで続行する。
途中、設定ファイルを上書きするか(=初期化するか)聞かれるが、絶対にNoを選択する。
※途中でネットが切れたりしたら再びログインして、tmux -aでもとのセッションに戻る。
Auto remove¶
出ているログを見ればわかるが、auto removeしろとか書いてあるときはする。
Auto removeする際は、
# apt autoremove
で実行できる。
全部更新されたか確認する¶
# apt update
をもう一回かけて、さらなる更新や、更新できていないアプリがないか確認する。あったらapt list --upgradable
をかける。
信用できない項目
フェーズアップデートなどは、保留されるため、明示的にアップグレードする。
$ sudo apt upgrade python3.1(さっきのログで出てきたパッケージ名)
サーバーの再起動¶
# systemctl reboot
これをして、待つ。
起動してきたら、動作確認。必ず、CloudflaredのTunnelが張られているか確認(chat-consoleでログインできるか)
mattermostの更新¶
全てのdockerコンテナが停止している前提です。
SQLの実行(必要な場合のみ)¶
DBを起動¶
$ cd /home/docker/chat.pim-shimane.com
$ pwd
/home/docker/chat.pim-shimane.com
# docker-compose up -d postgres
SQLを投入¶
下記のコマンドで、psqlに入る。
$ sudo docker-compose exec postgres psql -U mmuser -d mattermost psql
この後、mattermost=#
と表示されるので、必要なSQLを投入。
終了時は
mattermost=# quit;
で閉じることができる。
mattermostの要求バージョンを更新¶
$ pwd
/home/docker/chat.pim-shimane.com
# vi .env
vimで表示されたファイルの中身を編集。
39行目に、MATTERMOST_IMAGE_TAG=a.b
という記載があるので、したいバージョンをマイナーバージョンまで記述する。
vimでは通常モードで文章内を移動し、iキーを押すと編集モードになる。Escキーで編集モードを抜け、その状態で:wq
を入力すると上書き保存して終了になる。
サービスを起動¶
落とした全てのサービスを起動する。
$ cd /home/docker/chat.pim-shimane.com
$ pwd
/home/docker/chat.pim-shimane.com
# docker-compose up -d
これで立ち上がる。
もちろん、(Pimに必要な)のdocker compose定義に対してこれを行う(サービスによってはやり方が大きく変わる場合がある)
外部からアクセスできるようになっていれば、成功。