heroku-mongo-backup — backup mongodb on Heroku and push it to S3 or FTP storage
heroku-mongo-backup does:
- Backup mongodb collections to one file;
- Compress backup file with gzip;
- Push backup to the specified S3 bucket or FTP server;
Why not mongodump command?
mongodump command is not available on Heroku side. If you don't want to setup third party backup service for every project heroku-mongo-backup may be helpful.
Configuration
For mongoid 4 add to the Gemfile: gem "heroku-mongo-backup", github: 'alexkravets/heroku-mongo-backup', branch: 'mongoid4'
, for the rest of mongoid versions add gem "heroku-mongo-backup"
- if everything's okay rake -T
command should show rake mongo:backup
rake tasks.
For S3 support heroku-mongo-backup requires s3
or aws-s3
or fog
library. One of those should be in Gemfile
, if you don't care add fog
it's seems to be the most advanced.
Configure heroku scheduler to run mongo:backup
rake task. Or if cron is used add backup task to /lib/tasks/cron.rake
file:
desc "This task is called by the Heroku cron add-on"
task :cron => :environment do
Rake::Task['mongo:backup'].invoke
end
Set Heroku environment variables:
heroku config:add S3_BACKUPS_BUCKET=_value_ S3_KEY_ID=_value_ S3_SECRET_KEY=_value_ MONGO_URL=_value_
On MONGO_URL place anyone of these is assaptable: MONGOHQ_URL or MONGOLAB_URI.
For FTP set these variables:
heroku config:add UPLOAD_TYPE=ftp FTP_HOST=_host_ FTP_PASSWORD=_pass_ FTP_USERNAME=_user_
Rake Commands
heroku run rake mongo:backup
If you want to automatically remove old backup files pass MAX_BACKUPS
parameter to the rake command:
heroku run rake mongo:backup MAX_BACKUPS=7
If you're uploading to S3, backup files will be stored as backups/YYYY-MM-DD_hh-mm-ss.gz
by default. To change the directory name, pass in the S3_BACKUP_DIR
parameter:
heroku run rake mongo:backup S3_BACKUP_DIR=daily
- Backup files would then be stored as
daily/backup-file-name.gz
instead ofbackups/backup-file-name.gz
.
Restore from backup:
heroku run rake mongo:restore FILE=backup-file-name.gz
If you want to restore from local file run:
rake mongo:restore LOCAL=/absolute/path/to/<backup-file.gz>
For Rails 2 add this to your Rakefile to import rake tasks:
import File.expand_path(File.join(Gem.datadir('heroku-mongo-backup'), '..', '..', 'lib', 'tasks', 'heroku_mongo_backup.rake'))
Gem Contributors
- alexkravets - slatestudio.com - gem itself with S3 support
- matyi - FTP support
- stefl - stef.io - Rails is not required for production
- moonhouse - moonhouse.se - default config improvement
- wolfpakz - Rails2 support
- solacreative - Max backups feature for aws/s3 and s3 gems
- aarti - minor fixes
- strayduy - Configurable S3 directory name