目的
「大人の事情でSlackが使えない」という話をよく聞きます、うちの会社も例外ではなく同じ悩みを抱えておりRocket.Chatを使っています。OSSで使えるSlackっぽいチャットツールでは、当時は人気だった?(GitHubリポジトリのスター数が多かった)という印象を持っていた。
他人が構築してくれていた、仕事でコミューニケーションツールとして使っているRocket.Chatのバージョンが古かったのでバージョンアップしようと考えたけど、ついでになので他と環境を統一する目的を含めDocker Containersへ移行してみた。ちなみに移行元も移行先も同じサーバ。たぶん誰の役にも立たない情報だと思うけど自分のメモのため。
前提
・Rocket.Chat
社員(約50名)のコミュニケーションツール。
バージョンアップ前:0.70.0
バージョンアップ後:2.2.0
・OS
Amazon Linux 4.14.104-95.84.amzn2.x86_64
・その他
Docker and Docker-Compose はインストール済み。
バージョンアップ前のRocket.Chatは公式:Manual Installationを参考にインストール&起動済み。
バージョンアップ後のRocket.Chatは公式:Docker Containersを参考にインストール&起動済み。
バージョンアップ前とバージョンアップ後のRocket.Chatは異なるポート番号(10443と3000
とか)で起動している。
バージョンアップ前サービスの停止
サービスの停止と自動起動の停止
sudo systemctl disable mongod && sudo systemctl stop mongod
sudo systemctl disable rocketchat && sudo systemctl stop rocketchat
mongoDB のバックアップとリストア
docker-compose.ymlから、バックアップ先のディレクトリ(mongoDBのdockerがマウントしているディレクトリ)を確認しておく。
今回の環境では「<dockerホーム>/data/dump/」としています。
バックアップ先の確認
mongo:
image: mongo:4.0
restart: unless-stopped
volumes:
- ./data/db:/data/db
- ./data/dump:/dump 👈今回はココです
バックアップ
バージョンアップ前サーバ(ローカル)でmongodumpコマンドを使い、出力先のディレクトリと対象となるDB名を指定してバックアップ。
sudo mkdir <dockerホーム>/data/dump/mongodump
sudo mongodump -o <dockerホーム>/data/dump/mongodump -d rocketchat
mongoDBのDockerコンテナの中に入る
コンテナ内でbashを起動して作業を行う
-i :Keep STDIN open even if not attached
指定したコマンドを実行した後、コンテナの標準入力をDockerホストの標準入力と接続。
-t :Allocate a pseudo-TTY
コンテナ内で擬似TTYを割り当てて、Dockerホストの標準出力と接続。
cd <dockerホーム>
sudo docker exec -it rocketchat_mongo_1 /bin/bash
リストア
リストアコマンドmongorestoreでリストア対象のDB名とバックアップデータがあるディレクトリを指定する。今回の環境ではリストア先に既にDBがあるため「--drop」オプションを付け、データベースを削除する。
mongorestore -d rocketchat /dump/mongodump/rocketchat/ --drop
exit
バージョンアップ後サービスの再起動
sudo docker-compose down
sudo docker-compose up -d
sudo docker-compose ps
sudo docker-compose logs
結果
バージョンアップ後サービスの初回アクセス時にセットアップウィザードが出てきた時はちょっと焦ったけど適当にスキップして終了した。
データ移行は無事に完了したっぽい。