@shiftcode/backup-mongodb

const backup = require('lib');

Usage no npm install needed!

<script type="module">
  import shiftcodeBackupMongodb from 'https://cdn.skypack.dev/@shiftcode/backup-mongodb';
</script>

README

mongodb backup

Implementação

const backup = require('lib');

backup({
  mongo: { 
    connectionString: 'mongodb://localhost:27017/dbname', 
    dest: '/home/bitnami/dump',
  },
  aws: {
    accessKeyId: 'xxxxxxx',
    secretAccessKey: 'xxxxxxx',
    region: 'xxxxxxx',
    bucket: 'xxxxxxx',
  },
  cron: { //se nao passar esse argumento, vai executar somente uma vez.
    cronTime: '00 0 0 1 * *', // todo dia 1 de cada mes
    timeZone: 'America/Sao_Paulo',
  }
})

Preparando base de produção e homologação

Pra usar no EC2, é preciso criar o usuário na base admin também, com essa role (que deve ser criada tb):

1. Criar regra no db admin (ao logar no mongo vc já está no admin por padrão):

use admin
db.createRole({
  role: 'lockUnlock',
  roles: [],
  privileges: [
    {
      resource: {
        cluster: true
      },
      actions: [
        'fsync',
        'unlock'
      ]
    }
  ]
});

2. Criar usuário app na base admin com a regra lockUnlock

  • Substitua xxx pelo nome da base alvo do backup;
  • Se você estiver executando o backup em mais de uma base, adicione mais 3 regras (xxx) para a 2ª base incluindo as regras especificas para ela também.
db.createUser({ 
    user: "app", 
    pwd: "entr3m0ng0", 
    roles: [
        {
            "role" : "userAdmin",
            "db" : "xxx"
        },
        {
            "role" : "dbAdmin",
            "db" : "xxx"
        },
        {
            "role" : "readWrite",
            "db" : "xxx"
        },
        {
            "role" : "lockUnlock",
            "db" : "admin"
        }
    ] 
});

3. Caso o usuário app já exista no db admin, associe as regras faltantes a ele:

  • Novamente, substitua o xxx com o nome da base desejada.
db.grantRolesToUser(
    "app",
    [
        {
            "role" : "userAdmin",
            "db" : "xxx"
        },
        {
            "role" : "dbAdmin",
            "db" : "xxx"
        },
        {
            "role" : "readWrite",
            "db" : "xxx"
        },
        {
            "role" : "lockUnlock",
            "db" : "admin"
        }
    ]
 )