プロジェクト

全般

プロフィール

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.htmlhttps://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定義に対してこれを行う(サービスによってはやり方が大きく変わる場合がある)

外部からアクセスできるようになっていれば、成功。