Gitback
Do you have backups of your production web/mail/db configs? crontabs?
How fast could you configure a production machine if everything was lost?
Gitback allows you to version arbitrary files and/or directories in a git repository. You just need to include the gem and write a brief ruby script that indicates the files/directories you'd like to backup. Then, run the script via cron. Gitback will take care of a adding/commiting/pushing whenever your files are modified.
Requirements
- git (http://git-scm.com) tested with 1.7.4
- grit (http://github.com/mojombo/grit) tested with 2.4.1
Install
$ gem install gitback
Usage
Here's a basic example of a script using gitback:
require 'rubygems'
require 'gitback'
Gitback::Repository.new '/var/config-backup/' do |repo|
repo.backup '/opt/nginx/conf/nginx.conf'
repo.backup '/etc/mysql/'
repo.backup '/etc/memcached.conf'
repo.backup '/etc/ssh/sshd_config'
repo.backup '/var/spool/cron/crontabs/'
end
This will check these files for additions/changes. If a file has been added or changed, gitback will commit it.
For example, the nginx config file would be saved to the following location:
/var/config-backup/opt/nginx/conf/nginx.conf
Notice that '/etc/mysql' is a directory. Gitback accepts directories and will copy everything within that directory into the git repository.
Namespaces
Namespaces are also supported. If you'd like to use the same repository for multiple servers you can specify a namespace like this:
Gitback::Repository.new '/var/config-backup/' do |repo|
repo.namespace 'server1.domain.com' do
repo.backup '/opt/nginx/conf/nginx.conf'
end
end
This will save the file to the following location:
/var/config-backup/server1.domain.com/opt/nginx/conf/nginx.conf
Remote Git Repositories
Gitback is intended to be used with remote git repositories. If your git repository is tracking a remote branch, gitback will push changes to the remote after each commit.
Running Via Cron
There's nothing special about a gitback script. In order for it to backup your files you'll need to run it via the command line. I suggest setting up a cron job to do this for you at regular intervals.
Copyright
Copyright (c) 2010 Bryce Thornton. See LICENSE for details.