Creating a remote Git repository
Like Github or Gitlab your staging and production server can serve as remotes for your code. To set this up you first need to create a git repository on your remote server. Login to your server using Terminal for example:
ssh user@domain.com
Then create a bare git repository:
cd /home
mkdir repos && cd $_
mkdir production.git && cd $_
git init --bare
In this example I use /home/repos/production.git
as the reposity directory and /home/www/domain.com
as the webroot. You'll probably have to adjust these paths to correspond with the setup of your server.
Set up a Git post-receive hook
After initialising the repository we will create a post-receive hook which is run after each push:
cat > hooks/post-receive
In this script we will tell Git to copy the code from the repository to the webroot:
#/bin/sh
git --work-tree=/home/www/domain.com --git-dir=/home/repos/production.git checkout -f
In the post-receive hook you can run any additional shell commands. We clear out the caching folders for example after each push. When you are finished setting up your post-receive hook save the file (CTRL+D) and set the proper permissions with:
chmod +x hooks/post-receive
After that you're done on the remote server and you can close the connection with exit.
Local setup
On your locale machine cd
into your project folder and init git if you haven't already with git init
. After that add the repository we've just created on the server as a remote with:
git remote add production
ssh://user@domain.com/home/repos/production.git
Now you are al set up to push code to push into production:
git add .
git commit -m "Ready for production"
git push production master
That's it! You've just pushed code into production. In the same way you can set up a remote repository for you staging environment too.