Backup Remote
===========
Backup-remote gem extends [Backup gem](https://github.com/backup/backup) to perform backups on remote servers.

If you use backup gem you should run `backup perform` on the machine where resources (files, databases) are located.

This gem adds support for models to perform backups on a remote server.



Backup is a system utility for Linux and Mac OS X, distributed as a RubyGem, that allows you to easily perform backup
operations. It provides an elegant DSL in Ruby for _modeling_ your backups. 
Backup has built-in support for various databases, storage protocols/services, syncers, compressors, encryptors and notifiers which you can mix and match. 

The gem adds the following model components:
* Remote Archive
* Remote MySQL database
* Remote data




# How it works

Backup process:

* specify server connection options in your model

```
Model.new(:my_backup, 'My Backup') do
  database RemoteMySQL do |db|
    # options for server
    db.server_host = "server1.com"
    db.server_ssh_user = "username"
    db.server_ssh_password = "mypwd"
    db.server_ssh_key = "/path/to/ssh/key"
    
    # other options for resource
    ...
    
  end
  ...    
end
````

* perform backup - run script `backup peform` from the backup server
```
backup-remote perform -t my_backup
```

* it will connect to the remote server by SSH and run command remotely which creates a backup file
* then it downloads the archive file from the remote server to the backup server
* finally, it performs all operations with backup file, like storing file to storages, etc. as gem backup does.




It uses SSHKit to connect to server by SSH.



# Options

Options for SSH connection:
* server_host - host name or IP
* server_ssh_user - user name to connect by SSH
* server_ssh_password - not used if server_ssh-key is provided
* server_ssh_key - (optional) - path to ssh key



# Archives

## Archive files on a remote server

* Use remote_archive in your model


```

Model.new(:my_server_files_backup, 'Backup files') do

  remote_archive :files do |archive|
    archive.server_host = "myserver.com"
    archive.server_ssh_user = "user"
    archive.server_ssh_password = "pwd"


    # archive options - the same options as for archive
    # see  http://backup.github.io/backup/v4/archives/


  end
  
  ...
  
end  
    
```

Options:
* server_command - command to create archive file


# Databases

## Backup database on a remote server

* Now it is implemented the following databases:
* RemoteMySQL


### RemoteMySQL

```
Model.new(:my_backup, 'My Backup') do
  database RemoteMySQL do |db|
    # options for server
    db.server_host = "server1.com"
    db.server_ssh_user = "username"
    db.server_ssh_password = "mypwd"
    db.server_ssh_key = "/path/to/ssh/key"
    
    ### options for MySQL 
    # see http://backup.github.io/backup/v4/database-mysql/
    
    ...
  end
  ..
end

````



# Custom data on remote server

* Run custom command on the remote server to create a backup archive

* Specify command to run to generate archive file on the remote server

* This command should create an archive file with filename specified in server_path option.


```
Model.new(:my_server_data_backup, 'Backup data') do

  remote_data :mydata do |archive|
    archive.server_host = "myserver.com"
    archive.server_ssh_user = "user"
    archive.server_ssh_password = "pwd"
    
    
    archive.command = "--any command to generate backup archive file--"
    # archive.command = "echo '1' > /tmp/backup.txt"
    
    archive.server_path = "/path/to/archive.tar.gz"
    # archive.command = "/tmp/backup.txt"


    
  end
  
  ...
  
end  
    
```


# Backup gem
[Installation]:  http://backup.github.io/backup/v4/installation
[Release Notes]: http://backup.github.io/backup/v4/release-notes
[Documentation]: http://backup.github.io/backup/v4