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: [メールアドレス]
アクセス後、テスト用のチャンネルを作成します。
チャンネル作成後、アプリでもログイン可能か確認していきます。
私の場合、チャンネル作成後までは上に書いたエラーメッセージがでてアプリでログインできなかったです。
過去データのインポート
ブラウザ、アプリでログイン確認が出来たらエクスポートしておいた過去データをインポートしてい行きます。
# 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.
インポートされたか確認する
システムコンソールを開き、ユーザ管理からユーザを選択します。
インポートが成功していた場合はこのようにユーザが追加されているはずです。
チャンネルはどこ行った?と思われるでしょうが、いまログインしているのは新規ユーザですので表示されていないだけです。
まずは過去バージョンの管理者パスワードを初期化していきます。ログインできないから!!!!
以下のようにパスワード初期化を選択後、ダイアログに新規パスワードを入力してリセットボタンを押します。
これでパスワードがリセットされたので一旦ログアウトし、リセットしたユーザでログインしなおします。
すると以前使用していたチャンネルが表示されているはずです。
あとは新規インストール時のユーザが不要であれば削除、管理者として残すならチャンネルに招待してあげる等すると良いと思います。
ちょっと問題が発生してた
先ほどログインできていたのにアプリからのログインに失敗するようになりました。
日本語化したので文言違いますけど “あなたのセッションは有効期限が切れました。再度ログインしてください。” と。
んん?うーん・・・。さっきも出てたし設定ダメなのかもしれない。
Apache辺りかなとは思うけどひとまずブラウザなら問題なしなので調査は後日。
追記
よくわからないけど解決できたので記録を残しました。
MattermostのWindowsアプリからログインすると延々とセッション切れとなりログインできなかった
以上です。
コメント