Deploy Jekyll Blog with Git
Local Installation
Install jekyll
gem install jekyll
Creating a Blog
Navigate to wherever you want to store your blog files on your local machine, and create a new blog like so:
jekyll new awesomeblog
This will create an awesomeblog
directory containing the configuration files, posts directory and other required bits. Now you can change to that directory and fire up a server process to preview it in your browser.
cd awesomeblog
jekyll serve
Jekyll will build your blog, and after a few seconds you should be able to visit http://localhost:4000
in your browser.
Now let’s initialize a Git repository in the same directory, so any changes you make can be tracked.
git init
git add .
git commit -m "Initial commit"
Prepare the Server
gem install jekyll
Second, change to your home directory and create a new “bare repository” to deploy to.
cd ~/
mkdir repos && cd repos
mkdir awesomeblog.git && cd awesomeblog.git
git init --bare
Following that, we need to set up a post-update hook. This is a shell script that Git runs when files are pushed to a repository. Create it like so:
cd hooks
touch post-update
nano post-update
Now paste in the following script, adjusting the variables accordingly.
#!/bin/bash -l
GIT_REPO=$HOME/repos/awesomeblog.git
TMP_GIT_CLONE=$HOME/tmp/git/awesomeblog
PUBLIC_WWW=/var/www/awesomeblog
git clone $GIT_REPO $TMP_GIT_CLONE
cd $TMP_GIT_CLONE
# bundle update jekyll
JEKYLL_ENV=production bundle exec jekyll build --source $TMP_GIT_CLONE --destination $PUBLIC_WWW
rm -Rf $TMP_GIT_CLONE;
exit
Save the file. Then give the file executable permissions.
chmod +x post-update
Add a Git Remote
Back on your local machine, add a remote to your blog’s Git repository.
git remote add droplet user@example.org:repos/awesomeblog.git
Now you should be able to push your latest commits to the server with the following command:
git push droplet master
Any time you make a new blog post in Jekyll, commit the changes to the Git repository and push to your Server. The cloud server will build the site and the changes will go live within seconds.
Install ruby
curl -L https://get.rvm.io | bash -s stable --ruby=2.0.0