Menu

From Wordpress to Jekyll to Ghost

This little blog has gone through some changes over the years. It started back in 2010, and back then it was on Wordpress. Wordpress powers many content sites nowadays, not just blogs.

Here's what it looked like back then (rescued from the Wayback machine, so it's not perfect).

As you can see, I was going for a whiteboard style background. Lots of drop shadows and paper-style effects. Realistic style. Skeuomorphism. I was really proud of this design at the time.

Wordpress

Wordpress was fine. Sadly, there weren't any good tools on the Mac for putting up pixel-perfect blog posts at the time. So I ended up using Windows Live Writer inside a Windows XP virtual machine.

I could have just logged in to the site and written posts there, but Live Writer has amazing tools for editing images, adding watermarks, effects, etc.

I don't like Wordpress much. It does the job, and it truly is a powerhouse for making a content management site. I once worked as a contractor at a startup where the MVP was build out on Wordpress. I came in to add functionality. Wordpress can be tricky for adding functionality. There's a big learning curve.

What I didn't like:

Updates: any time a new version comes out, you have to do a manual upgrade. There is a way for it to be automated, but it involves setting up FTP on the box. This is 2016. I haven't set up FTP on a server since 2003. The manual upgrade takes maybe 30-45 minutes. Not terrible, but just a hassle.

Security: this may be just my perception, but Wordpress has some security problems. I remember in 2006 when a company I was working for was getting regular security scans, where a service would pound our servers with hits to all types of strange URLs on our sites, looking for vulnerable software installs. Quite a few services they were probing were PHP-based software. We didn't have a forum or Wordpress blog, but thousands of calls were made trying to exploit them.

Too big for me: Wordpress is a castle (content management system) built around a hut (blog). It is too big for the task. It takes a lot of resources, and it's just way too much for my needs.

Jekyll

I got busy running a business and didn't blog for a while. I'd still install Wordpress upgrades (for security purposes) but didn't blog much. I wanted to move my blog to something lighter, and to something that could survive a few months (or years) without needing a security update.

At the end of 2013, I took my little abandoned blog and moved it to Jekyll.

Jekyll is a static blog generator, written in Ruby. You write a post and publish your blog, and Jekyll generates a bunch of HTML pages. You upload your files to your server, and you're done. It makes your blog very fast, because your web server is just serving static pages. It's also very secure, because the only software you're running is your web server.

The Jekyll system is pretty cool. It's not a mainstream blogging platform, because you have to be technical to use it. There is no UI to log in to. To make a new post, you create a markdown file, and put a little meta data at the top, and just write your blog post in markdown.

While you write your post, you can preview it as you go in your web browser. So instead of some preview pane in a UI, you're previewing exactly what it will look like, right in the browser. Very cool.

When you're done, you run jekyll build and your entire site is generated and output to a folder.

I took the whole static site thing one step further. I pushed all the files to Amazon S3 using s3cmd, and then used Amazon Cloudfront to serve the blog from the S3 bucket. So with my blog served from a CDN, it was about as secure as you could get. And it would take a large army of servers to bring it down.

There was still a bit of cleanup (because of all my pixel-perfect stupidity in the old blog), but the conversion worked great.

I redesigned the site to be responsive (that was still pretty new for me). I didn't use a CSS framework to do that, so it was kind of a challenge, but it turned out great, and scaled to screens really well. And the design was much simpler this time. No more faux-whiteboard and post-its.

I wrote one blog post, and the blog sat there for two years, untouched.

Ghost

Ghost is the final home for Startup Next Door. I don't foresee any more moves. Ghost runs on Node.js. So I went from PHP to Ruby to Javascript, basically.

With Ghost, as with Wordpress, you log in to the site, and edit and add content directly in the browser. The best part of Ghost is it still uses Markdown, but has a side-by-side view for previewing the content.

This time I didn't want to spend time designing a new site. Design is really hard to do well, so this time I used the default theme with a couple of minor changes to add the Disqus plugin and a couple other things.

For search, I use Google Custom Search, so that I can add search to the site without needing to run additional software. When the site was on Jekyll I was limited to static pages, and Google Custom Search did the trick. You just put some Javascript into the page and add a search placeholder. See the Search page on this site.

I use a special install of Ghost. I made a set of Docker containers that house my install:

This uses docker-compose which creates a composition of containers connected together. It has these components:

Ghost: 0.7.5

NGINX: 1.9.9

MySQL: 5.7.10

Ghost runs on port 2368, and I use NGINX to reverse proxy requests to the blog. I don't recommend allowing direct web access to 2368.

What I like about Ghost

Markdown: Markdown is a super easy markup/down to learn and easily use. Ghost has some built in keyboard shortcuts for adding images and links, making text bold or italics, etc.

Side-by-side preview: Being able to see the effect of your markup before you publish is super.

No HTML stored in the database: 'nuf said. Technically, it processed the markdown into HTML and stores that so it doesn't have to convert from Markdown to HTML on each page request. So that's forgivable. But the markdown you write is stored as markdown. So your data is clean of HTML (should you ever want to take it elsewhere).