All Projects → vesparny → borgjs

vesparny / borgjs

Licence: MIT license
📦 A tiny wrapper for BorgBackup to automate your backup workflow

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to borgjs

MailcowBackup
Script to backup/restore Mailcow and the host system using borgbackup. Handles 503 error page generation, mailflow stop/restart, SQL database dump, borg backup and prune and integrates with Logwatch for easy monitoring.
Stars: ✭ 28 (-9.68%)
Mutual labels:  backup, borgbackup
borg-rclone-autobackup
Easily automate backups using Borg + RClone
Stars: ✭ 25 (-19.35%)
Mutual labels:  backup, borgbackup
btrfs-borg
btrfs-borg makes snapshots and backs up a btrfs snapshotted subvolumes and LXC containers using Borg
Stars: ✭ 22 (-29.03%)
Mutual labels:  borg, borgbackup
ansible-role-borgbackup
No description or website provided.
Stars: ✭ 13 (-58.06%)
Mutual labels:  backup, borgbackup
aws-utils
This repository provides utilities which are used at MiQ.
Stars: ✭ 20 (-35.48%)
Mutual labels:  backup
QQ-History-Backup
QQ聊天记录备份导出,支持无密钥导出,图片导出。无需编译有GUI界面。Backup Chating History of Instant Messaging QQ.
Stars: ✭ 300 (+867.74%)
Mutual labels:  backup
BackupAssistant
Backup Assistant helps you to backup your files (like database backups or log files) to FTP Server. It works on any platform. ( Windows, Linux and Mac.)
Stars: ✭ 32 (+3.23%)
Mutual labels:  backup
proxmox-tools
📦 A collection of stuff that I and others wrote for Proxmox 📦
Stars: ✭ 112 (+261.29%)
Mutual labels:  backup
dcs-tools
Tools for making remote Linux node management easy
Stars: ✭ 34 (+9.68%)
Mutual labels:  backup
mup-data-backup
MongoDB backup and restore which is deployed via mup.
Stars: ✭ 27 (-12.9%)
Mutual labels:  backup
note
just note , take down what ever i want
Stars: ✭ 62 (+100%)
Mutual labels:  backup
otp-authenticator-webapp
A 'Google Authenticator' like Single Page Application
Stars: ✭ 69 (+122.58%)
Mutual labels:  backup
vmSafeguard
vmSafeguard is a management, planning, backup system for a Vmware ESXi(s) solution, orchestrated through a Web Admin Panel. RTFM for more info. Under develop since Jun 2020
Stars: ✭ 20 (-35.48%)
Mutual labels:  backup
WindowsFileHistoryCleaner
Simple command line executable to turn a File History share back into a snapshot of files
Stars: ✭ 15 (-51.61%)
Mutual labels:  backup
fb-export
Export (most) of your Facebook data using Node.js and the Graph API.
Stars: ✭ 21 (-32.26%)
Mutual labels:  backup
authy-extractor
Extract 2FA tokens from Authy.
Stars: ✭ 30 (-3.23%)
Mutual labels:  backup
docker-vackup
Script to easily backup and restore docker volumes
Stars: ✭ 102 (+229.03%)
Mutual labels:  backup
cylon-deb
TUI menu driven bash shell script to update and maintain a Debian based Linux distro.
Stars: ✭ 23 (-25.81%)
Mutual labels:  backup
ebs-backup
Backup EBS Volumes
Stars: ✭ 34 (+9.68%)
Mutual labels:  backup
elasticsearch-shell-backup
Elasticsearch 2, 5 shell script backup utils.
Stars: ✭ 18 (-41.94%)
Mutual labels:  backup

📦 borgjs

A tiny wrapper for BorgBackup to automate your backup workflow

Gitter npm Travis

npm David JavaScript Style Guide

Overview

Please note borgjs needs you to run node >=6 and has been tested using borg

  • v1.0.7
  • v1.0.8
  • v1.0.9
  • v1.0.10
  • v1.1.4

borgjs is a nodejs command line tool for BorgBackup.

After having tried a lot of backup solutions for my data, I've been using Borg for quite a while. It's rock solid and never let me down. It supports compression, de-duplication and encryption.

Backups should be as boring as possible, that's why I've created this tool in order to automate and constantly monitor the whole process, making it a little bit more user friendly.

Instead of writing complex bash scripts you can now just write a declarative configuration file, run borgjs in a crontab and forget about it.

It will take care of your backup workflow, sending you status reports through different possible channels.

Features

  • backup creation
  • prune old backup according to a set of rules declared in the configuration file.
  • check backups for consistency and integrity.
  • onFinish hook to do anything you want after finishing a backup.
  • lockfile system to prevent concurrent backup process running in the same destination.
  • output borg messages to stdout for easy logging.
  • highly configurable.
  • allow to fully customize borg commands and environment variables.

Usage CLI

In order to use borgjs, you need to configure borg before. This is an easy step, just follow the installation guide on the borg website.

Initialize an empty borg repository (for more details see the borg quickstart guide)

$ borg init /path/to/repo

Install borgjs globally

$ npm i -g borgjs

Running a backup is as easy as creating a borg repository and run

$ borgjs -c /User/me/borgjs.config.js

or

$ borgjs $(date +%Y-%m-%d-%H%M%S) -c /User/me/borgjs.config.js >> /Users/me/logs/$(date +%Y-%m-%d-%H%M%S).log

in case you want to specify the archive name and log to a file (useful if you run in as a cronjob).

$ borgjs --help

  A tiny wrapper for BorgBackup to automate your backup workflow

  Usage
  $ borgjs <archive><options>

Options
  -c, --config         config file path

Examples
  # run borgjs
  $ borgjs -c=/User/me/borgjs.config.js

  #run borgjs specifying the archive name, and log output to a file
  $ borgjs $(date +%Y-%m-%d-%H%M%S) -c /path/to/your/borgjs.config.js >> $(date +%Y-%m-%d-%H%M%S).log

Usage API

You can also use borgjs programmatically:

const borgjs = require('borgjs')
const config = {
  repository: '/Users/arny/Desktop/test/',
  paths: [
    '/Volumes/External/'
  ]
}
const archiveName = new Date().toString()

borgjs(config, archiveName)
.then(() => console.log('success'))
.catch((err) => console.log('error', err))

onFinish hook

By defining an onFinish callback function in the configuration file, it's possible to run any arbitrary code when a backup finishes.

// the config file
module.exports = {
  onFinish: function (err, data, done) {
    if (err) {
      console.log('An error happened', err)
    } else {
      console.log(`Archive ${data.archiveName} created.`)
    }
    // invoke the done callback to let the process terminate properly
    done()
  }
}

It's possible to use the onFinish callback to send emails or notifications about the executed backup (see the paragraph below for an example)

Configuration

module.exports = {
  // Specify an alternative absolute path for the borg executable
  // defaults to the one in $PATH
  // borgPath: '',

  // Borg repository path
  // can be remote or local
  // see http://borgbackup.readthedocs.io/en/stable/usage.html#borg-init
  // e.g. '/Users/me/Desktop/borg_backup' or '[email protected]:borg_backup'
  repository: '', // MANDATORY

  // An array of absolute paths to include in the backup
  // paths that do not exist will be excluded (useful when a network share is not mounted)
  paths: [ // MANDATORY
    //  '/Users/me',
    //  '/etc
  ],

  // An array of files/directories to exclude from backup
  // exclude: [
  //  '*/node_modules',
  //  '*.DS_Store'
  // ],

  // A prefix for backup archives
  // archivePrefix: 'backup-',

  // Create backup archive
  // Use the options array to pass any options supported by borg create
  // See https://borgbackup.readthedocs.org/en/stable/usage.html#borg-create
  create: {
    options: [
     '--compression', 'lz4',
     '--filter', 'AME?'
    ]
  },
  // Check repo consistency
  // Use the options array to pass any options supported by borg check
  // See https://borgbackup.readthedocs.org/en/stable/usage.html#borg-check
  // check: {
  //  options: []
  // },

  // Retention policy for pruning old backups
  // Use the options array to pass any options supported by borg prune
  // https://borgbackup.readthedocs.org/en/stable/usage.html#borg-prune for details.
 //  prune: {
 //   options: [
 //    '-d', 30,
 //    '-w', 30,
 //    '--keep-within', '31d'
 //   ]
 // }

  // Set the following environment variables
  // See https://borgbackup.readthedocs.io/en/stable/usage.html#environment-variables
  env: {
    BORG_REMOTE_PATH: 'borg1',
    BORG_PASSPHRASE: 'passphrase'
  },
  // the onFinish callback
  onFinish: function (err, data, done) {
    const message = err
      ? 'the backup failed'
      : `the archive ${data.archiveName} has been created`
    var execSync = require('child_process').execSync

    const command = `
        curl -s --user 'api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0' \
        https://api.mailgun.net/v3/samples.mailgun.org/messages \
        -F from='Excited User <[email protected]>' \
        -F to='[email protected]' \
        -F subject='Hello from borgjs' \
        -F text='${message}'
        `
    try {
      execSync(command)
    } catch (e) {}
    // invoke the done callback to let the process terminate properly
    done()
  }
}

Automate

A backup is not a backup if it's not automated.

I personally use cronnix to schedule my backup sessions on my mac.

Recipes

  • Borg can store data on any remote host accessible over SSH. If you prefer to store your offsite backup in some other fancy cloud storage, you can always backup to a local target, then upload it anywhere using rclone

  • I personally use rsync.net for my backup, they also apply dirt cheap pricing model to borg users. Please note I'm not affiliated with them, I'm just an happy paying customer.

Change Log

This project adheres to Semantic Versioning.
Every release, along with the migration instructions, is documented in the CHANGELOG.md file.

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].