Backup your website off-site with git every day

Today we’ll be going over how to backup your website off-site with git every day. You can use this guide with any service that supports git, we’re focusing on GitHub because it’s reliable, robust and offers a free tier.

Start off by signing up with GitHub here.

Next, create a repository to hold the website code and database. Click Create a repository on the left side of the page

github create new repository

 

At the repository create page make sure you check the Private option so your repository isn’t accessible by the world

github create repository details

Next, you need to add your server’s SSH key to your GitHub account so that your server is able to authenticate with GitHub to pull and push code to it.

To do this, head to settings

github settings page

Click on SSH and GPG keys and then click on New SSH key

github ssh and gpg key add section

For this next part, you need to SSH into your and type in the following commands to generate your SSH keys.

If you navigate into /root/.ssh you should see two files that were just created.

These are your private and public keys for the server. You should never share your private key with anyone, only your public key, labeled id_rsa.pub.

Copy the contents of this file, which look something like below and then back to the GitHub page you were on:

Paste the key, enter a title and hit Add SSH key

github add ssh and gpg key page

Now comes the part where you add all your website code and database backup to the repository.

Note: To avoid the possibility of accidental overwrites, it is only recommended to use this method with an empty repository.

Before we do anything to the code of the website, we’ll create a backup first. The website on our server is located at /var/www/vhosts/websiteone.com.  There are two directories listed in this folder, db and httpdocs. The folder db is where I dump the websites MySQL database and httpdocs is the working directory where the actual code of the website resides.

Navigate into the folder where the website is located, for us, this would be /var/www/vhosts/websiteone.com.

You need to get the URL of your repository, head back to the main page of your account click on the repository you created earlier. Inside you should not see a green button labeled Clone or download, click this button and copy the Clone with SSH address

github repository address

 

At this point, it is a good idea to make sure you have git installed on your server, if not issue the following:

Now to clone the repository onto your server and push your website into it. The following line will clone the repository into a folder called temp

Here’s a look at the directory structure after the repo was cloned into temp

server website folder

Move the important bit out of the temp folder and into your website directory

If you take a look at the folders now, you’ll see a hidden .git  folder in there

server git folder

Remove the temp folder

Add both the db and httpdocs to your repository.

You’ve just successfully pushed your website and database file to the repository.

Now to automate this, create a file called backup.sh in your home directory. Since we’re root for us it’s /root. Add the following to it:

You now need to add this file to be executed by cron at a set time of the day. You can change this to run at whichever time you prefer, you can even increase the frequency of execution depending on your needs. Issue the following at the terminal to open the cron text editor.

You’ll be greeted by a blank page, press the letter i to enter edit mode. To backup your website once everyday at one minute past midnight, enter the following line:

Press the ESC key and type :wq followed by the Enter key. This will save the line you just added to cron, now you need to restart the cron service to pick up the new routine:

That’s it, have a look at your repo at GitHub to verify the first commit and you’re done.