本ブログはアフィリエイト広告を利用しています。

Mattermostの管理者パスワードを忘れたのでExportしてから最新版(6.1.0)にImportした

mattermost-test-ch プログラミング

Mattermostを家族内でたまに使用していたのですがパスワード忘れてからずっとログインせずに1年半くらい放置していました。
いい加減どうにかしようと思ってやってみました。

環境

  • CentOS7
  • MySQL8

アップグレードではなく新規インストールなのはなぜか

Mattermostはアップグレード手順通りにやれば普通にバージョンアップ可能ですが、そもそもログインパスワードがわからないのでバージョンアップしても無意味。
と言うことで古いMattermostでExportして新規インストールしたMattermostにImportするというちょっと無駄な手順を踏んでいます。
ちなみにバージョンアップ手順は公式にある通りです。
https://docs.mattermost.com/upgrade/upgrading-mattermost-server.html#id2

公式のインストール手順は以下です。本ページではユーザ作成やDBインストール等は既に済んでいるのでそちらの手順は省いています。
https://docs.mattermost.com/install/install-rhel-7.html

データをExport

最新版をインストールする前にデータをExportしておきます。
また、次の手順で新規インストールするため古いMattermostフォルダは移動しておきます。

# cd /opt/mattermost/bin
# ./mattermost export bulk bulk_data.json
# systemctl stop mattermost.service
# cd /opt
# mv mattermost mattermost_old

Mattermostをインストール

ダウンロード

https://mattermost.com/deploy/?ref=download からファイルのURLをコピーします。
2021/11/26時点では https://releases.mattermost.com/6.1.0/mattermost-6.1.0-linux-amd64.tar.gz となっています。

ダウンロード、展開して/optに移動後、ファイルのストレージ用のディレクトリを作成します。

# wget https://releases.mattermost.com/6.1.0/mattermost-6.1.0-linux-amd64.tar.gz
# tar -xvzf *.gz
# mv mattermost /opt
# mkdir /opt/mattermost/data

所有者、権限を変更

mattermostフォルダの所有者と権限を変更します。

# chown -R mattermost:mattermost /opt/mattermost
# chmod -R g+w /opt/mattermost

データベース(MySQL)の接続先を設定

先に新しいMattermost用にDBを作成します。古い方は一応消さずに残しておきます。

mysql> create database mattermost2;
mysql> grant all privileges on mattermost2.* to 'mmuser'@'localhost';

/opt/mattermost/config/config.json を開き、SqlSettingsにある ‘DriverName’ と ‘DataSource’ を変更します。

"SqlSettings": {
    "DriverName": "mysql",
    "DataSource": "mmuser:mysql-password@tcp(localhost:3306)/mattermost2?charset=utf8mb4,utf8\u0026writeTimeout=30s",
    "DataSourceReplicas": [],
    "DataSourceSearchReplicas": [],
    "MaxIdleConns": 20,
    "ConnMaxLifetimeMilliseconds": 3600000,
    "ConnMaxIdleTimeMilliseconds": 300000,
    "MaxOpenConns": 300,
    "Trace": false,
    "AtRestEncryptKey": "4bpq13nqfit7q4be9a5tm6qrkghxkcum",
    "QueryTimeout": 30,
    "DisableDatabaseSearch": false,
    "ReplicaLagSettings": []
}

Mattermost起動

準備が完了したのでMattermostを起動していきます。statusで起動したことを確認してください。

# systemctl start mattermost.service
# systemctl status mattermost.service

Apacheの設定

ローカル環境で使用する場合は不要ですが、今回はローカルではないのでApacheの設定を行います。
今までサブディレクトリでアクセスしていましたが、サブドメイン運用に変更したため再設定しました。
なお、証明書はLet’s Encryptで取得しています。

<VirtualHost mattermost.developers-trash.com:80>
    DocumentRoot "/usr/local/apache-2.4.25/htdocs/mattermost"
    ServerName mattermost.developers-trash.com
    ServerAlias mattermost.developers-trash.com
    CustomLog logs/mattermost_access.log common
    ErrorLog logs/mattermost_err.log
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>
</VirtualHost>

<VirtualHost mattermost.developers-trash.com:443>
    DocumentRoot "/usr/local/apache-2.4.25/htdocs/mattermost"
    ServerName mattermost.developers-trash.com
    ServerAlias mattermost.developers-trash.com
    CustomLog logs/mattermost_access.log common
    ErrorLog logs/mattermost_err.log
    ProxyPreserveHost On

    RewriteEngine On
    RewriteCond %{REQUEST_URI} /api/v[0-9]+/(users/)?websocket [NC,OR]
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule .* ws://localhost:8065%{REQUEST_URI} [P,QSA,L]
    <Location / >
        Require all granted
        ProxyPass http://localhost:8065/
        ProxyPassReverse http://localhost:8065/
        ProxyPassReverseCookieDomain localhost mattermost.developers-trash.com
    </Location>

    # SSL設定
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/mattermost.developers-trash.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mattermost.developers-trash.com/privkey.pem
</VirtualHost>

設定完了後にApacheを再起動します。

# systemctl restart httpd

Mattermostにアクセス

まずはブラウザでアクセスしていきます。
アプリだと”Your session has expired. Please log in again.”とか言われてサインアップできなかったので。

初回アクセス時に管理者用のアカウントを登録しますが、この時古いMattermostで登録していたアカウント名は使用しないようにしましょう。
同名アカウントだとパスワードが上書きされるような気がします。
1度同名アカウントでやりましたがインポート後にログインできなくなりました。もしかすると他の設定がまずかったのかもしれませんがそこまでは追っていません。
また、メールアドレスも同様に異なるものを設定しましょう。
インポート時に以下のエラーが出ました。

Error: importUser: An account with that email already exists., invalid input: entity: User field: email value: [メールアドレス]

アクセス後、テスト用のチャンネルを作成します。

mattermost-test-ch

チャンネル作成後、アプリでもログイン可能か確認していきます。
私の場合、チャンネル作成後までは上に書いたエラーメッセージがでてアプリでログインできなかったです。

mattermost-app

過去データのインポート

ブラウザ、アプリでログイン確認が出来たらエクスポートしておいた過去データをインポートしてい行きます。

# cd /opt/mattermost/bin
# ./mattermost import bulk /opt/mattermost_old/bin/bulk_data.json --apply

エラーが出た場合はこんな感じでUsageが最後に出てくるので出ていないことを確認しましょう。

Error: importUser: An account with that email already exists., invalid input: entity: User field: email value: XXXX
Usage:
  mattermost import bulk [file] [flags]

Examples:
  import bulk bulk_data.json

Flags:
      --apply                Save the import data to the database. Use with caution - this cannot be reverted.
  -h, --help                 help for bulk
      --import-path string   A path to the data directory to import files from.
      --validate             Validate the import data without making any changes to the system.
      --workers int          How many workers to run whilst doing the import. (default 2)

Global Flags:
  -c, --config string   Configuration file to use.

インポートされたか確認する

システムコンソールを開き、ユーザ管理からユーザを選択します。
インポートが成功していた場合はこのようにユーザが追加されているはずです。

mattermost-imported-users

チャンネルはどこ行った?と思われるでしょうが、いまログインしているのは新規ユーザですので表示されていないだけです。
まずは過去バージョンの管理者パスワードを初期化していきます。ログインできないから!!!!
以下のようにパスワード初期化を選択後、ダイアログに新規パスワードを入力してリセットボタンを押します。

mattermost-init-pw
mattermost-init-pw-dialog

これでパスワードがリセットされたので一旦ログアウトし、リセットしたユーザでログインしなおします。
すると以前使用していたチャンネルが表示されているはずです。
あとは新規インストール時のユーザが不要であれば削除、管理者として残すならチャンネルに招待してあげる等すると良いと思います。

mattermost-relogin

ちょっと問題が発生してた

先ほどログインできていたのにアプリからのログインに失敗するようになりました。
日本語化したので文言違いますけど “あなたのセッションは有効期限が切れました。再度ログインしてください。” と。
んん?うーん・・・。さっきも出てたし設定ダメなのかもしれない。
Apache辺りかなとは思うけどひとまずブラウザなら問題なしなので調査は後日。

追記
よくわからないけど解決できたので記録を残しました。
MattermostのWindowsアプリからログインすると延々とセッション切れとなりログインできなかった

以上です。

関連記事

コメント

タイトルとURLをコピーしました