はじめに
2022年9月1日から、Slackのフリープランは過去90日間のメッセージ履歴とファイルストレージしか利用できなくなります。
そのため、過去90日より前を参照するには「Slackの有料化」or「別サービスへの移行」が必要になります。
ここでは「別サービスへの移行」として、SlackライクなMattermostへの移行手順をまとめます。
ざっくり手順
- Slackデータのエクスポート
- Slack APIの設定
- エクスポートファイルにメールアドレスと添付ファイルを付与
- Mattermostをデプロイ~初期設定
- Mattermost用に変換
- Mattermostへインポート
- 日本語検索できるように、MySQLのインデックス再作成
うまくいかなかった点
-
チャンネル名を移行できない
c01b7hbsvlp
といったランダムな文字列になる。 -
添付ファイルを移行できない
MaxFileSize
は問題ないはずなのに、Unable to upload file. File is too large.
と怒られ、諦めた。
環境
- Mac 12.3.1
- Docker Desktop 4.8.1
手順
1. Slackデータのエクスポート
管理者権限があれば、「設定と管理」->「ワークスペースの設定」で、右上に「データのインポート/エクスポート」が表示される。
2. Slack APIの設定
Migration guideの通り。
3. エクスポートファイルにメールアドレスと添付ファイルを付与
-
slack-advanced-exporterをダウンロード
/usr/local/bin
などに保存 -
エクスポートファイルにメールアドレスと添付ファイルを付与
slack-advanced-exporter --input-archive <SLACK EXPORT FILE> --output-archive export-with-emails.zip fetch-emails --api-token <SLACK TOKEN>
slack-advanced-exporter --input-archive export-with-emails.zip --output-archive export-with-emails-and-attachments.zip fetch-attachments
4. Mattermostをデプロイ~初期設定
- Dockerに登録
docker run --name mattermost-preview -d --publish 8065:8065 mattermost/mattermost-preview
- ユーザー、チームを登録
http://localhost:8065 へアクセス
5. Mattermost用に変換
-
mmetlをダウンロード
/usr/local/bin
などに保存 -
Mattermost用に変換
mmetl transform slack --team <TEAM NAME> --file export-with-emails-and-attachments.zip --output mattermost_import.jsonl
- bulk-export-attachmentsフォルダをdataフォルダへ入れてzipファイル化
Mattermostへインポート時にエラーになるため。
mkdir data
mv bulk-export-attachments data
zip -r mattermost-bulk-import.zip data mattermost_import.jsonl
また、Mattermostへインポート時にUnable to upload file. File is too large.
といったエラーになる場合、Mattermostの設定(MaxFileSize
)を確認する。
私の場合、設定に問題がなくてもエラーになったため、添付ファイルは諦めて、cp /dev/null bulk-export-attachments/xxxxxxxxxx
といったように、0バイトのファイルに書き換えた。
6. Mattermostへインポート
-
ホスト側からコンテナ側へファイルをコピー
sudo docker ps
でコンテナのIDを確認し、sudo docker cp ...
にて。 -
コンテナ側でインポート前にログイン
cd /mm/mattermost/bin
mmctl auth login http://localhost:8065
「Connection name」は無視、「Username」「Password」はMattermostへの登録内容を入力する。
- コンテナ側でインポート
mmctl import upload ./mattermost-bulk-import.zip
mmctl import list available
mmctl import process <IMPORT FILE NAME>
mmctl import job show <JOB ID> --json
- インポート後の確認
インポートが終わればMattermostのCHANNELSに表示される。
もし、SlackとMattermostでメールアドレスが異なる場合、チーム名の横の「+」->「Browse Channels」から「Join」する。
7. 日本語検索できるように、MySQLのインデックス再作成
- Dockerにvimをインストール
apt-get update
apt-get install vim
- /etc/mysql/my.cnfに以下を追加
[mysql] default-character-set = utf8mb4
[mysqld] character-set-server = utf8mb4
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
- MySQLもしくはdockerごと再起動し、以下のSQLを実行
mysql> ALTER TABLE Posts DROP INDEX idx_posts_message_txt;
mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER ngram COMMENT 'ngram reindex';
参考にした記事