Setup automatic deployment with Git

Learn how to use Git to deploy a Drupal, Backdrop or WordPress website from your local repository - where you work and develop - to your AltaGrade server - where you keep everything in sync and can work with your team and different machines.

Server-side actions

Note: You can contact us creating a new ticket on AltaGrade Dashboard and indicating which website you'd like to have Git workflow for and we will promptly configure it for you. In this case, skip this section and proceed directly to Localhost actions.

If you do not intend to be pushing files from your local (on your computer) development branch to production branch (on your AltaGrade server) using Git, then proceed to https://www.altagrade.com/help/control-panel/site-manager#create-domain instead for instructions on how to create Drupal 7, Drupal 8, Drupal 9, Backdrop or Wordpress websites with one click. Otherwise, read further to prepare your production branch.

Create an empty website for production branch

We will be pushing the initial code from local development branch, so we need an empty document root for production branch.

If your website has already been deployed, then Login to Control Panel and empty the public_html directory (document root of your website) using the File Manager. Alternatively, SSH into your AltaGrade server and and run the rm -rf /home/username/public_html command.

Otherwise, follow steps on https://www.altagrade.com/help/control-panel/site-manager#create-domain to create a new website, making sure to select either Default Settings or Settings For Sub-Domains in the Domain configuration template field.

Create git repository

Expand the Services menu and then click on Git Repositories, fill in the form replacing altagrade with the username of your hosting account.

Copy the newly create path to git repository under the Directory tab. You will need it for the next step.

Create post-receive action

Switch to terminal and switch working directory to the hooks sub-directory of the copied git repository. For example:

cd /home/altagrade/public_html/git/altagrade.git/hooks

Use nano post-receive command to open an editor and copy-paste the following code properly replacing the TARGET, GIT_DIR and BRANCH paths:

#!/bin/bash
DOCROOT="/home/altagrade/public_html"
GIT_DIR="/home/altagrade/public_html/git/altagrade.git"
BRANCH="master"

while read oldrev newrev ref
do
	# only checking out the master branch
	if [ "$ref" = "refs/heads/$BRANCH" ];
	then
		echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
		git --work-tree=$DOCROOT --git-dir=$GIT_DIR checkout -f $BRANCH
	else
		echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
	fi
done

Make the post-receive script executable:

chmod +x post-receive

That's all you need to do on the server-side.

Localhost actions

Make sure passwordless access is established between your localhost (your computer) and your AltaGrade server.

Create local repository

Open your terminal and make sure you are in the document root of your development branch. If you haven't created git repository yet, then run:

git init
git add .
git commit -m "Initial push from dev to prod"

Configure the remote path

To tell git to add a remote called prod run the following command by providing the correct IP address and secure port assigned to your AltaGrade server:

git remote add prod ssh://altagrade@$altagrade_server_IP:$custom_port/home/altagrade/public_html/git/altagrade.git

Run the git remote --verbose command to make sure you have an output like:

prod	ssh://[email protected]:18752/home/altagrade/public_html/git/alt... (fetch)
prod	ssh://[email protected]:18752/home/altagrade/public_html/git/alt... (push)

Push files to production site

And finally push your last commit to the production site by firing up the git push prod master command:

[email protected]:/var/www/docroot$ git push prod master
Counting objects: 3215, done.
Delta compression using up to 3 threads.
Compressing objects: 100% (3106/3106), done.
Writing objects: 100% (3215/3215), 9.72 MiB | 1.39 MiB/s, done.
Total 3215 (delta 349), reused 0 (delta 0)
remote: Ref refs/heads/master received. Deploying master branch to production...
remote: Already on 'master'
To ssh://212.216.129.226:18752/home/drupdrop/public_html/git/altagrade.git
* [new branch] master -> master [email protected]:/var/www/docroot$

Congratulations! Because at this stage you should be able to see the effect of the pushed files on your live website if you open it browser. Note that the configuration files like settings.php are excluded from git operations, so you have to get them generated automatically (e.g., by completing setting up your website via browser) or copied manually.

You can clone your production website and configure the newly created website as another, for example, testing git repository in the similar manner described above.

Browse git repository

You can use a simple web-based CGI visualizer that comes with git to browse and track commits to your prod repository. To do so open your Control Panel, select your production domain name, expand Services menu on the left, click on Git Repositories and then on Browser Repositorya s shown below:

and you will see the user interface for the git repository like: