Hello, today in this post I will show you how I deploy Git project to the production (or development) server, and push changes to them automatically through git web hook wherever I made changes through the repo. I use this method to see live changes to the project server.
To be precise, I made this Ghost theme locally and when everything is okay, I push to the server and see live changes. So that I don't need to re-upload theme whenever changes I made. If you're in similar goal to archive, you can follow the tutorial below, or else, you can alter it based on your needs.
Requirement
In order to follow this tutorial, you need a remote server available and Ghost installation ready. Make sure you install Ghost through Ghost-CLI, as it much easier to install, to troubleshoot and much more.
- VPS DigitalOcean referral link.
- Ghost CMS install (follow installation instruction)
- Note: My referral link grants you 50$ credits on sign up to try on and can be use up to 30 days. There is no loss or risks whatsoever.
In remote server
Login to your remote server (not root).
2. Create:
mkdir ~/deployment-folder.git cd ~/deployment-folder.git git init --bare nano hooks/post-receive chmod +x hooks/post-receive
Add the following in ~/deployment-folder.git/hooks/post-receive
#!/bin/bash TARGET="/var/www/ghost/content/themes/mythemes" # deploy-folder GIT_DIR="/home/user/deployment-folder.git" BRANCH="master" while read oldrev newrev ref do # only checking out the master (or whatever branch you would like to deploy) if [[ $ref = refs/heads/$BRANCH ]]; then echo "[+] Ref $ref received. Deploying ${BRANCH} branch to production..." sudo git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f echo "[+] Initializing folder .." sudo chown -R ghost:ghost $TARGET sudo chmod 755 $TARGET echo "[+] Restarting ghost service" cd /var/www/ghost ; ghost restart else echo "[-] Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server." fi done
In local machine
- In your repository:
Change directory to git project folder:
cd mythemes
To set a new remote. In this case remote called as 'production' you can change to whatever you want.
git remote add production [email protected]:/home/user/deployment-folder.git git checkout master git push origin master # push to github git push production master # push to server
To view (verify) remote:
git remote -v
On push to remote production, everything will automate and make changes to Ghost theme on web server.