rocketchat聊天室迁移小记: 从snap到docker

分享讨论IT相关的内容
回复
头像
BobMaster
初入江湖
初入江湖
帖子: 470
注册时间: 2020年 12月 7日 08:05
来自: 神秘的东方
我的状态: 🎯
为圈友点赞: 80 次
被赞次数: 34 次
联系:

rocketchat聊天室迁移小记: 从snap到docker

帖子 BobMaster »

前言

contabo的服务器一年期快满,我又不想续费了,这就得着手准备各种程序的备份迁移。
而聊天室rocketchat最开始使用的是snap搭建,我觉得更新太慢,且使用的引擎也较旧,故琢磨着迁移至docker部署。
官方文档过于简陋,且使用的数据库和引擎版本相对较低,然后就有了这篇文章《rocketchat聊天室迁移小记: 从snap到docker》

迁移过程

迁移过程主要就是备份数据库、还原数据库。

1. 先使用snap备份数据

代码: 全选

sudo snap stop rocketchat-server.rocketchat-server
sudo snap run rocketchat-server.backupdb
将得到的压缩包拷贝至新服务器上

2. 在新服务器上还原数据库并部署rocketchat
假定你的PWD路径是: /opt/rocketchat
这里分两步走,第一次只创建mongo的服务,然后用命令行将数据库还原至这个新创建的mongodb容器中

代码: 全选

version: '2'

services:
  mongo:
    image: mongo:latest
    restart: unless-stopped
    volumes:
     - ./data/db:/data/db
     - ./data/dump:/dump
    command: mongod  --oplogSize 128 --replSet rs0 --storageEngine=wiredTiger
然后docker-compose up 起来,接下来就是迁移数据库。
将前面的压缩包解压,你会得到一个dump/parties的文件夹,将parties目录移动至/opt/rocketchat/data/dump目录下
使用下面的命令迁移数据库
### sudo docker exec {container 名称,可以通过docker ps获取} sh -c 'exec mongorestore --drop /dump'

代码: 全选

sudo docker exec mongo sh -c 'exec mongorestore --drop /dump'
数据库还原之后,docker-compose down下来,下面创建完整的rocketchat服务。
PS: 记得将root_url换成你自己的域名

代码: 全选

version: '2'

services:
  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:latest
    command: >
      bash -c
        "for i in `seq 1 30`; do
          node main.js &&
          s=$$? && break || s=$$?;
          echo \"Tried $$i times. Waiting 5 secs...\";
          sleep 5;
        done; (exit $$s)"
    restart: unless-stopped
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://your_domain_
      - MONGO_URL=mongodb://mongo:27017/parties
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
#       - MAIL_URL=smtp://smtp.email
#       - HTTP_PROXY=http://proxy.domain.com
#       - HTTPS_PROXY=http://proxy.domain.com
    depends_on:
      - mongo
    ports:
      - 3000:3000

  mongo:
    image: mongo:latest
    restart: unless-stopped
    volumes:
     - ./data/db:/data/db
     - ./data/dump:/dump
    command: mongod  --oplogSize 128 --replSet rs0 --storageEngine=wiredTiger

  # this container's job is just run the command to initialize the replica set.
  # it will run the command and remove himself (it will not stay running)
  mongo-init-replica:
    image: mongo:latest
    command: >
      bash -c
        "for i in `seq 1 30`; do
          mongo mongo/parties --eval \"
            rs.initiate({
              _id: 'rs0',
              members: [ { _id: 0, host: 'localhost:27017' } ]})\" &&
          s=$$? && break || s=$$?;
          echo \"Tried $$i times. Waiting 5 secs...\";
          sleep 5;
        done; (exit $$s)"
    depends_on:
      - mongo
然后docker-compose up起来,如果没问题就成功啦!

遇到的坑

  1. 直接使用官方文档给的docker-compose.yml,我up起来数据库报连接错误,根本运行不了。
  2. mongo的--smallfiles参数在新版已无
  3. --storageEngine=mmapv1引擎在未来会被放弃,所以我搞不懂rocketchat文档为咋这么古老~

这篇文章仅作为记录,方便未来查看,nginx反代、SSL等的配置我就不说了。

备份脚本

既然用上了docker,经常性的备份肯定是必要的,下面贴出我自用的备份脚本

代码: 全选

# #!/usr/bin/env bash
NAMEDATE=`date +%F_%H-%M_%s`_`whoami` && echo $NAMEDATE
/usr/bin/docker exec rocketchat-mongo-1 sh -c "mkdir /dump/$NAMEDATE"
/usr/bin/docker exec rocketchat-mongo-1 sh -c "mongodump -d parties --gzip -o /dump/$NAMEDATE" && echo "Database Dumped"
mv /opt/rocketchat/data/dump/$NAMEDATE /root/backup/rocketchat/ && echo "Database moved"
mkdir /root/backup/rocketchat/$NAMEDATE-tar
tar czf /root/backup/rocketchat/$NAMEDATE-tar/db-collections.tar.gz /root/backup/rocketchat/$NAMEDATE && echo "create tar.gz"
chmod -R 0644 /root/backup/rocketchat/$NAMEDATE-tar/* && echo "Directory Permission Restored"
/usr/bin/rclone copy /root/backup/rocketchat/$NAMEDATE-tar "gdrive:rocketchat Backup/$NAMEDATE"
cd /root/backup/rocketchat; find . -type d -mtime +2 -exec rm -rf {} \; 2>&1 && echo "Directory older than 2 days Deleted !!"
exit 0
大致步骤就是
1. 生成日期,并以此创建文件夹
2. mongodump导出数据库并压缩,但是得到的是分块压缩内容

代码: 全选

❯ dust
 4.0K   ┌── ufsTokens.metadata.json.gz                │                                                                                                              █ │   0%
 4.0K   ├── users.metadata.json.gz                    │                                                                                                              █ │   0%
 4.0K   ├── usersSessions.bson.gz                     │                                                                                                              █ │   0%
 4.0K   ├── usersSessions.metadata.json.gz            │                                                                                                              █ │   0%
 8.0K   ├── rocketchat_livechat_agent_activity.bson.gz│                                                                                                              █ │   0%
  12K   ├── rocketchat_subscription.bson.gz           │                                                                                                              █ │   0%
  16K   ├── rocketchat_apps.bson.gz                   │                                                                                                              █ │   0%
  16K   ├── rocketchat_apps_packages.chunks.bson.gz   │                                                                                                              █ │   0%
  16K   ├── rocketchat_room.bson.gz                   │                                                                                                              █ │   0%
  20K   ├── rocketchat_uploads.files.bson.gz          │                                                                                                              █ │   0%
  20K   ├── users.bson.gz                             │                                                                                                              █ │   0%
  32K   ├── rocketchat_permissions.bson.gz            │                                                                                                              █ │   0%
  64K   ├── rocketchat_sessions.bson.gz               │                                                                                                              █ │   0%
  80K   ├── rocketchat_settings.bson.gz               │                                                                                                              █ │   0%
 116K   ├── rocketchat_uploads.bson.gz                │                                                                                                              █ │   0%
 160K   ├── rocketchat_avatars.chunks.bson.gz         │                                                                                                              █ │   0%
 236K   ├── assets.chunks.bson.gz                     │                                                                                                              █ │   0%
 1.5M   ├── rocketchat_message.bson.gz                │                                                                                                              █ │   1%
 1.9M   ├── rocketchat_statistics.bson.gz             │                                                                                                              █ │   1%
 2.1M   ├── rocketchat_oembed_cache.bson.gz           │                                                                                                              █ │   1%
 2.7M   ├── rocketchat__trash.bson.gz                 │                                                                                                              █ │   1%
 6.0M   ├── custom_emoji.chunks.bson.gz               │                                                                                                            ███ │   2%
 286M   ├── rocketchat_uploads.chunks.bson.gz         │     ██████████████████████████████████████████████████████████████████████████████████████████████████████████ │  95%
 301M ┌─┴ .                                           │███████████████████████████████████████████████████████████████████████████████████████████████████████████████ │ 100%
3. 将mongodump导出的数据库移动至专门用于备份的文件夹
4. 创建一个文件夹用于专门存储分块文件的压缩包,即

代码: 全选

mkdir /root/backup/rocketchat/$NAMEDATE-tar
tar czf /root/backup/rocketchat/$NAMEDATE-tar/db-collections.tar.gz /root/backup/rocketchat/$NAMEDATE
5. 将打包到一起的文件上传到Google云盘

代码: 全选

/usr/bin/rclone copy /root/backup/rocketchat/$NAMEDATE-tar "gdrive:rocketchat Backup/$NAMEDATE"
6. 清除超过2天的旧文件夹(备份)

代码: 全选

cd /root/backup/rocketchat; find . -type d -mtime +2 -exec rm -rf {} \; 2>&1 && echo "Directory older than 2 days Deleted !!"

设置个定时任务,每天执行一次:

代码: 全选

0 0 * * * /usr/bin/bash /opt/shell/rocketchat_backup.sh >> /root/backup/log/rocketchat_backup.log 2>&1;

恢复备份

1. 将打包的压缩文件,解压

代码: 全选

tar -xf db-collections.tar.gz
2. 将解压后的文件夹移动至mongodb dump的挂载目录下

代码: 全选

mv parties /opt/rocketchat/data/dump
3. 还原备份

代码: 全选

docker exec -it rocketchat-mongo-1 bash
mongorestore --gzip --drop /dump
4. 重启容器即可

参考文献:
https://docs.rocket.chat/quick-start/in ... er-compose
https://forums.rocket.chat/t/how-to-doc ... ongo/11155
https://docs.mongodb.com/database-tools/mongorestore
https://discuss.flarum.org/d/25238-backup-flarum
做个纯粹的人
回复

回到 “玩机交流”