How to setup a staging server that will then push to production server

May 28, 2015 2.5k views
Deployment LAMP Stack Git Ubuntu

Hi there,

One area of my workflow — like many — that is weak, is how I go from local to production. At the moment it's dangerously messy.

I build offline, then go straight to my production droplet, create the SQL database and import and create my git hooks which pull straight into the live directory. I am really interested in finding out about using another droplet as a staging server but have yet to find a tutorial for it on Digital Ocean.

Is this something anyone fancies writing up? Seems like a missing area in the tutorial area. I can't get my head around how the workflow would go using a staging server that keeps things from getting cluttered if you're dealing with multiple sites. Mapping sub domains to folders seems like over time it could get massively cluttered. Is there any other options out there?

Need some advice on this

3 Answers

Following this tutorial by Justin you can setup a production server that uses git hooks for deployment based on commits to the master branch.

Repeating that process on another server (or the same one if you're short on droplets) and changing the post-receive hook to watch for commits to the staging branch instead of master .

Lastly I would add a remote such as:

 git remote add staging

Automating the push from staging to master will depend greatly on your workflow, automated testing, code review and similar things specific to your repository / project.

For small projects and applications I add my automated tests to the post-receive hook, if all tests pass it will tell me in the response of git push staging <branch> so I can then merge to the master branch and push to production manually.
Additionally, commits against the hotfix branch on the staging server are automatically merged to master and pushed to production if all of the tests pass, if for any reason tests don't pass on the production server it will revert back.

by Justin Ellingwood
Git is a very robust and mature version control system that has seen great adoption in recent years. One of git's great features is its ability to use "hooks" to call arbitrary scripts when certain git events occur. In this guide, we'll discuss the general idea behind git hooks, talk about how to work around some of its inconsistencies, and demonstrate some implementations that you can use in your development process.
Have another answer? Share your knowledge.