Now that my VestaCP install is north of 100GB, backups are becoming more challenging.

To achieve an extra level of security, I started backing up my server to S3 using Restic.

Here are the steps I took to achieve this.

1. SSH into your box.
ssh [email protected]

2. Install Restic
apt install restic

*if you don’t have AWS CLI installed, here is a handy tutorial

3. Tell your box what credentials to use when connecting to AWS S3 by copy ‘n pasting this into terminal:
export AWS_ACCESS_KEY_ID="########"
export AWS_SECRET_ACCESS_KEY="########"

*Lost on finding your AWS credentials? Here is where to find help

4. Initiate the bucket:
restic -r s3:s3.amazonaws.com/BUCKET init

Enter a password, if you lose that password, you’re no bueno!

5. Begin the backup, this could take a few hours.
restic -r s3:s3.amazonaws.com/BUCKET backup /home --exclude /home/backup

Remember to replace BUCKET with your S3 bucket name. You will want to exclude your backup section.

6. Here is how you can view your snapshots saved to S3:
restic -r s3:s3.amazonaws.com/BUCKET snapshots

7. Need to delete one? Try this:
restic -r s3:s3.amazonaws.com/BUCKET forget #####
Replace # with the snapshot ID

8. Looking to create a cron job? Create a SH script and add it to VestaCP / CRON:

cd home
nano backup-script.sh

Adding this info to your SH file:
# backup-script.sh
export AWS_ACCESS_KEY_ID="####"
export AWS_SECRET_ACCESS_KEY="####"
export RESTIC_REPOSITORY="s3:s3.amazonaws.com/BUCKET"
export RESTIC_PASSWORD="###"

restic -r s3:s3.amazonaws.com/BUCKET backup /home --exclude /home/backup
restic -r s3:s3.amazonaws.com/BUCKET forget -q --prune --keep-hourly 24 --keep-daily 7

I’m telling my backup to keep 1 backup an hour, for 7 days. If you make 3 backups in the past hour, it will delete 2 and save 1, then prune / consolidate chunks / organize the backups so you aren’t charged for extra storage.

9. Now you need to tell Vesta when to run the backup + where to log the process:

/home/backupscript.sh > /home/backupscript.log 2>&1

I have this set for every day at 2am.

Update, Dec 31st 2018:

Using B2 Backblaze

Some people showed interest in using Backblaze + adding mySQLdump.

The setup is basically the same as using AWS S3, but instead you use B2 Account ID + Key:

export B2_ACCOUNT_ID="ENTER-UR-ID-NUMBER"
export B2_ACCOUNT_KEY="ENTER-UR-SECRET-KEY"

restic -r b2:BUCKET init

export RESTIC_REPOSITORY="b2:BUCKET"
export RESTIC_PASSWORD="###"
restic -r b2:BUCKET backup /home --exclude /home/backup
restic -r b2:BUCKET forget -q --prune --keep-hourly 24 --keep-daily 7

Adding mySQLdump to the mix

You can dump all of your databases into a single file by using the following command:

mysqldump -u root -p --all-databases > alldb.sql

You may want to use some of these options:

mysqldump -u root -p --opt --all-databases > alldb.sql
mysqldump -u root -p --all-databases --skip-lock-tables > alldb.sql

Import:

mysql -u root -p < alldb.sql