Git Push to Deploy + Build
October 10th, 2016
This is basically the gist of the Digital Ocean tutorial but with a few extra hints along the way. If you get stuck, there are lots of comments/discussion on that post.
The outcome of this post will get you setup to do something like
git push live master
And have it send your files to your server, install your Composer dependencies, and migrate your database.
1. Setup a git repo on the server
We need to setup an empty git repository on the server. This is not your actual project that you're pushing up, think of it like a local GitHub on your server. It just stores the files you track in git.
SSH into your server and make a directory where you'll store all of the repos for your projects that you want to this up for. Something like
/home/YOURUSER/repos/. Inside this folder, create a new folder for your project initialize an empty git repository. In my examples, I'm going to assume my project is called
cd /home/ozzie mkdir portfolio.git cd portfolio.git git init --bare
git init --bare line initializes a blank git repository. If you run
ls, you'll see the different files and folders git makes for you. We're going to want to change into the
2. The post-receive hook
Now that we're in the
hooks folder of our repo, we're going to want to setup a
post-receive hook. If you're not familiar with git hooks, they're files that get called based on different actions in the git life cycle. The
post-receive hook gets called whenever you push to this remote destination. Let's make this file.
# This may need to be run with sudo prepended nano post-receive
Inside nano, enter these lines
#!/bin/sh git --work-tree=/home/ozzie/www/portfolio --git-dir=/home/ozzie/repos/portfolio.git checkout -f composer install -d /home/ozzie/www/portfolio php /home/ozzie/www/portfolio/artisan migrate
Make sure you've swapped out the paths above to the ones related to your project. Once you've entered the above in, press
ctrl+x to exit. When prompted, press
Y to save and
enter to use the original filename.
After you've saved it, we need to make the file executable. Run the command
chmod +x post-receive
Here's how this file works if you've never wrote a bash script before. It goes down the file line by line, executing each command in the order they are written. Here's what ours does:
- The first line tells the script what shell to use, we're just using the Ubuntu default.
- We first set the working directory to the folder where our project lives (not the repo folder we just made), and then tell it where the repo we want to grab from lives (this is the
.gitfolder we just made). Then we simply use
checkout -fto change our projects files to the ones we just pushed up to the
- Lines 3 & 4 are optional, but I like to have them in there to save me an ssh into the server. These simply run a
composer installinside the project directory, just in case I pulled any new ones in, and the last line runs Laravels
migratecommand to update the database with any changes I might have made locally.
Feel free to add any other commands underneath the 2nd line that are a part of your build process. Maybe you need to run an
npm script; all you would need to do is add whatever command you would type into your terminal, underneath that second line.
3. Adding the new repo as a remote
Now, navigate in your terminal to where you are working on this project on your local computer. Mine is
~/Code/portfolio. Inside here we simply want to add our server as a remote option.
git remote add live ssh://email@example.com/home/ozzie/repos/portfolio.git
Now whenever you want to make your changes live on the server, simply run
git push live branchname
And it'll upload it automatically! If you added extra commands after the
git checkout in the
post-receive file like I did, you'll also see any output that the command generates. This is helpful to know that your build process went smoothly.