Deploying a WordPress site via Git Hooks on a ServerPilot Server

This guide looks at setting up a git deployment using hooks to push local commits from a local development to a remote development branch which then published those changes live, stored on a staging domain using a ServerPilot set up.

First up is to set up a ServerPilot app, add your system user and create a MySQL database via the ServerPilot control panel. I am using a Vultr droplet but any other like Linode or Digital Ocean is the same. This is a development staging site that I can share with the client before migrating to live.

The article works backwards – first you set up the git hook and tell git where the git repo is stored and what destination to push the changes to.

Copy Your SSH Keys to ServerPilot

First up copy your SSH keys from your local to your ServerPilot account, so from your local development…

ssh-copy-id [email protected]

Above I am using the a fictitious account sysuser account, use which one your domain belongs to, if you only have the free serverpilot account then that’s your only option. In reality I have a few accounts on the droplet and I use individual accounts per user for better security.

Set Up a Git Repo on the Staging Site

In a Terminal SSH session, navigate to the home and create a directory wpstaging.git

cd

cd to get home – check with…

pwd

And you should see…

/srv/users/sysuser

Make a directory

mkdir wpstaging.git

Initialise a bare git repo

git init --bare

Create a post-receive hook

nano hooks/post-receive

Add in the hook where git needs to deploy the data from and to destinations

#!/bin/sh
 git --work-tree=/srv/users/sysuser/apps/domain-app-name/public --git-dir=/srv/users/sysuser/wpstaging.git checkout -f

So above change the app name and system user name to your settings and save the file.

Make sure the hook is executable…

chmod +x ~/wpstaging.git/hooks/post-receive

That’s it on the remote side of things.

Create the remote branch on the local site

So now on your local development and its taken that you have a local repo already established, so now add in the remote branch.

git remote add staging ssh://sysuser@dev.somedomain.com/srv/users/sysuser/wpstaging.git
 git push staging master
 git push --set-upstream staging master

Now you commits will be pushed to the wpstaging.git directory on the remote server and the post-receive hook will then push the changes into the public webroot folder.

1 Comments

  1. John on March 20, 2018 at 11:39 am

    Hello there and thanks for the guide, it really helped.

    I have everything working, but hit a road block in my understanding when trying to switch branches of the remote staging site and I’d really appreciate a point in the right direction.

    My aim is to preview branches to colleagues on “staging”. Then, merging locally and pushing to staging/master, then checking out to master on staging for final preview.

    When logged into the staging server and running “git checkout mybranch” I get the following error “fatal: This operation must be run in a work tree”. Which from research, it’s essentially due to the repository being bare?

    The branch does exist on the remote server and is listed as a remote repo from local.

    Do I need to edit the post-receive hook or is there a different command I should be using?

Leave all Comment