Project Page at Digital Ocean, comment or vote for this project.
Use this tool to backup DigitalOcean droplet’s via snapshot method, on the fly!
If your looking for fully managed DigitalOcean backups we recomend SnapShooter which supports Droplet and backups.
- 20.08.17: Change
- 03.08.16: DO now automagically keeps our droplets running when snapshot is processing, so:
shutdownnow disabled by default, no downtime anymore,
If you want
- 08.01.16: now we have to use DO API V2 only, because V1 is not work anymore.
- 17.10.15: now we use DO API V2 by default, due V1 deprecation at 11.2015.
Here are some features:
- Multiple threads out of the box, no matter how many droplets you have.
- Snapshots Auto-Cleanup.
- Auto-Boot Droplet if Snapshot Event fails or encounters a bad connection exception.
- Special binaries for cron and command-line, Homebrew, and standalone installers.
- Mail notifications when a snapshot fails or the maximum number of snapshots is reached for a droplet or droplets.
- Custom mail settings (You can set Pony mail settings).
- Stop mode (automatically stop creating new snapshots when the maximum is reached).
- Timeout option for long requests or uncaught loops. Defaults to 600 seconds, but can be changed.
- Logging into selected directory.
- Verbose mode for research.
- Quiet mode for silence.
- Ruby version 2.0.0 or higher
- JRuby 126.96.36.199 or higher
- Ruby version 1.9.3 or higher
- JRuby 1.7, 188.8.131.52 or higher
Install it yourself as:
$ gem install do_snapshot
System Wide Install (OSX, *nix):
$ sudo gem install do_snapshot
For OSX users (Homebrew Tap):
$ brew tap merqlove/do-snapshot && brew install do_snapshot $ do_snapshot -V
Standalone with one-liner:
$ wget https://assets.merqlove.ru.s3.amazonaws.com/do_snapshot/do_snapshot.tgz && sudo tar -xzf do_snapshot.tgz /usr/local/lib/ && sudo ln -s /usr/local/lib/do_snapshot/bin/do_snapshot /usr/local/bin/do_snapshot
Standalone pack for Unix/Linux users: Download
$ wget https://assets.merqlove.ru.s3.amazonaws.com/do_snapshot/do_snapshot.tgz # if not done. # Example Install into /usr/local $ tar -xzf do_snapshot.tgz /usr/local/ && ln -s /usr/local/do_snapshot/bin/do_snapshot /usr/local/bin/do_snapshot $ do_snapshot help
Standalone Zip pack for others: Download
Mainly it’s pretty simple:
$ do_snapshot --only 123456 -k 5 -c -v
Digitalocean API V2 (default):
You’ll need to generate an access token in Digital Ocean’s control panel at https://cloud.digitalocean.com/settings/applications
$ export DIGITAL_OCEAN_ACCESS_TOKEN="SOMETOKEN"
If you want to set keys without environment, than set it via options when you run do_snapshot:
$ do_snapshot --digital-ocean-access-token YOURLONGTOKEN
- Automate Taking Snapshots of Your DigitalOcean Droplets with DOSnapshot , Tyler Longren
- How to Automate Taking Digital Ocean Droplet Snaphot with DoSnapShot Script, Arun Kumar
keeping only 5 latest snapshots and cleanup older after new one is created. If creation of snapshots failed no one will be deleted. By default we keeping
$ do_snapshot --keep 5 -c
Keep latest 3 from selected droplet:
$ do_snapshot --only 123456 --keep 3
Working with all except droplets:
$ do_snapshot --exclude 123456 123457
Keep latest 5 snapshots, send mail notification instead of creating new one:
$ do_snapshot --keep 10 --stop --mail to:email@example.com
E-mail notifications disabled out of the box. For working mailer you need to set e-mail settings via run options.
--mail to:firstname.lastname@example.org from:email@example.com --smtp address:smtp.gmail.com port:25 user_name:someuser password:somepassword
0 4 * * 7 . /.../.digitalocean_keys && /.../bin/do_snapshot -k 5 -m to:TO from:FROM -t address:HOST user_name:LOGIN password:PASSWORD port:2525 -q -c
Real world example
$ bin/do_snapshot --only 123456 -k 3 -c -m to:TO from:FROM -t address:HOST user_name:LOGIN password:PASSWORD port:2525 -v Checking DigitalOcean Id's. Start performing operations Setting DigitalOcean Id's. Loading list of DigitalOcean droplets Working with list of DigitalOcean droplets Preparing droplet id: 123456 name: mrcr.ru to take snapshot. Shutting down droplet. Start creating snapshot for droplet id: 123456 name: mrcr.ru. Wait until snapshot will be created. Snapshot name: mrcr.ru_2014_07_18 created successfully. Droplet id: 123456 name: mrcr.ru snapshots: 4. For droplet with id: 123456 and name: mrcr.ru the maximum number 3 of snapshots is reached. Cleaning up snapshots for droplet id: 123456 name: mrcr.ru. Snapshot name: mrcr.ru_2014_07_17 delete requested. All operations has been finished. Sending e-mail notification.
> $ do_snapshot c aliases: s, snap, create Options: -p, [--protocol=1] # Select api version. # Default: 2 [--shutdown], [--no-shutdown] # Check if you want to stop your droplet before the snapshot. -o, [--only=123456 123456 123456] # Select some droplets. -e, [--exclude=123456 123456 123456] # Except some droplets. -k, [--keep=5] # How much snapshots you want to keep? # Default: 10 -d, [--delay=5] # Delay between snapshot operation status requests. # Default: 10 [--timeout=250] # Timeout in sec's for events like Power Off or Create Snapshot. # Default: 3600 -m, [--mail=to:firstname.lastname@example.org] # Receive mail if fail or maximum is reached. -t, [--smtp=user_name:email@example.com password:password] # SMTP options. -l, [--log=/Users/someone/.do_snapshot/main.log] # Log file path. By default logging is disabled. -c, [--clean], [--no-clean] # Cleanup snapshots after create. If you have more images than you want to `keep`, older will be deleted. -s, [--stop], [--no-stop] # Stop creating snapshots if maximum is reached. [--stop-by-power], [--no-stop-by-power] # Droplet stop method, by it's power status (instead of waiting for event completed state). -v, [--trace], [--no-trace] # Verbose mode. -q, [--quiet], [--no-quiet] # Quiet mode. If don't need any messages in console. [--digital-ocean-access-token=YOURLONGAPITOKEN] # DIGITAL_OCEAN_ACCESS_TOKEN. if you can't use environment. [--digital-ocean-client-id=YOURLONGAPICLIENTID] # DIGITAL_OCEAN_CLIENT_ID. if you can't use environment. [--digital-ocean-api-key=YOURLONGAPIKEY] # DIGITAL_OCEAN_API_KEY. if you can't use environment. Description: `do_snapshot` able to create and cleanup snapshots on your droplets. You can optionally specify parameters to select or exclude some droplets.
You can ask, “Why you made this tool?”
- First. I needed stable tool, which can provide for me automatic Snapshot feature for all of my Droplets via Cron planner.
- I don’t want to think how much snapshots for each droplet i have.
- I don’t wont to sleep when my droplets Offline!!! And i wanted tool which can BOOT back droplets, which failed to snapshot.
- Also i want to understand what’s going on if there some error. Mail is my choice. But logs also good.
- And … sure ;) We want to do it fast as rocket! :)
- more more more…
- So this tool can save a lot of time for people.
- Fork it ( https://github.com/merqlove/do_snapshot/fork )
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Add some feature')
- Push to the branch (
git push origin my-new-feature)
- Create a new Pull Request
$ rake spec
Copyright (c) 2017 Alexander Merkulov