For a while now this blog has been built with Jekyll which has generally been a very positive experience.
It has also felt very fragile though. Installed as a set of global gems just waiting to be clobbered by an update.

So it was that I broke the setup one day. Instead of trying to fix it, I decided to isolate the setup inside a vagrant VM. This allows me to port it between machines and reproduce it at will.

Show me the good stuff!

The setup is fully open, you can check it out at https://github.com/csainty/csainty.github.io.
In particular see Vagrantfile, v_bootstrap.sh start.sh and publisher.sh

How it works

If you don't already have it, grab vagrant and virtualbox to host the VM.
brew cask install vagrant virtualbox

When you run start.sh it will provision the VM for you and install and configure everything that is needed using the script in v_bootstrap.sh. It will then start jekyll's built in webserver and bind it to http://localhost:4000.

You'll need a second terminal window to run vagrant rsync-auto which is going to sync all the changes you make, so that jekyll can rebuild them with its watch task.

When you are done you can run publish.sh which will do a fresh build, then push the built assets to a GitHub branch ready for hosting.

Finallt stop.sh will simply shutdown the VM to free up resources.

Customization

Obviously these scripts and this setup are designed for my blog. It installs the plugins I need and publishes to my repo. So you are going to need to tweak it for your own purposes, but I hope it can help you on the way.